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:我在跟踪的时候却能够成功 检测出时候新增过了 和 累加正确的数字了?希望各位哥哥姐姐给俺详细解答解答!小弟先谢谢您了!!!
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:我在跟踪的时候却能够成功 检测出时候新增过了 和 累加正确的数字了?希望各位哥哥姐姐给俺详细解答解答!小弟先谢谢您了!!!
解决方案 »
- vb6.0调用CrystalReport7报表,提示cannot open SQL Server
- 随机抽取在access 怎么实现, SQL可以用newid()
- 如何指定VsFlexGrid某一个单元格的forecolor,救我!!!
- 问个比较困难的问题:有没有办法用vb导出报表中的内容成pdf文件?
- 如何在运行时调整控件的大小和位置
- 我使用winsock控件取网页内容,可是它总自己在内容中加入一些东西,如下面
- 高分求助!-个关于错误处理的问题(高分哦)
- 请问哪里有vb6.0中文版下载?
- 十万火急!!!在线等待!!!老板等着要呢!!!
- 大家进来说说,这---行吗?
- 有人帮看看是怎么回事,好吗?
- Vb线程类的声明?
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'检测过程是如上面写的过程。帮忙看看,谢谢了。
另外该函数开头加一个:if ks.state=adstateopen then ks.close改了之后试试看
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直接工作就出问题了!
比如:select * from 表2
if tmp.recordset.recount=0 then
insert ....................
else
update ......................
endif
CN.Execute TmpUpSQL effectedrow
effectedrow是影响的行数,可以看看是否添加或者刷新了如果按照你所说的分步走就成功连续就不成功的话,尝试在添加和修改后小睡一下sleep(500)尝试用recordset=0来取代eof'查寻 表2,如没有直接插入,如有就累加
If TTest_tmp(BS!D1) = False Then '这个测试条件,你确定对?还有,你确定你及时关闭ttest_tmp了?我想这应该是个recordset吧这些都是我觉得有可能出问题的地方,重新看看。希望有帮助