我现在遇到一个很棘手的问题,同样是增加一条记录到数据库,一个是yhxx表(注:用户信息表) 另一个是sdjl表(注:售电记录表)。  前者使用ADODC3这个控件进行增加,后者使用的是CONN.EXCUTE SQL这种方法增加,但是增加完成后,分别从这两个表中立马查询增加的用户编号,sdjl中可以立即查到,但是yhxx表,却不能立即查到,并不是说没有,需要查二、三次,才会提示查到这个用户编号。请大家帮我分析一下,原因是什么。以下是具体的代码:
'*********** 代码开始************        Adodc3.Recordset.AddNew
        Adodc3.Recordset!用户编号 = CLng(Zongbianhao)
        。
        Adodc3.Recordset.UpdateBatch
  
        sql = "Insert into sdjl ([用户编号],[用户表号]) values (" + Trim(Text13.Text) + "," + Trim(Text2.Text) +  ")"
        
        Conn.Execute sql         Dim Rst1 As ADODB.Recordset
         Set Rst1 = New ADODB.Recordset
         Dim sql As String
        
        sql = "select * from sdjl where 用户编号 =" & CStr(Zongbianhao) & ""
        
        If Rst1.State = 1 Then Rst1.Close
        
        Rst1.Open sql, Conn, adOpenKeyset, adLockPessimistic
        
        If Rst1.RecordCount = 0 Then MsgBox "SDJL 中找不到此用户编号", vbOKOnly, "提示"        Rst1.Close
        
        sql = "select * from yhxx where 用户编号 =" & CStr(Zongbianhao) & ""
        
        If Rst1.State = 1 Then Rst1.Close
        
        Rst1.Open sql, Conn, adOpenKeyset, adLockPessimistic
        
        If Rst1.RecordCount = 0 Then MsgBox " yhxx  中找不到此用户编号  ", vbOKOnly, "提示"'*********** 代码结束************

