有两个表New,Savings
定义维数为10000的数组ss
要查找Savings中Name等于ss中的字符
若存在则修改
否则在New中添加
如下:
Dim ss(10000)
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & App.Path & "\data.mdb;Persist Security Info=False"
rec1.Open "select * from New", conn, 1, 2
For i = 1 To UBound(ss)
Rec.Open "select * from Savings where Name='" & ss(i) & "'", conn, 1, 2
If Rec.RecordCount > 0 Then
Rec!Type= "faib"
.....
.....
Rec.Update
Else
rec1.AddNew
rec1!Name= "faib"
.....
.....
rec1.Update
End If
Rec.Close
Next i
运行时速度很慢,有谁能帮我优化一下?
定义维数为10000的数组ss
要查找Savings中Name等于ss中的字符
若存在则修改
否则在New中添加
如下:
Dim ss(10000)
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & App.Path & "\data.mdb;Persist Security Info=False"
rec1.Open "select * from New", conn, 1, 2
For i = 1 To UBound(ss)
Rec.Open "select * from Savings where Name='" & ss(i) & "'", conn, 1, 2
If Rec.RecordCount > 0 Then
Rec!Type= "faib"
.....
.....
Rec.Update
Else
rec1.AddNew
rec1!Name= "faib"
.....
.....
rec1.Update
End If
Rec.Close
Next i
运行时速度很慢,有谁能帮我优化一下?
解决方案 »
- 给大家分享几个源码,欢迎大家下载,交流学习!!
- VB更改Excel自定义纸张大小怎么操作呢?
- 向所有API高人求教:为什么我能够捕捉到VB6"本地"窗体的句柄,但是却取不到其中那个树状控件的句柄?原因何在?
- 计算机与电子秤串口通信问题!急!帮看看程序!如何取得一个重量!
- 很着急,在线等。高手请进来赐教啦!
- 怎么把MSFFlexGrid控件中的内容全部打印出来,我现在只能打印一页
- 关于《VB神童教程》
- 我知道用友的数据库结构,我也有用友的控件说明.谁拿好东西和我交换?
- 请问 pro*c 中的查询的结果怎么返回给VB
- 在vb下使用过AnimateWindow这条API函数的人请进
- 巴顿呢?怀念巴顿~!!
- 怎么逐行改变msflexgrid的颜色?
dim tempSQL as string
tempSQL="select * from Savings where "
For i = 1 To UBound(ss)
tempSQL = tempSQL + " Name='" & ss(i) & "' or "
next i
tempSQL =left(tempSQL,len(tempSQL)-4)
Rec.Open tempSQL ,conn, 1, 2
conn.execute("update Savings set type=new.type ... from savings,new where savings.name=new.name")
添加
conn.execute("select * into Savings from new where new.name not in (select name from savings")
因为我还要对ss进行判断
比如是否为空....
这样,然后你在结果集中查找,UPDATE,然后没有的再添加.
这样在SQL运行次数减少一些.
或者使用存储过程.我遇到这种问题就是使用存储过程+事务.
我先将一个文件数据加载到一个表格中,示意图:
------------------------
|1 |2 |3 |4 |5 |...
------------------------
|asdf|tqer|5q3 |hadf|7345|...
------------------------
|asdf|tqer|5q3 |hadf|7345|...
..........................
------------------------
TxtNumber为文本框,用于输入各字段对应的表格表序号rec1.Open "select * from New", conn, 1, 2
For i = 1 To Mfgtmp.Rows - 1
Rec.Open "select * from Savings where 帐号='" & Mfgtmp.TextMatrix(i, CInt(Txtnumber(1)) - 1) & "'", conn, 1, 2
If Rec.RecordCount > 0 Then
If CInt(Txtnumber(4)) <> 0 Then
Rec.Fields(ss & "余额") = CCur(Mfgtmp.TextMatrix(i, CInt(Txtnumber(4)) - 1))
End If
If CInt(Txtnumber(5)) <> 0 Then
Rec.Fields(ss & "积数") = CCur(Mfgtmp.TextMatrix(i, CInt(Txtnumber(5)) - 1))
End If
Rec.Update
Else
have = True
rec1.AddNew
'帐号
If CInt(Txtnumber(1)) <> 0 Then
rec1!帐号 = Mfgtmp.TextMatrix(i, CInt(Txtnumber(1)) - 1)
End If
'机构名称
If CInt(Txtnumber(0)) <> 0 Then
For j = 0 To UBound(Org1)
If Mfgtmp.TextMatrix(i, CInt(Txtnumber(0)) - 1) = Org1(j).Num Then
rec1!机构名称 = Org1(j).Nam
Exit For
Else
rec1!机构名称 = Mfgtmp.TextMatrix(i, CInt(Txtnumber(0)) - 1)
End If
Next j
End If
'客户名称
If CInt(Txtnumber(3)) <> 0 Then
rec1!客户名称 = Mfgtmp.TextMatrix(i, CInt(Txtnumber(3)) - 1)
End If
'行业
If CInt(Txtnumber(6)) <> 0 Then
For j = 0 To UBound(Pro1)
If Mfgtmp.TextMatrix(i, CInt(Txtnumber(6)) - 1) = Pro1(j).Num Then
rec1!行业 = Pro1(j).Nam
Exit For
Else
rec1!行业 = Mfgtmp.TextMatrix(i, CInt(Txtnumber(6)) - 1)
End If
Next j
End If
'科目代码
If CInt(Txtnumber(2)) <> 0 Then
rec1!科目代码 = Mfgtmp.TextMatrix(i, CInt(Txtnumber(2)) - 1)
End If
'组别
If CInt(Txtnumber(10)) <> 0 Then
For j = 0 To UBound(Gro1)
If Mfgtmp.TextMatrix(i, CInt(Txtnumber(10)) - 1) = Gro1(j).Num Then
rec1!组别 = Gro1(j).Nam
Exit For
Else
rec1!组别 = Mfgtmp.TextMatrix(i, CInt(Txtnumber(10)) - 1)
End If
Next j
End If
If CInt(Txtnumber(4)) <> 0 Then
rec1!余额 = CCur(Mfgtmp.TextMatrix(i, CInt(Txtnumber(4)) - 1))
End If
If CInt(Txtnumber(5)) <> 0 Then
rec1!积数 = CLng(Mfgtmp.TextMatrix(i, CInt(Txtnumber(5)) - 1))
End If
If CInt(Txtnumber(9)) <> 0 Then
rec1!日均存款 = CCur(Mfgtmp.TextMatrix(i, CInt(Txtnumber(9)) - 1))
End If
If CInt(Txtnumber(11)) <> 0 Then
rec1!大客户名称 = Mfgtmp.TextMatrix(i, CInt(Txtnumber(11)) - 1)
End If
If CInt(Txtnumber(7)) <> 0 Then
rec1!开户日期 = Mfgtmp.TextMatrix(i, CInt(Txtnumber(7)) - 1)
End If
If CInt(Txtnumber(8)) <> 0 Then
rec1!销户日期 = Mfgtmp.TextMatrix(i, CInt(Txtnumber(8)) - 1)
End If
rec1.Update
End If
Rec.Close
Next i
可是到最后
还是要将临时表中的数据与Savings中的进行比较呀
比如SS中的内容存在表A中的字段SS里。
conn.execute("update savings inner join A on savings.name=A.ss set type='faib'")
conn.execute("insert into [new] (name) select A.ss from A left join savings on A.ss=savings.name where savings.name is null")
你的程序一试没法完全读懂,还是把表结构、任务需求贴上来,让大家讨论讨论吧!
conn.Execute conns, 0, 1提示结尾处无分号(;)?