Query1,DataSource1
DBGrid连接DataSource1
Query1设置缓存模式CachedUpdate:=True;
想要实现功能:
当我想在数据库中增加一个记录,Query1.insert;.....。
在我ApplyUpdates前先检查同样的记录在数据库中是否存在?如果存在那么先删除原来的。问题是:
当我用insert设置好字段后,DBGrid上显示相应的数据
保存时如果发现数据库中有重复记录,那么删除这个记录,但是这时,DBGrid中的数据也将清空。无法保存insert在缓冲中的数据了。不知道我的描述大家能明白不?
DBGrid连接DataSource1
Query1设置缓存模式CachedUpdate:=True;
想要实现功能:
当我想在数据库中增加一个记录,Query1.insert;.....。
在我ApplyUpdates前先检查同样的记录在数据库中是否存在?如果存在那么先删除原来的。问题是:
当我用insert设置好字段后,DBGrid上显示相应的数据
保存时如果发现数据库中有重复记录,那么删除这个记录,但是这时,DBGrid中的数据也将清空。无法保存insert在缓冲中的数据了。不知道我的描述大家能明白不?
本人是习惯通过sql来实现修改
fields.fields[1].asstring:='a';
//判断同样的记录是不是在数据库中存在,如果存在则删除ApplyUpdates;//这时前面insert的数据也将失效!
比如:
我数据库中有一个姓名叫张三的记录;那么我的程序可以从外部的配置文件中导入一个记录,导入的数据我就通过insert显示在DBGrid上给客户看,那么这时用户想保存这个记录。然后就发生我上面描述的。
所以对于华仔和卡庙说的,我觉得我这里不可能在insert前就对重复数据处理了!
Insert into MeterTb(userId, scanTime, scanCode, meterNo, orderId, boxNo)
select userId, scanTime, scanCode, meterNo, orderId, boxNo from TmpMeterTb
where not Exists
(select 1 from MeterTb
where MeterTb.MeterNo = TmpMeterTb.MeterNo
and MeterTb.OrderId = @OrderId)
and OrderId = @OrderId and isExported <> 1
这个我也处理过.如果只是 DataSet上的,视数据量的大小,做个遍历,来查是可以的.