问个数据库问题

tjj5203 2009-10-21 05:09:15
Query1,DataSource1
DBGrid连接DataSource1
Query1设置缓存模式CachedUpdate:=True;
想要实现功能:
当我想在数据库中增加一个记录,Query1.insert;.....。
在我ApplyUpdates前先检查同样的记录在数据库中是否存在?如果存在那么先删除原来的。

问题是:
当我用insert设置好字段后,DBGrid上显示相应的数据
保存时如果发现数据库中有重复记录,那么删除这个记录,但是这时,DBGrid中的数据也将清空。无法保存insert在缓冲中的数据了。

不知道我的描述大家能明白不?
...全文
95 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tjj5203 2009-10-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 starluck 的回复:]
引用 5 楼 tjj5203 的回复:
谢谢华仔和卡庙的方法,但是这个还不是我需要的
比如:
我数据库中有一个姓名叫张三的记录;那么我的程序可以从外部的配置文件中导入一个记录,导入的数据我就通过insert显示在DBGrid上给客户看,那么这时用户想保存这个记录。。。。。。。然后就发生我上面描述的。
所以对于华仔和卡庙说的,我觉得我这里不可能在insert前就对重复数据处理了!


这个我也处理过.如果只是 DataSet上的,视数据量的大小,做个遍历,来查是可以的.
[/Quote]
华仔能再描述下吗?按我的意思就是在我insert前一般是不删除库里的数据,否则万一用户不保存那原来的数据就丢失了
starluck 2009-10-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 tjj5203 的回复:]
谢谢华仔和卡庙的方法,但是这个还不是我需要的
比如:
我数据库中有一个姓名叫张三的记录;那么我的程序可以从外部的配置文件中导入一个记录,导入的数据我就通过insert显示在DBGrid上给客户看,那么这时用户想保存这个记录。。。。。。。然后就发生我上面描述的。
所以对于华仔和卡庙说的,我觉得我这里不可能在insert前就对重复数据处理了!
[/Quote]

这个我也处理过.如果只是 DataSet上的,视数据量的大小,做个遍历,来查是可以的.
kampan 2009-10-21
  • 打赏
  • 举报
回复
要下班了我没太仔细看,如果可以,我觉得你可以用了一个临时表中转,将导入的数据先填到临时表,回头在写入实际表,之前写的存储过程一段代码,你参考参考,看看有没有帮助:

--将临时表的数据插入到实表中
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

tjj5203 2009-10-21
  • 打赏
  • 举报
回复
谢谢华仔和卡庙的方法,但是这个还不是我需要的
比如:
我数据库中有一个姓名叫张三的记录;那么我的程序可以从外部的配置文件中导入一个记录,导入的数据我就通过insert显示在DBGrid上给客户看,那么这时用户想保存这个记录。。。。。。。然后就发生我上面描述的。
所以对于华仔和卡庙说的,我觉得我这里不可能在insert前就对重复数据处理了!
kampan 2009-10-21
  • 打赏
  • 举报
回复
直接用Sql语句控制更灵活些 Insert时 可以用类似not Exists等过滤重复记录
tjj5203 2009-10-21
  • 打赏
  • 举报
回复
Query1.insert;
fields.fields[1].asstring:='a';
//判断同样的记录是不是在数据库中存在,如果存在则删除

ApplyUpdates;//这时前面insert的数据也将失效!
starluck 2009-10-21
  • 打赏
  • 举报
回复
判断不要等到 ApplyUpdates的时候,在 BeforePost 的时候就处理.  

在缓存下视业务的不同,判断也会有一些差异. 可以只判断当前数据集,也可以还要加上判断 表中数据.



2. 第二种情况一定要先处理掉重复记录.
haitao 2009-10-21
  • 打赏
  • 举报
回复
有点晕
本人是习惯通过sql来实现修改

2,495

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