一个Tupdatesql问题(100分)

  • 主题发起人 主题发起人 plwei
  • 开始时间 开始时间
P

plwei

Unregistered / Unconfirmed
GUEST, unregistred user!
请大家帮助检察一个代码:
query1.close;
query1.CachedUpdates:=true;
query1.updateobject:=updateSQL1;
query1.database.StartTransaction;//在此处出现“access violation at address 0047F32A”的错误.
try
sqltext:='delete from filelist.dbf where ddkey='+c;
query1.SQL.Clear ;
query1.SQL.add(sqltext);
query1.Prepare ;
uery1.ExecSQL ;
query1.applyupdates;
query1.database.commit;
except
query1.database.rollback;
application.MessageBox('删除当前记录时,出现错误!','提示框',mb_ok+mb_iconinformation);
end;
query1.CommitUpdates ;


请大家给予指正。
 
当Query1.Active为False时是不能这样使用。
query1.database.StartTransaction

社Database1与Query1相连。则
Database.StartTransaction
 
我想你的程序中一定没有一个静态的TDatabae控件
注意在Delphi中是会在应用程序自动创建一个TDatabase控件的
但那是在TDataset打开时,如果没有相应的TDatabase,则创建一个
所以,此时你的TQuery没有打开,所以不会创建一个相应的TDatabase,
这样也就可以理解你为什么会出现Access violation了。
解决办法:
1:创建一个静态的TDatabase控件,在StartTransaction前将前设置为TQuery的相应属性
2:先打开TQuery,然后再进行StartTransaction操作。
其实一个好的习惯是在一个应用程序中,至少有一个TDatamodule,在其中有一个TDatabase
这样作为一个全局的别名提供者,使你的应用程序的灵活性大大增强。
 
再补充一点,既然query1.CachedUpdates:=true那就根本不需TDatabase来控制事物.

try
......
query1.applyupdates;
except
query1.CancelUpdates;
application.MessageBox('删除当前记录时,出现错误!','提示框',mb_ok+mb_iconinformation);
end;
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
977
import
I
S
回复
0
查看
928
SUNSTONE的Delphi笔记
S
后退
顶部