困惑我一天的问题,还是不能解决 路过的帮我看看 ( 积分: 20 )

  • 主题发起人 主题发起人 admin2008
  • 开始时间 开始时间
A

admin2008

Unregistered / Unconfirmed
GUEST, unregistred user!
就是我把一张单的数据导入到另一窗口中修改,这个事件是我选中某行就在这些控件中显示表中相对就的数据
procedure Tsale_modify1.ADOinhouse_tempAfterScroll(DataSet: TDataSet);
begin
sys_id:=ADOinhouse_temp.fieldByName('sys_id').asstring;
edit11.Text:=ADOinhouse_temp.fieldByName('in_id').AsString ;
edit12.Text:=ADOinhouse_temp.fieldByName('invoice_id').AsString ;
comboedit1.Text:=ADOinhouse_temp.fieldByName('vendor_name').AsString ;
vendor_id:=ADOinhouse_temp.fieldByName('vendor_id').AsString ;
datetimepicker3.DateTime:=ADOinhouse_temp.fieldByName('in_date').AsDateTime;
这时我就要对某一行的数据修改了 就在comboedti1中输入修改的值后 在下面的dbgrid中显示刚修改的数据 我的代码是这样的
procedure Tsale_modify1.Edit1Change(Sender: TObject);
begin
//**************更新临时表******************//
with adoquery3 do
begin
close;
sql.Clear ;
sql.Text:='update inhouse_temp set vendor_name=:vendor_name where sys_id='''+sys_id+'''';
Parameters.ParamByName('vendor_name').Value:=combobox1.Text;
ExecSQL ;
end;

//***************************重新打开***********************//
{with adoinhouse_temp do
begin
close;
sql.Clear ;
sql.Text:='select * from inhouse_temp
open;
end;
发现不能再重新打开了 这样的话 焦点永远在第一行 把这段代码去掉就可以
//***************************重新打开***********************//
{with adoinhouse_temp do
begin
close;
sql.Clear ;
sql.Text:='select * from inhouse_temp
open;
end;
但是我想在编辑框中修改数据了在dbgrideh中随时显示刚修改的值呢
各位帮我出个主意吧
 
你要这样刷新数据
procedure RefreshAdoQuery(aAdoQry: TAdoQuery);
var
SavePlace: TBookMark;
begin
//浏览窗口刷新数据,并恢复记录指针
with aAdoQry do
begin
DisableControls;
SavePlace := GetBookmark;
Close;
Open;
try
GotoBookmark(SavePlace);
except
Last;
end;
FreeBookmark(SavePlace);
EnableControls;
end
end;
 
楼主这样的做法,个人认为不是很好。因为OnChange事件触发很频繁,会导致你频繁的执行SQL语句。既然你使用了数据集,可以那些数据感知控件呀,如DBEdit,DBCombobox等,通过他们直接修改数据,而不是直接对数据库操作,然后再重新将数据加载到数据集中。
 
后退
顶部