ADOQuery and DBEdit(100分)

  • 主题发起人 主题发起人 sfcheng
  • 开始时间 开始时间
S

sfcheng

Unregistered / Unconfirmed
GUEST, unregistred user!
我在delphi里面通过ADO访问access数据库。用了TADOQuery把数据库
里面的东西显示到一个form上面的几个DBEdit里面。有以下问题:
我想在关闭窗口的时候自动校验所有DBEdit,应该怎么写?
我想找类似这样的函数,query.activerecord.validate( ). 可惜
没找到。
我想在窗口关闭的时候调用TADOQuery.Post( ), 但是如果被修改的
DBEdit一直拥有焦点,也就一直没有机会触发Validate事件,所以
TDAOQuery的Modified标志为false, 这时后调用post( )就会触发异常。
如果解决这一问题?我现在的写法是先调用TADOQuery.Edit(), 然后
再Post. 感觉很愚蠢的说
 
OnClose事件中写代码
DBEdit.Modified 事件结合
if TDAOQuery1.Modified then
TDAOQuery1.post;
其它的你自己组合
 
如果form上面有10多个DBEdit,岂不是每个的DBEdit.Modified都要写进去?有什么简单的写法吗?
 
if adoquery1.State in [dsedit] then adoquery1.Post
 
Smallbs兄的不就成了麼!
當然你還可以這樣寫道
var i:integer;
if adoquery1.State=dsBrowse then
begin
i:=messagebox(handle,'是否需要存盤正在修改的數據','系統提示',mb_YesNOCancel+mb_iconquestion);
case i of
6:adoquery1.post;
7:adoquery1.cancel;
end;
end;
CanClose:=(adoquery1.State=dsBrowse);
 
>>如果form上面有10多个DBEdit,岂不是每个的DBEdit.Modified都要写进去?有什么简单的写法吗?
如果是每个DBEdit都要执行这一检查的话,就有比较简单的方法:
for i:=0 to componentCount-1 do
if Components is TDbEdit then
if (Components as TDbEdit).Modified then
begin
TDAOQuery1.post;
Break; //只要有一个modified就post,post一次就行。
end;
 
to smallbs,

如果只有一个DBEdit被修改过,而且焦点一直没有离开该域,
这时候调用post是会出现异常的。出错信息是"you should put the dataset in edit mode
before you can post"。

 
那是因为这个被修改过的数据没有得到用户确认,系统甚至认为这个数据还没有输完呢,
所以才用if adoquery1.State in 。。。来判断嘛
 
to smallbs:
Then for my case (DBEdit is changed but focus is not lost), will the condition
adoquery1.state in dsEdit be true or false? If true, exception. If false, my data
is not saved. :(
 
form1.SetFocus (或button1.SetFocus)
if adoquery1.State in [dsedit] then adoquery1.Post
 
>>如果只有一个DBEdit被修改过,而且焦点一直没有离开该域
你可以先用DbEdit1.exit使焦点离开该edit,然后再post。
 
to smallbs:
you are right. thank you. but it makes me feel delphi is kind of stupid.

 
后退
顶部