本地为ACCESS表,服务器为SQL表。
'打开本地数据库
Set rs = New ADODB.Recordset
sql = "select * from HistTable22"
rs.Open sql, cn, adOpenStatic, adLockOptimistic
rs.MoveFirst
'打开服务器数据库
Set rssql = New ADODB.Recordset
str = "SELECT * FROM f1"
rssql.Open str, cnnsql, adOpenDynamic, adLockOptimistic
For i = 1 To rs.RecordCount Step 1
rssql.AddNew
For j = 0 To 3 Step 1
rssql.Fields(j) = rs.Fields(j)
Next j
rssql.Update rs.Move i
Next i请大虾们对照上面程序,假设rs记录集有100条记录,俺问的是:用rs.move i 或rs.movenext为什么不能让rs记录自己往下移,逐条传到服务器表中呢?(目前故障现象:在传送了第一条记录后,传送第二条记录运行到rssql.update时出现违反了Primary Key约束,不能插入重复的问题)
'打开本地数据库
Set rs = New ADODB.Recordset
sql = "select * from HistTable22"
rs.Open sql, cn, adOpenStatic, adLockOptimistic
rs.MoveFirst
'打开服务器数据库
Set rssql = New ADODB.Recordset
str = "SELECT * FROM f1"
rssql.Open str, cnnsql, adOpenDynamic, adLockOptimistic
For i = 1 To rs.RecordCount Step 1
rssql.AddNew
For j = 0 To 3 Step 1
rssql.Fields(j) = rs.Fields(j)
Next j
rssql.Update rs.Move i
Next i请大虾们对照上面程序,假设rs记录集有100条记录,俺问的是:用rs.move i 或rs.movenext为什么不能让rs记录自己往下移,逐条传到服务器表中呢?(目前故障现象:在传送了第一条记录后,传送第二条记录运行到rssql.update时出现违反了Primary Key约束,不能插入重复的问题)
'打开本地数据库
Set rs = New ADODB.Recordset
sql = "select * from HistTable22"
rs.Open sql, cn, adOpenStatic, adLockOptimistic
rs.MoveFirst
'打开服务器数据库
Set rssql = New ADODB.Recordset
str = "SELECT * FROM f1"
rssql.Open str, cnnsql, adOpenDynamic, adLockOptimistic
while not rs.eof
rssql.AddNew
For j = 0 To 3 Step 1
rssql.Fields(j) = rs.Fields(j)
Next j
rssql.Update rs.Movenext
wend
rssql.Fields(j) = rs.Fields(j)
Next j
这样一条条影响速度,考虑SQL吧
关键看你的数据逻辑。
1)首先,来源的数据必须保证主键唯一。
2.a)如果可能,先删除目标表的数据,再导入。
2.b)否则先导入到一个临时表中,然后从临时表导到目标表只要简单的 SQL 就能实现。
两个查询语句要对应
必须
每次先rs.movefirst 再rs.move i
这样很不方便
问题的本质是slowgrace在8楼所说。你在写入sql数据库之前,
先要判断一下当前的记录在sql中是否存在,如果存在,则不插入(略过,或进行数据更新)。以下代码应该可以实现你的数据非重复完全插入,但是未考虑效率,请自行优化。本地为ACCESS表,服务器为SQL表。
'打开本地数据库
Set rs = New ADODB.Recordset
sql = "select * from HistTable22"
rs.Open sql, cn, adOpenStatic, adLockOptimistic
rs.MoveFirst
'打开服务器数据库
Set rssql = New ADODB.Recordset
while not rs.eof
str = "SELECT * FROM f1 Where 主键字段=" & rs("对应字段")
rssql.Open str, cnnsql, adOpenDynamic, adLockOptimistic
If rssql.Eof Then
rssql.AddNew
For j = 0 To 3 Step 1
rssql.Fields(j) = rs.Fields(j)
Next j
rssql.Update
End If
rssql.Close
rs.Movenext
wend