有两张表:
表A:
字段“编号”的记录:1 2 3 4 5 ;
字段“姓名”的记录:张三 李四 王五 胡六 孙七;
表A中的编号和姓名是一一对应的。
表B:
字段“编号”的记录:1 2 3 4 5 ;
字段“姓名”的记录集为空。
请问如何使用ADO1控件来更新表B中姓名字段的内容,即表B中编号2对应表A中的姓名李四。
注:功能我已实现,但是两张表的记录数都为1000,表B内容更新速度过于缓慢。
dim bid(1000)
dim aname(1000)
dim i as integer
i=0
ado1.RecordSource = "select * from B"
ado1.Refresh
While Not ado1.Recordset.EOF()
bid(i)=ado1.Recordset.Fields("编号")
i++
ado1.Recordset.MoveNext
Wend
ado1.Recordset.Close
For i= 0 To UBound(bid) - 1
ado1.RecordSource = "select * from A where 编号 = " + """" + bid(i) + """"
ado1.Refresh
If ado1.Recordset.EOF = False Then
aname(i) = ado1.Recordset.Fields("姓名")
Else
aname(i) = "姓名不详"
End If
Next
ado1.Recordset.Close
ado1.RecordSource = "select * from B"
ado1.Refresh
While Not ado1.Recordset.EOF()
ado1.Recordset.Delete
ado1.Recordset.MoveNext
Wend
ado1.Recordset.Close
ado1.RecordSource = "select * from B"
ado1.Refresh
For i= 0 To UBound(bid) - 1
ado1.Recordset.AddNew
ado1.Recordset.Fields("姓名") = aname(i)
ado1.Recordset.Fields("编号") = bid(i)
ado1.Recordset.Update
Next
ado1.Recordset.Close
这个方法对于两张表中记录数相同的情况下适用。如果表B的记录数为5个,表A的记录为10个,表B的姓名记录应该更新5条,但是这样的话,表B会直接把表A的10条姓名记录全部复制过来。
我出去有点儿事情,回头代码发出来。
追答呵呵!
我的代码,你试一下,能否满足你的要求。
用到2个ADODC控件,adodc1连接A表(编号,姓名都有数据),adodc2连接B表(只有编号数据,姓名数据为空)。
Adodc1.Refresh
Adodc1.Recordset.MoveFirst
Do While Not Adodc1.Recordset.EOF
Adodc2.Refresh
Adodc2.Recordset.Find "编号='" & Adodc1.Recordset.Fields("编号") & "'"
If Not (Adodc2.Recordset.EOF And Adodc2.Recordset.BOF) Then
Adodc2.Recordset.Fields("姓名") = Adodc1.Recordset.Fields("姓名")
Adodc2.Recordset.Update
End If
Adodc1.Recordset.MoveNext
Loop
这就是我想要的代码,谢谢。
考虑到第二个表跟第一个表的记录数不一致,我额外新加了一段:
Adodc1.Refresh
Adodc1.Recordset.MoveFirst
Do While Not Adodc1.Recordset.EOF
Adodc2.Refresh
Adodc2.Recordset.Find "编号='" & Adodc1.Recordset.Fields("编号") & "'"
If Adodc2.Recordset.EOF Then
MsgBox ("数据更新完毕。")
Exit Do
End If
如果A表与B表记录数不一致,这样改就更有问题了!
假设A表有编号:
999
1
2
3
B表有编号:
1
2
你这样一来,结果编号1和2并没有把姓名添加过去?因为地1个编号999就没找到,就结束了!!!!!!
复制表的时间是1分钟,这个程序用来天天都要更新数据,那么一年会要花费365分钟的时间去复制表。
VB6.0 如何使用ADO控件进行多表级联更新(最佳答案者追加20分)
1:工程-引用-microsoft ActiveX data objects 2.X 代码 Dim conn As New ADODB.Connection conn.Open Connstring conn.Execute "update A set A.姓名=isnull(B.姓名,'无此姓名') from 表二 A left join 表一 B on A.编号=B.编号"conn.Close 完成 其中Connstring设置为你ADODB控件的连接字...
请问Parameter对象的具体含义和作用是怎么样的?
·将数据字段的数值传递给数据绑定控件,可以在这些控件中显示或更改这些数值。 ·添加新的记录,或根据更改显示在绑定的控件中的数据来更新一个数据库。 2、数据库的连接 数据库的连接可通过ADO控件实现,为此,必须在工程部件中选择Microsoft ADO Data Control 6.0 (OLEDB),然后在窗体中添加ADO控件。利用ADO连接数据库...