请教一个VB问题.俺是小虾,迩是大虾!
本地为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约束,不能插入重复的问题)
[解决办法]
本地为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
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
[解决办法]
不能用rs.move i
[解决办法]
表HistTable22和表f1设否设置主键不同?
[解决办法]
For j = 0 To 3 Step 1
rssql.Fields(j) = rs.Fields(j)
Next j
这样一条条影响速度,考虑SQL吧
[解决办法]
主键冲突与程序的有什么关系?
关键看你的数据逻辑。
1)首先,来源的数据必须保证主键唯一。
2.a)如果可能,先删除目标表的数据,再导入。
2.b)否则先导入到一个临时表中,然后从临时表导到目标表只要简单的 SQL 就能实现。
[解决办法]
ACCESS里的表HistTable22定义主键了么?
[解决办法]
作为主键的字段,它的数值是不能重复的,如果重复就会报主键冲突。
比如,如果你在服务器端的表里已经有一条记录的时间是 :#2010-01-22 16:28#,那么你如果再从HistTable22里拷贝一条具有相同SampleTime值的记录,就会报错。
[解决办法]
楼主是在向服务器表追加记录,要保证主键不唯一,需要指定选出的字段,不能简单的select * from ……
两个查询语句要对应
[解决办法]
本地为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
[解决办法]
还是看看你自己的sqlserver构架吧,主键列中插入的值有重复的,才会报这个错误。
[解决办法]