Table控件的记录保存问题

snakezou 2000-03-09 09:35:00
小弟近日发现一问题,请各位大虾指教
在数据库编程中,我用的是DBNavigator控件浏览数据,表格连接用的Table,在记录Post后,若程序不正常中止,则本次所做的修改全部没有保存,而Table的高速缓存并未打开,请问该如何才能使程序非正常中止下的数据也能保存呢。不知是否可以让Table每次post后都能直接将本条记录写到硬盘上呢?
...全文
261 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
mr_ghd 2000-03-12
  • 打赏
  • 举报
回复
每次使用table.active:=false;
table.active:=true;
snakezou 2000-03-12
  • 打赏
  • 举报
回复
Brain兄的函数提供的很好,我是在Table的AfterPost之后调用的,效果挺理想。Aho兄的我没有试过,不知道是否可行。在这里我对所有回复的大虾们真诚的说一声“谢谢”。
Rich_Zhou 2000-03-11
  • 打赏
  • 举报
回复
经我观察 系统在打开一个表时 实际上是另建立了一个临时缓冲表 只有当关闭该表时才真正写入到你所期望的表中
所以我发现别我他法 只有TTable.close
不过建议项保存状态以及断开和数据控件之间的连接 否则会发生意想不到的结果
我做了一个过程供你参考
procedure SaveTable(vTable:TTable);
var
Filtered:boolean;
sFilter:String;
Bookmark:TBookMark;
begin
Filtered:=vTable.Filtered;
sFilter:=vTable.Filter;
BookMark:=VTable.GetBookMark;
vTable.DisableControls;
vTable.Active:=False;
vTable.Active:=True;
vTable.Filter:=sFilter;
vTable.Filtered:=Filtered;
vTable.GotoBookMark(BookMark);
vTable.FreeBookMark(BookMark);
end;
holoboy 2000-03-11
  • 打赏
  • 举报
回复
设置一些变量检查数据库的纪录是否经过修改,将修改的信息用batchmove控件,保存。
至于断电我想还是用aho的方法。
Aho 2000-03-11
  • 打赏
  • 举报
回复
这个问题我研究过(血的教训呀),解决的方法就是在每次
重要的修改完成后调用dbisavechange(具体的情况查BDE的帮助)

BTW:在修改完成后调用一下POST其实开销不大。关键是这样还是
不能对付诸如掉电的问题。想彻底解决这个问题只能用DBISAVECHANGE
代价是系统运行的效率。
jll 2000-03-11
  • 打赏
  • 举报
回复
做得更绝一点,自己写数据库的操作日志吧。不过别问我,我可没经验。
Brain 2000-03-11
  • 打赏
  • 举报
回复
请在Form上放个Timer构件,将其Interval设为1,在其timer1timer中加上
table1.flushbufers;即可解决问题!
torent 2000-03-10
  • 打赏
  • 举报
回复
关注
zhouyj 2000-03-10
  • 打赏
  • 举报
回复
Table每次post后都把Table.close就可以了;
另外您的程序有问题(程序没有做异常处理)。
guofupei 2000-03-10
  • 打赏
  • 举报
回复
local table?
or server table?
i never found this mistake?
Lin 2000-03-10
  • 打赏
  • 举报
回复
To snakezou:
你说的是正确的,Post操作失败,则本次修改的任意字段都不可能保存。我觉得这样才会保持数据库的完整性。实际上当你用DBNavigator浏览数据的话,每移动记录就隐含调用Post(如果记录改变了的话)。
  如果非要让每字段的修改都保存到数据库中去的话,建议你每修改一字段就Post一次。不过,这样太麻烦而且效率太低,是不是?
snakezou 2000-03-10
  • 打赏
  • 举报
回复
to lybt: 我生成可执行文件后还是老样子。

to ZhouYJ: 我现在不想在每条记录post后都关闭一次数据库(这样做也太夸张了点吧。)另外能对直接断电的情况做异常处理吗?而且普通情况下数据输入的错误Delphi都会自行捕获的, 只不过显示用的英文。
lybt 2000-03-09
  • 打赏
  • 举报
回复
调试中就这样,发行后就好了。

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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