if Application.MessageBox('修改信息?','提示',mb_IconInformation+mb_okcancel)=mrOk then begin DMFrm.QrCl.RequestLive:=true; end; 然后在与query相连的dbgrid中还是不能够修改阿什么原因阿
傻瓜!你是(来自一个表情况!,就是RequestLive呀!) if Query1.SQL语句 = 来自一个表 then begin Query1.RequestLive:= true; DBGrid1.ReadOnly:= False; end else begin 也许有必要用ADO,我以前是对多表查询结果集进行修改时用了ADO,然后 修改后你有必要在Query1的记录被修改事件里面写对应的另外表更新语句。 //Drate 说的对。 end;
你是不是用个dxDBGrdi控件,把它的LoadAllRecord属性设置为FALSE;
我正在写的一个程序中的有关更新的代码,一共参考。我以将qr_goods_out 的requestlive :=TRUE cacheupdate=True. 并且qr_goods_out 的纪录是从一个视图里取来的。 完确实现多表更新。procedure Tfr_goods_out.btn_mdfyClick(Sender: TObject); begin try if btn_mdfy.Tag=0 then begin dm.Database1.StartTransaction; btn_mdfy.Tag:=1; dbgrid1.SelectedField.FocusControl; btn_mdfy.Caption:='确认修改'; dbgrid1.ReadOnly:=false; end else begin btn_mdfy.Tag:=0; btn_mdfy.Caption:='修改'; dbgrid1.ReadOnly:=true; dm.qr_goods_out.ApplyUpdates; dm.Database1.Commit; dm.qr_goods_out.CommitUpdates; cmb_ck_idChange(sender); end; pub.all_goods_out(cmb_ck_id.Text); edt_mustpay.Text:=format('%m',[pub.goods_money_pay('goods_out','bill_id_out',cmb_ck_id.Text)]); except begin dm.Database1.Rollback; messagebox(fr_goods_out.Handle,'纪录修改未能成功!', '系统提示信息',mb_iconwarning+mb_ok+mb_taskmodal); end; end; end;
SQL语句如: select a.*,b.* from a,b也就是说,你用的是DELPHI的BDE来开发数据库软件!因为BDE可以说现在已进入了衰退期,没有什么前景,而且最关键的一点是:它不支持对数据表的查询结果进行多表更新!(也就是为什么你会有提示:数据源是只读的)建议:不要用BDE,用MS的ADO来编吧!
Query能对一个表进行更新吗?
兄弟的意思是改为false吧,不行的
TADOQuery.insert
TADOQuery.post
adodataset1.open
ok
要这样query.requestlive:=true
包你能行
将query中得到的结果放到一个临时表中,
将BDGRID的TABLENAME设为临时表
就可以了,我已经实现了这样的功能!
百分百可以!
水平比较菜
能请你说的详细一点吗?帮帮小弟吧!
begin
DMFrm.QrCl.RequestLive:=true;
end;
然后在与query相连的dbgrid中还是不能够修改阿什么原因阿
把TQuery.UpdateObject设为TUpdateSQL,并设置TUpdateSQL的语句就行啦(通过点击Delphi会自然生成)
query.requestlive:=true
分别给我,有人说对了
if Query1.SQL语句 = 来自一个表 then
begin
Query1.RequestLive:= true;
DBGrid1.ReadOnly:= False;
end else
begin
也许有必要用ADO,我以前是对多表查询结果集进行修改时用了ADO,然后
修改后你有必要在Query1的记录被修改事件里面写对应的另外表更新语句。
//Drate 说的对。
end;
并且qr_goods_out 的纪录是从一个视图里取来的。
完确实现多表更新。procedure Tfr_goods_out.btn_mdfyClick(Sender: TObject);
begin
try
if btn_mdfy.Tag=0 then
begin
dm.Database1.StartTransaction;
btn_mdfy.Tag:=1;
dbgrid1.SelectedField.FocusControl;
btn_mdfy.Caption:='确认修改';
dbgrid1.ReadOnly:=false;
end
else
begin
btn_mdfy.Tag:=0;
btn_mdfy.Caption:='修改';
dbgrid1.ReadOnly:=true;
dm.qr_goods_out.ApplyUpdates;
dm.Database1.Commit;
dm.qr_goods_out.CommitUpdates;
cmb_ck_idChange(sender);
end;
pub.all_goods_out(cmb_ck_id.Text);
edt_mustpay.Text:=format('%m',[pub.goods_money_pay('goods_out','bill_id_out',cmb_ck_id.Text)]);
except
begin
dm.Database1.Rollback;
messagebox(fr_goods_out.Handle,'纪录修改未能成功!',
'系统提示信息',mb_iconwarning+mb_ok+mb_taskmodal);
end;
end;
end;