自认为较难的问题,看看多少时间可以解决,大家帮忙

gogogo 2006-10-09 11:20:28
Delphi中使用TDataSetProvider和TClientDataSet协同工作,使用了一个内存中的表TClientDataSet可以非常好的实现前台的工作,中间零散的操作都可以保存在内存表中,等到工作基本结束,使用一个保存命令(界面上给用户的)通过事务一次性将所有的修改保存进远程的数据库,这样大大减少联系数据库的次数,提高了系统的效率,本人一直是这么做的,感觉非常好。
但是最近发现了一个比较的问题,那就是自增字段的存在,当为一个包含自增字段的表添加了数据,内存表中将不会对自增字段添加值,至少不会与将来保存到远程数据库以后的由数据库产生的值一致,难道这种表增加了新的数据就必须立刻保存到远程数据库吗?不保存就不能获得这个自增字段的ID了?立刻保存很大程度上破坏了上边说的使用TDataSetProvider和TClientDataSet协同工作带来的好处。
大家来帮忙啊,只要是合理的解决方法,或者告诉我没有办法必须保存,只要有个结论,我都将高分送上。
...全文
314 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
do2008 2006-10-10
  • 打赏
  • 举报
回复
或许可以从别思路出发考虑一下

1.是否非要自增字段呀,可以用别的字段代替吗?

2.消除产生“不一致”带来的影响
do2008 2006-10-10
  • 打赏
  • 举报
回复
自增字段,确实是不保存是没有值的。

>>内存表中将不会对自增字段添加值,至少不会与将来保存到远程数据库以后的由数据库产生的值一致

楼主说,这一个不一致~~~

我想,如果这个自增值字段若是在别的表中用到,比如说是别的表的外键,那出现这个不一致的情况,绝对是不允许的。除了保存,还真没有别的更好的办法
xjjrocker 2006-10-10
  • 打赏
  • 举报
回复
我就经常用Guid来解决ID主键问题,无须担心。顺便给你段代码,可以直接产生string类型的.

function TMyApp.GetGuidKey: string;
var
MyGUID: TGUID;
begin
CreateGUID(MYGUID); //生成GUID
Result := GUIDToString(MYGUID); //转换成String
while Pos('-', Result) > 0 do
begin
Delete(Result, Pos('-', Result), 1); //去除'-'括号
end;
while Pos('{', Result) > 0 do
begin
Delete(Result, Pos('{', Result), 1); //去除左括号
end;
while Pos('}', Result) > 0 do
begin
Delete(Result, Pos('}', Result), 1); //去除右括号
end;
end;
xjjrocker 2006-10-10
  • 打赏
  • 举报
回复
如果真的必须保存,真的是很郁闷的事情,如果按楼上说的,不使用自增字段,那我想问一下,如何产生保证唯一的一个ID。
-------------------------------------->
使用CreateGUID(MYGUID); //生成GUID,这个绝对唯一
gogogo 2006-10-10
  • 打赏
  • 举报
回复
好了,结贴了,谢谢大家的支持
gogogo 2006-10-10
  • 打赏
  • 举报
回复
我想断电或者断网问题没有什么好说的,不保存是用户的事,Word文档丢失大家都还是习惯的,最多和 Word一样来个定时保存好了,但是这种事务与多次修改一次性提交的机制还是非常好的,要比每次都和远程数据库交流好多了。
Ayx_hys 2006-10-10
  • 打赏
  • 举报
回复
自己可设计可自增的
dabaicai 2006-10-10
  • 打赏
  • 举报
回复
使用clientdataset的好处是明显的

不过对于自增ID这样的情况,clientdataset不保存也确实处理不了,以前见过别人用guid来解决,不过自己没试过
yukileo 2006-10-10
  • 打赏
  • 举报
回复
问下..断电怎么办...在修改的时候断电...之前的修改没有提交..那...你不怕?
netfly 2006-10-10
  • 打赏
  • 举报
回复
guid
gogogo 2006-10-10
  • 打赏
  • 举报
回复
如果真的必须保存,真的是很郁闷的事情,如果按楼上说的,不使用自增字段,那我想问一下,如何产生保证唯一的一个ID。

2,497

社区成员

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

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