我们也用网络共享的方式做了一些ACCESS的数据库,但好象没有发现你所说的数据丢失的问题,单机使用更不会出现你所说的问题了,如果真如你所说,好VB+ACCESS是要淘汰了

解决方案 »

  1.   

    共享ACCESS的方式肯定不好,所以真的是不推荐!
      

  2.   

    1、安装上最新的ACCESS2000以及MDAC2.5、2.7、2.8
    //与你的问题无关,只是关系ado访问而已。
    2、ACCESS不适合局网共享式应用
    //确实不适合共享的应用,access更适合单机
    3、使用了事务的原因
    //sql中的事务一样对access有用我只能猜测到的,数据当时还在,后来不在,只存在以下原因1,事务
    2,access需要进行修复,大量数据在内存中间,用户的数据库被损坏建议直接发消息给ACCESS的斑竹changechange,他是个access方面的高手
      

  3.   

    没碰到过,是更新没保存上,还是数据库中的数据丢失呢?
    我估计是前者吧,否则就太恐怖了,那Access谁还敢用?
    能说一下,你是用什么方法访问数据库吗?尤其是如果更新并保存数据的?
      

  4.   

    1,检查程序代码
    2,如果对数据库的操作比较频繁或并发操作较多,还是建议将ACCESS数据库换成SQL数据库
      

  5.   

    不可能出现的,这些问题肯定是程序本身设计的问题。
    我看看很多财务软件也是Access数据库,比如金算盘、金蝶。
    如果出现你的问题,那原来使用的用户为什么没有?这证明ACCESS没有问题。
    金算盘的前台用VB调用操作,为什么没有这种问题,所以是你设计的程序有BUG.
      

  6.   


        '我原来的做法是 开始的时候打开 ado connection 一直到退出程序才关上。后来发现有些数据更新不上,特别是在数据操作频繁的情况下。
        '现在做法是在操作数据的时候,打开Connection,操作数据,然后Close,然后Set Nothing 。释放内存。当然,RecordSet 也是这样做。
        '这样程序会显得慢一些,但是没有了丢数据的情况,也不会出现互锁什么的。
        '所以现在所有的数据操作都是“瞬时”的(相对于用户操作来说),不会出现开着一个 Connection 或者 RecordSet 在那儿等待用户输入的情况
      

  7.   

    哦,fishzone(阿愚@脸上没疤) :我们是这样做的,ado connection 一直没关闭,有段共用程序一直处于检查状态,如果connection是NOTHING时,才重新连接,否则一直用它。而RecordSet 方面我们用完就马上关闭,和这个有关系吗?应该没有吧?另外,用insert into 应该不会导致这种结果吧?有朋友说应该用rs.addnew 加上 rs.UpdateBatch 
    但我觉得应该不会产生这样的结果吧?
      

  8.   

    强烈建议connection用完立即关闭,短时间内如果再打开同样的连接,可以从连接池得到,不会有性能损失
      

  9.   

    哦,现在已经总结出一条可能了,就是“connection用完立即关闭”我们马上试试,但还有其他原因的可能吗?另外,由于我们开发组以前一直在做大产品,所以开发机器至少都在WIN2K PROFESSION下开发、编译,还有FAMILY SERVER的开发机器,这对于在WIN98和WINXP下的用户有影响吗?希望大家多出点点子,分我多的是,关键是希望为其他开发人员也有个参考贴,免得付出和我们一样高昂的代价!
      

  10.   

    另外征求一下意见:
    在win98和winxp、win2k都使用的程序,编译环境哪种操作系统最好?
    我感觉在win2k下编译的程序只有win2k下使用最稳定,但在98和XP下不同版本效果完全不同!
    有的就非常不稳定,甚至安装都有故障。
      

  11.   

    2k最稳定,如果数据多为什么不用sql server
      

  12.   

    正因为数据不多而且考虑到安全、维护和实施方便,才用的ACCESS,你想想,一套单价不高的软件产品,肯定要注意这些细节啊,不可能专门还去装个SQLSERVER吧?但我怀疑象一些同仁讲的,可能真要在98或XP下编译才更好,因为一些DLL好象版本是不同的。经常出现安装问题。唉,。这些个环境问题真是把我们害苦了。希望大家多提些经验性的看法,再次感谢!!!!!!!!!!!!!!!!!!!!
      

  13.   

    建议分版本编译测试,在98上编译98版本,在XP上编译XP版本....;
    在空白98上安装并测试98版本,在空白XP上安装并测试XP版本....
      

  14.   

    //这样短期测试还可以,但总不能销售软件时先问客户的操作系统版本吧?
    都带着,安装时,判断操作系统版本,copy不同的文件,这样能保证万无一失啊,免得出了问题麻烦
      

  15.   

    //都带着,安装时,判断操作系统版本,copy不同的文件,这样能保证万无一失啊,免得出了问题麻烦这是王道 :-)
      

  16.   

    好的,又一条总结也出来了。即:“安装时尽量多考虑不同操作系统DLL的安装,宁愿安装包大一点,后期维护也就少一分”
      

  17.   

    强烈关注中……,
    我碰到过类似的,
    不过是MS SQL Server的,
    郁闷了半天,,,
    未果……,
    帮楼主UP
      

  18.   

    来晚了,想要说的都别说出来了,不过对下面这句话不太明白:正因为数据不多而且考虑到安全、维护和实施方便,才用的ACCESS,你想想,一套单价不高的软件产品,肯定要注意这些细节啊,不可能专门还去装个SQLSERVER吧?ACCESS安全吗?装一个ACCESS 和一个SQLSERVER有什么区别呢?难道你们都用正版吗?
      

  19.   

    ////ACCESS安全吗? 
    不大安全 ////装一个ACCESS 和一个SQLSERVER有什么区别呢?性能有很大的区别////难道你们都用正版吗?自己用D版玩,别人公司用的就有很多正版,要记住数据库是客户要出钱的,不是你送的。
      

  20.   

    ACCESS原则上还算不得数据库,它只是基于文件的管理,原则上应该微软也考虑过多用户的并发操作问题,但如果真是出现你说的这种情况,可以设置单入口,采用锁机制,可能会好一些,只有牺牲一下客户的操作时间了。但建议你还是仔细查阅一下你的程序吧。
      

  21.   

    应该不会吧。我看到一些论坛的源码。ASP+ACCESS。那可是网络论坛。都没有这样的问题呢。
      

  22.   

    Sorry,因找不到"小类社区"发新帖,只好接在您后面啦^_^
    --------------------------------------------------
    本人因学习需要:
    1. "Visual Basic 6.0 中文版程序员指南"
    Microsoft Corporation  著
    微软(中国)有限公司  译
    北京希望电脑公司  出品
    (含一张配套光盘)2. "Microsoft Visual C++ 6.0 程序员指南"
    Beck Zaratian 著
     微软授权出版
    (含一张配套光盘)3. (中文版, 英文版皆可) (含一张配套光盘)
    中文名: Programming Windows程式开发设计指南(第五版)
                作者: Charles Petzold
    英文名: Programming Windows by Charles Petzold (Fifth Edition)
                Microsoft Press交易地点: 限南京市
    本人: 孙先生
    本人联系方式:
    Email: jerysun0818@hotmailcom
    或      [email protected]
    手机: 13003424733 (请发短信, 本人囊中羞涩, 从不接手机:-)您的回复信息格式为:
    1. 您的姓名, 联系方式(手机, Email)
    2. 以上您有哪几本还是全有? 您出的交易价格?
    3. 在何时, 何地交易?
      

  23.   

    //“VB+ACCESS的数据丢失问题”因access不是大型數據庫,如果你的數據量大到一定程度,數據丟失的可能性很大,這就是小型數據的弱點了
      

  24.   

    access根本就是针对单用户的数据库,你别听微软瞎吹,严格来讲它就不是什么数据库,只是一个数据文件,它没有完善的安全机制,你可以做两个试验:1、多程序同时写数据库,有可能数据丢失(同机器的数目没有关系);2、程序写数据库时,你非正常杀死程序或干脆强制关机,数据库损坏。所以使用ACCESS做多用户的数据库是软件设计的大忌,它同VB、MDAC一点关系都拉不上,而是你在强按牛头吃草,冤枉VB了。这个问题也不是历史上一直悬而未决的问题,老程序员因为以前的计算机性能低下,往往要在ACCESS和SQLSERVER之前做抉择,所以这个问题算是常识,只是现在的程序员因为机器性能高,动辄就SQLSERVER,所以反而不知道,还把它当成历史悬案了。至于论坛,那是IIS机制的功劳,没ACCESS什么事。
      

  25.   

    不是选择数据库的问题,我只是想找到可能产生的原因,前面我写的你没仔细看吗?//############################1、客户主要使用的都是98、XP
    2、开发环境为WIN2K+ACCESS+VB
    3、几乎多数客户都发生过单据保存后当时还在,退出程序后或第二天开机就丢失了部份单据!############################//
      

  26.   

    开发多年也没遇到过这种问题,和开发工具有什么关系呢?照老兄说的,顶多是和数据库、ADO(如果你用该对象访问)有关系,而且这种情况发生的可能性即便存在,又会有多大几率呢?而你们的客户多数都出现情况了,你是否能保证程序的逻辑控制就没有问题呢?编程序最忌讳的就是以自己作为正确的立场来否定别的事务。
      

  27.   

    楼上的:
    ==================
    来晚了,想要说的都别说出来了,不过对下面这句话不太明白:正因为数据不多而且考虑到安全、维护和实施方便,才用的ACCESS,你想想,一套单价不高的软件产品,肯定要注意这些细节啊,不可能专门还去装个SQLSERVER吧?ACCESS安全吗?装一个ACCESS 和一个SQLSERVER有什么区别呢?难道你们都用正版吗?
    ===================
    使用access就非要装access吗?我们只是使用Microsoft.Jet.OLEDB.4.0 ,或者 microsoft access driver,如果你愿意,你的access文件可以取名XXXX都可以,可是如果使用SQLserver ,那好了,客户那里至少得有一个SQL server在那里运行,除非你提供一个sql服务器,把客户的数据放在你这里.这个关盗版和正版什么事呢?
      

  28.   

    不是选择数据库的问题,我只是想找到可能产生的原因,前面我写的你没仔细看吗?
    ----------------------------------------------------------------------------如果说你的重点是为了问题的解决方案,那你提供的信息量太少了,我们也无从下手,怪不得别人。 
    就光是你提的那几点,什么可能性都有,但最大的可能性是你们程序设计问题。
    access数据文件可以达到2个G,那时候速度很慢,再大就有可能打不开文件,但没发现过存盘失败的情况。但作为一根救命稻草,你可以问一下数据文件大小,并且添加压缩数据文件大小的语句。
    如果你实在不愿意考虑是否是自己的程序算法问题,则不防把运行环境、数据文件、丢失内容归纳一下,列成表格,对比一下异同点,也许能解决问题。
      

  29.   

    1. 同意  godanddog(苦行者) ,Access 数据库太大会有异常,如果数据库文件大小达到 G 的单位,应该分不同的数据库文件存放数据。2. 仔细检查程序,特别是事务操作。
      

  30.   

    你的數據太多,也許這就是Access 本身的缺陷;
    但我想最大的原因還是數據根本沒保存到數據庫裏面,你仔細看看Updata的代碼,我以前也遇到過類似的問題,而且我的數據不多也會這樣。
      

  31.   

    为什么要用ACCESS共享?
    难道VB的三层分布式开发就是你们所谓的将ACCESS文件共享,
    然后每个客户端直接访问?I服了U
      

  32.   

    up>>
    uP>>
    我也曾遇到差不多同样问题,单机当记录数特别多时或是多机同时频繁操作时,有ACCESS坏掉的现象,不过好像没遇到过丢数据的事。我现在网络数据库全用SQL SERVER,一直没问题,也不算复杂的。
      

  33.   

    我们单位也发生过类似的情况(当数据量较大的时候)
    后来也是没办法,把我们地区物流中心的数据库修改为sql server
      

  34.   

    同意 vansoft(Vansoft Workroom) 
    问题出在共享式访问上
    这是完全是单机版程序应用在网络平台
    别说是三层了,C/S都算不上
      

  35.   

    从书上看到一个查询出RECORDSET的函数,可以放到标准模块中,我觉得挺好用的,你可以参考下
    Public Function EXESQL(ByVal txtsql As String) As Recordset
    On Error GoTo errsqlh
        Dim cnn As ADODB.Connection
        Dim db As ADODB.Recordset
        Dim ss() As String  '定义数组为比较第一个SQL语句中的关键字
        ss() = Split(txtsql)
        Set cnn = New ADODB.Connection
        cnn.ConnectionString = "。。"
        cnn.Open
        If InStr("INSERT,DELETE,UPDATE", UCase$(ss(0))) Then
            cnn.Execute txtsql
        Else
            Set db = New ADODB.Recordset
            db.CursorLocation = adUseClient
            db.Open Trim$(txtsql), cnn, adOpenDynamic, adLockOptimistic
            Set EXESQL = db
        End If
        Set db = Nothing
        Set cnn = Nothing
        Exit Function
    errsqlh:
        MsgBox Err.Description
    End Function
      

  36.   

    一般来说,代码问题居多。比如 事务处理上,处理失败没有及时的回滚,1事务开的过长,2错用on error resume next等都有可能导致 数据的不正常回滚。数据库设计不完美,access不比salserver,更多的是靠客户端代码操作,涉及多表,或多库操作,都有可能因网络中断或延持 而导致数据操作的失败,建议改善数据库设计,优化查询语句。//其实数据库这东西,是为程序员服务,而不是客户;操作功能低点的数据库,更要程序员下工夫花心思去面对。
    //小李飞刀用的是飞刀而不是手枪;access好比飞刀,sql server好比手枪。
      

  37.   

    请问楼主是用 insert into 还是 rs.addnew 添加数据
    我只用 insert into 添加数据,没有遇到你说的问题
      

  38.   

    从维护角度的观点:
    //在所有客户机器上安装了VB、安装了MDAC2.7、2.8,已经全部安装上ACCESS2000
    -- 这是程序员的大忌。//在不同系统下作不同版本的说法
    -- 极力反对,作不同版本,是迫不得以的做法。事实证明微软的系统有很好的向下兼容机制。一个程序分作好多个版本,让人有种菜菜的感觉,客户也不看好。//access的维护
    -- 这个小东西经常会坏掉,而且体积越来越大。作法: 数据导出,然后删除,重新建立,再导入数据。其实access数据库的程序很好维护,在网上挂个升级包,时不时的对客户的程序 copy 一下就行了。
      

  39.   

    不过微软的东西向下兼容我看也不见得好,前不久写了一个小东西,用到了微软的精灵组件,在2000下面写的,在2000和xp下面运行没有问题,一到98下就出错,后来才发现在98下也有跟2000和xp一样的精灵组件,只不过文件不一样罢了,弄明白了这个道理,总算才搞定了这个事件。access用了很多,基本上没有发现楼主说的情况,我也认为应该是代码上面有问题,不过话说到vb,有时候vb自己也有一些莫名其妙的问题,我的一个程序,在不需要改动一个字的情况下,有时候能正常运行,有时候报错,最后没有办法加了一个错误跳过才可以用了的,都不是数据库造成的,就是一句简单的text1.setfouce,也不知道写对了没有,我都是用vb自动完成的,就是获取焦点的那句,也顺便听听大家的意见