批量更新的增加记录问题
数据库中的记录是这样的
ID SN Name
1 x-1 a
2 x-2 b
要更新的表内容如下
ID SN Name
1 x-1 abc
2 x-2 b
3 x-3 c
希望得更新后数据库中的记录为
ID SN Name
1 x-1 abc
2 x-2 b
3 x-3 c
也就是以ID为准,如果已经本条记录则更新以更新表的字段内容为准更新至数据库中.
如果不存在的ID,则在数据库中增加一条这样的记录.
两个表字段,数量,类型完全相同.ID是唯一值.
[解决办法]
分两步执行如下代码。
update 数据库中的记录 a inner join 要更新的表 b on a.id=b.id set a.Name=b.Name;
insert into 数据库中的记录 select * from 要更新的表 where id not in (select id from 数据库中的记录);
[解决办法]
在C++中用ADO连接MDB会吧?
直接运行SQL语句即可
VBA示例
Dim cnSJK As ADODB.Connection
Dim ConStrSJK As String
Set cnSJK = New ADODB.Connection
cnSJK.Open "Provider=Microsoft.Jet.OLEDB.4.0 ;Data Source=aa.mdb"
cnSJK.Execute "sql语句"
[解决办法]
实现是可以的,方法很多,只提供思路!代码不保证一个字母不差。
例子一、
在放一个query,查询数据库
query->sql = select * from t;
然后遍历TADODataSet进行处理
C/C++ codewhile(!ADODataSet->eof)
{
if( query->Locate("sn",ADODataSet->FieldByName("sn")->Value) )
{
//数据库有记录
}
else
{
//数据库无记录
query->Append();
query->FieldByName("..")->Value = ...;
query->Post();
}
ADODataSet->Next();
}
[解决办法]
MERGE INTO table1 a
USING (SELECT id,sn,name FROM table2) b
ON (a.id = b.id
AND a.sn = b.sn)
WHEN MATCHED THEN
UPDATE
SET a.name = b.name
WHEN NOT MATCHED THEN
INSERT (a.id, a.sn, a.name)
VALUES (b.id, b.sn, b.name);
楼主要说明是什么数据库,我给出的方法是在Oracle 9i以上的数据库的方法