TmpPOSB = "Select * From 表1"  '接着到详细商品表中查寻
       TmpPOSB = TmpPOSB & " Where CPDI=  '" & TSTR & "' "
       BS.Open TmpPOSB, ConnString, , , adCmdText
                     
         If BS.EOF = False Then
                     
            While Not BS.EOF
                                  '查寻 表2,如没有直接插入,如有就累加
                  If TTest_tmp(BS!D1) = False Then
   
                                      
                      TmpAddSQL = "      INSERT INTO 表2 "
                      TmpAddSQL = TmpAddSQL & "( tVChar1 , "
                      TmpAddSQL = TmpAddSQL & "  tVChar2 , "
                      TmpAddSQL = TmpAddSQL & "  tVChar3 , "
                      TmpAddSQL = TmpAddSQL & "  tVChar4 , "
                      TmpAddSQL = TmpAddSQL & "  tVChar5   "
                      TmpAddSQL = TmpAddSQL & " ) VALUES ( "
                      TmpAddSQL = TmpAddSQL & " '" & BS!D1 & "' ,"        
                      TmpAddSQL = TmpAddSQL & " '" & BS!D2 & "' , "       
                      TmpAddSQL = TmpAddSQL & " '" & BS!D3 & "' , "       
                      TmpAddSQL = TmpAddSQL & " '" & BS!D4 & "' , "       
                      TmpAddSQL = TmpAddSQL & " '" & BS!D5 & "'  "       
                      TmpAddSQL = TmpAddSQL & " ) "
                      CN.Execute TmpAddSQL
                                       
                 Else
                                           ' 如果 已经添加过了 就累加数量
                      TmpQS = "Select * From 表2" '先查寻原来的数量 然后累加
                      TmpQS = TmpQS & " Where tVChar1=  '" & BS!D1 & "' "
                      QS.Open TmpQS, ConnString, adOpenDynamic, adLockBatchOptimistic
                      QS.Requery
                                        
                      TmpLong = 0
                      TmpLong = CSng(QS!tVChar3) + CSng(BS!D3)
                                                       
                      TmpUpSQL = "       UPDATE 表2 "
                      TmpUpSQL = TmpUpSQL & " SET "
                      TmpUpSQL = TmpUpSQL & " tVChar3 = '" & TmpLong & "' "
                      TmpUpSQL = TmpUpSQL & " WHERE tVChar1 = '" & BS!D1& "' "
                      CN.Execute TmpUpSQL             
                                        
                       DoEvents
                       QS.Close                End If
事件原因:简单说 就是 查寻一个表后把他的记录 添加到另一个表 如果另一个表还没有这条记录就新增这条记录,如果已经增加了那就 累加数量。问题1:在检测 表2 中是否新增这条记录的时候不能确切返回是否已经新增了!就是会重复增加同样的记录。问题2:在累加数量的时候也不能全部累加成功!比如全部记录数量加起来应该是100,他统计累加后的数量可能是80?问题3:我在跟踪的时候却能够成功 检测出时候新增过了 和 累加正确的数字了?希望各位哥哥姐姐给俺详细解答解答!小弟先谢谢您了!!!

解决方案 »

  1.   

    还是看看你查找表2的函数TTest_tmp吧,估计是数据集没刷新所致。
      

  2.   

    Function TTest_tmp(Tmpstr As String) As Boolean  '检测 表2 中 是否存在相同的数据。
    On Error GoTo 100
    Dim tmp As String    tmp = "Select * From 表2"
        tmp = tmp & " Where tVChar1=  '" & Tmpstr & "' " 
        KS.Open tmp, ConnString, , , adCmdText
        
      
            If KS.EOF = False Then
               TTest_tmp = True
            Else
               TTest_tmp = False
            End If
      
     
        KS.Close
        
    '*****************************************
    Exit Function
    100
    MsgBox err.Number & err.Description, vbCritical + vbOKOnly, "Error"
    If KS.State = 1 Then KS.Close
    End Function'检测过程是如上面写的过程。帮忙看看,谢谢了。
      

  3.   

    建议在所有判断RS.EOF的地方改为(RS.EOF or RS.BOF)
    另外该函数开头加一个:if ks.state=adstateopen then ks.close改了之后试试看
      

  4.   

    我在模块中这样声明的:
    Option Explicit
    Public CN As New ADODB.Connection, RS As New ADODB.Recordset, KS As New ADODB.Recordset, BS As New ADODB.Recordset, QS As New ADODB.Recordset
    Public SQL As String
    Public ConnString As String   '数据库连接字符 这个动态生成的。
    我上面贴的写入 表2 的全过程把RS \ BS \ KS \ QS 全用上了!都分别处理在不同的过程了。牵涉了 3个表的查寻循环读写以及判断过程,是不是循环写入后还没来得及更新的缘故阿?我跟踪过程操作到最后,发现结果是正确的!如果VB直接工作就出问题了!
      

  5.   

    你可以试试SQL,
       比如:select * from 表2 
          if tmp.recordset.recount=0 then
                 insert ....................
         else
                 update ......................
          endif
      

  6.   

    CN.Execute TmpAddSQL,effectedrow
    CN.Execute TmpUpSQL   effectedrow
    effectedrow是影响的行数,可以看看是否添加或者刷新了如果按照你所说的分步走就成功连续就不成功的话,尝试在添加和修改后小睡一下sleep(500)尝试用recordset=0来取代eof'查寻 表2,如没有直接插入,如有就累加
    If TTest_tmp(BS!D1) = False Then  '这个测试条件,你确定对?还有,你确定你及时关闭ttest_tmp了?我想这应该是个recordset吧这些都是我觉得有可能出问题的地方,重新看看。希望有帮助
      

  7.   

    问题自己解决了,如果有朋友碰到希望有帮助! 上面的几位的方法都测试了还是不行,我可以确定每个连接都正常关闭了, 我的方法,比较笨:) 在 TTest_tmp过程中,加入了一个 UPDATE 语句 更新一个没有必要更新的表(此时CN 处于循环连接状态,这里不能关闭) 这样更新一个其他表后 就正常了,楼上的一个朋友提示用sleep , 这样等待太慢了,而且等待少了还不行,我测试800都不行! 最终放弃了,就是在检测的过程中加入个没有实际意义的更新语句就可以了.明天结算!