请帮忙看看这个数据库问题(50分)

  • 主题发起人 主题发起人 雁孤行
  • 开始时间 开始时间

雁孤行

Unregistered / Unconfirmed
GUEST, unregistred user!
Delphi编的数据库程序,已经post了,但如
果在程序运行中注销我的电脑,或者直接重
启,新写入的数据就会丢失,但将程序关闭
后就不会出现这样的问题,这是不是Delphi
的Bug?

请帮忙看看源程序。<a href="http://zyfang.top263.net/delphi.zip">下载</a> </p>
 
在Form1的OnCloseQuery事件中加入:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
Table1.close;
end;
已经过多次测试,没问题。
 
你所说的只能解决程序运行中注销丢数据的主问题,但按Reset或
突然断电还是会丢失数据,我要的是在Table1.post之后就把新输
入的数据写入到数据库中。
 
就联sql server断电都可能丢失部分修改内容的(rollback)
如果真的要减少损失:
procedure Form1.TblAfterPost...
var
bm:TBookMark;
begin
with tbl do
begin
bm := GetBookMark;
Close;
Open;
SetBookMark(bm);
end;
bm.free;
end;
//bookmark方法实用方法错误的话别骂我,很久没用了

不过记得bde xx api 可以解决问题的,忘记了,sorry
 
你是否已经设置table1的cachedupdates为true?若然,加上一句table1.applyupdates。
 
没有,你可以看源代码。
 
你试一试:
Table1.append;
Table1.FieldByName('Date').AsDateTime:=Date;
Table1.Post;
 
hwk2000:你所说的方法会添加一行记录,我要实现的是
在当前记录中添加数据。
 
你把databasename中的"./"去掉再试试!
 
Table1.append;
Table1.FieldByName('Date').AsDateTime:=Date;
Table1.Post;
table1.refresh;
 
用了Table1.append就会增加一行记录,可我要的是在当前记录中添加数据啊!
(把databasename中的"./"去掉后还是一样)。难道
Table1.Edit;
Table1.FieldByName('Date').AsDateTime:=Date;
Table1.Post;
就没有办法在Table1.Post;之后就完全把数据写到数据库文件中去吗?
 
在你的程序中的添加记录后你要用一句命令:
就是table.update
table.close
这样你的操作才会生效。
 
加这句试试
Database.StartTransation;
Database.Commit;
 
paradox的库稳定性非常差,你如果换成Access或SQL SERVER应该不会出现这个问题了.
 
我试试,反正用dBase也会出现这样的问题。
 
取消事物处理
 
使用Paradox数据库以及多数文件型数据库,都有这种问题;
每当打开一个表时,在程序目录下回出现Del*.mb之类的临时文件,
我们增加的数据其实都还在这些文件中(程序没有退出前)
你试试以下方法:
使用 TDatabase 控件连接数据库
当执行了多次增加数据操作时,尝试把整个数据库关闭一次(即TDatabase 控件Close)
我一般的做法是在用户退出一个菜单时(返回主界面),便关闭一次,再打开
 
无论是注销或重新启动计算机,都会先关闭你所写的程序,当然不正常关机肯定会丢数据;
另外,cache打开也会丢数据。不用table也许就不存在这个问题,用SQL的INSERT或。
我以前也出现过类以问题,好象转用SQL后解决了。反正现在基本不用TABLE。
 
多人接受答案了。
 
后退
顶部