首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

批量更新的增加记录有关问题

2013-08-01 
批量更新的增加记录问题数据库中的记录是这样的ID SN Name1 x-1 a2 x-2 b要更新的表内容如下ID SN Name1 x

批量更新的增加记录问题
数据库中的记录是这样的

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以上的数据库的方法

热点排行