窗体之间数据刷新问题 ( 积分: 100 )

  • 主题发起人 主题发起人 gdtkd
  • 开始时间 开始时间
G

gdtkd

Unregistered / Unconfirmed
GUEST, unregistred user!
有主窗体Form1,有子窗体Form2,通过点击Form1的DBGRid时以Showmodal的形式弹出修改子窗体Form2进行数据修改,但当Form2完成数据修改后,要刷新Form1的DBGrid时,就出现以下错误:
BLFrm [地区资料设置] -> DBGridEh1 -> Access violation at address 00505238 in module 'NwMIS.exe'. Read of address 00000324

代码如下

ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:=' Update BaseInfoTb Set S1_Name = '''+Caption+''', S1_Value1 = '''+Trim(Edit2.Text)+''', S1_IsValid = '+CheckStr+' Where S1_ID = '+IntToStr(RecID)+'';
ADOQuery1.ExecSQL;
ADOQuery1.Close;

//BLFrm.DBGridEh1.Close;
//BLFrm.ADOQuery1.Open;

MessageDlg('系统信息:修改数据成功!', mtInformation, [mbOK], 0);
Close;
 
ADOQuery1.ExecSQL;
ADOQuery1.Close;//数据链接都关闭了还怎么修改?
 
这个是不你想刷新数据的代码?
//BLFrm.DBGridEh1.Close; //这一句不要用了
//BLFrm.ADOQuery1.Open;//这一句凭空来了一个OPEN,可能还得写全了SQL.text
 
ADOQuery1.requery或重新查詢一次
 
你把数据集放在数据模块中,让Form1和Form2中的数据源连接到同一个数据集上即可,这样在Form2中对数据进行修改,Form1中可以即时看到。
 
from2 close时
ADOQuery1.close
ADOQuery1.open
重新刷新一次
 
差不多就是数据集要开着才能操作
 
这两句是刷新主窗体数据DBGrid的句,子窗体FORM2是以Showmodal的形式出来的。
//BLFrm.DBGridEh1.Close;
//BLFrm.ADOQuery1.Open;

回各位
ADOQuery1.requery 试过还是一样出错
from2 close时试过还是一样出错
 
重新在From2上写一次FROM1的SQL.TXT还是出错,只要一到FROM1就出错,会不会是SHOWMODAL的关系?
 
你把数据集放在数据模块中,让Form1和Form2中的数据源连接到同一个数据集上即可,这样在Form2中对数据进行修改,Form1中可以即时看到。

那不是每次用Update语句之后都要重写一次SQL的SELECT语句
 
ADOQuery1.ExecSQL;
ADOQuery1.Close; 这句不要了。
然后再刷新一次数据就可以了。如: 重新查詢一次
 
看来你这代码结构有些问题,不要将数据与界面操作放在一起,将数据操作分离出来.
 
单独出来一个datamodual,然后里面放置query控件之类的.然后主从窗体都连接这个datamodual里面的数据控件.不用刷新就都可以看到新数据.
 
可以试试在ShowModal后再Form1中将数据刷新。在BLFrm中
Form2.ShowModal;
Try ADOQuery1.requery();Except end;
1、首先要保证ADOQuery1已经Open了(即已经打开数据源)。
2、在ADOQuery1.requery();时加上抛出异常(即Try ADOQuery1.requery(); Except end;)
因为数据被你修改后,在刷新时,可能数据RecordCount为0(假设原数据一条姓名张三,修改为李四后,姓名张三已经不存在),此时Requery()将会报错。
 

Similar threads

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