解决方案 »

  1.   

    把Conn的定义,连接串,初始化选项贴,也贴出来看看.
      

  2.   

    把Conn的定义,连接串,初始化选项(游标类型等),也贴出来看看.
      

  3.   

       sysConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\***.mdb; User ID=yuejia;Password=*****;Persist Security Info=True;Jet OLEDB:System database=" & App.Path & "\*.mdw;Jet OLEDB:Database Password = ******"    Conn.CursorLocation = adUseClient  
        Conn.Open (sysConnString)拜托了,猴哥。
      

  4.   

    ADODC控件加记录保存后需要刷新,然后再查询就应当没有问题
    Adodc3.Recordset.MoveFirst
    Adodc3.Recordset.MoveLast
    Adodc3.Refresh
      

  5.   

    另外,你的连接字符串好像有问题,用下面的
    Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\***.mdb;Persist Security Info=False;User ID=yuejia;Password=*****;
      

  6.   

    我刚试了一下 孤独剑 老师的 建议,以下是部分代码,        Adodc3.Recordset.AddNew
            
            Adodc3.Recordset!用户编号 = CLng(Zongbianhao)
            Adodc3.Recordset!用户表号 = CLng(Trim(Text2.Text))
            Adodc3.Recordset!用户号 = CLng(Trim(Text12.Text))
         '   Adodc3.Recordset.Update
            Adodc3.Recordset.UpdateBatch
     
            Adodc3.Recordset.MoveFirst
            Adodc3.Recordset.MoveLast
            Adodc3.Refresh
            
            
            
            
       
             Dim Rst1 As ADODB.Recordset
             Set Rst1 = New ADODB.Recordset
             Dim sql As String
         
           sql = "select * from yhxx where 用户编号 =" & CStr(Zongbianhao) & ""
            
            If Rst1.State = 1 Then Rst1.Close
            
            Rst1.Open sql, Conn, adOpenKeyset, adLockPessimistic
            
            If Rst1.RecordCount = 0 Then MsgBox "用户信息中找不到", vbOKOnly, "提示"
        程序 还是提示   用户信息中找不到
      

  7.   

    执行Select之前先去数据库里看看有没有这条记录啦,如果库里没有再怎么Select也是不会出来的
      

  8.   

    to citybird 查过,有的。
      

  9.   

    '*********** 代码开始************ 
    Private Declare Sub Sleep Lib Kernel32 (ByVal dwMilliseconds As Long)'加在窗体程序开始位置……
          Adodc3.Recordset.AddNew 
            Adodc3.Recordset!用户编号 = CLng(Zongbianhao) 
            。 
            Adodc3.Recordset.UpdateBatch 
      
            sql = "Insert into sdjl ([用户编号],[用户表号]) values (" + Trim(Text13.Text) + "," + Trim(Text2.Text) +  ")" 
            
            Conn.Execute sql         Dim Rst1 As ADODB.Recordset 
            Set Rst1 = New ADODB.Recordset 
            Dim sql As String 
            
            sql = "select * from sdjl where 用户编号 =" & CStr(Zongbianhao) & "" 
            
            If Rst1.State = 1 Then Rst1.Close 
            
            Rst1.Open sql, Conn, adOpenKeyset, adLockPessimistic 
            
            If Rst1.RecordCount = 0 Then MsgBox "SDJL 中找不到此用户编号", vbOKOnly, "提示"         Rst1.Close 
            
            sql = "select * from yhxx where 用户编号 =" & CStr(Zongbianhao) & "" 
            sleep(1000)  '时间可以调整,1000改成多少,试验看吧
            If Rst1.State = 1 Then Rst1.Close 
            
            Rst1.Open sql, Conn, adOpenKeyset, adLockPessimistic 
            
            If Rst1.RecordCount = 0 Then MsgBox " yhxx  中找不到此用户编号  ", vbOKOnly, "提示" '*********** 代码结束************ 
      

  10.   

    VB中延时功能与Sleep函数
      

  11.   

    改成静态游标试试:
    Rst1.Open sql, Conn, adOpenStatic, adLockPessimistic
      

  12.   

    即便是加延时,也不必搞那么复杂,以下这样就可以了:dim t as single
    t=timer
    do 
      doenvets
    loop while timer-t<1'这就是延时一秒,可以是小数
      

  13.   

    别用Adodc了,直接用ado的conn操作就没这些麻烦事了。况且你这样的用途写库容错要强,最好加数据库事务。用Adodc反而不好
      

  14.   

    因为 Adodc 使用与 Conn 不同的连接,并且该控件的更新是有延时的。所以你调用了 UpdateBatch 并不马上递交到数据库,没有取道预期的数据很正常。不用 Adodc,全部通过 Conn 进行更新。
      

  15.   

    谢谢,tiger_zhao,既然您知道ADODC有延时,那请问如何控制他的延时,通过更改什么属性可以进行控制呢。谢谢。
      

  16.   

    这事等老鸟到微软后解决。哈哈
    直接用conn操作就没这些麻烦事了
      

  17.   

    Adodc3.Recordset.Update
    Adodc3.Recordset.Requery
      

  18.   

    请 Bill Gats 为你解决。
    ------------
    完全本末倒置,用多个连接才是导致问题的原因。
    既然直接操作 Recordset,就根本不需要使用 Adodc 控件。
      

  19.   


    实在不明白您的意思,能说的更详细一些吗?多个连接是指哪几个连接呀?再就是“既然直接操作 Recordset,就根本不需要使用 Adodc 控件。”  这个RECORDSET只是用来查询,以验证添加记录后的效果。
      

  20.   

    1. Adodc3有自己的连接,conn这是一个连接,这就是两个了2. 是指conn,adodc改用connection和recordset
      

  21.   

    要么用adodc使用延时,要么改用adodb
      

  22.   

    从上面可以看到,楼主是通过代码连接数据库,也就是Adodb。而Adodc是控件,两者是不能同时使用的。
      

  23.   

    一句话,按照写 sdjl 表的方式写 yhxx 表。