把DBGrid中的数据提交给数据的问题(100分)

  • 主题发起人 主题发起人 L.Q
  • 开始时间 开始时间
L

L.Q

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大侠,请赐教,在这先谢了,有分送:
用TADOQuery控件把数据库的数据传递给DBGrid,
表结构:
表1:表名:base_country,字段:id,coun_no,name_chi,name_eng,continentid,remark
表2:表名:base_continent,字段:id,cont_no,name_chi,name_eng,remark.
语法如:
SELECT a.coun_no,a.name_chi,a.name_eng,b.name_chi as bname,a.remark
FROM base_country a
INNER JOIN base_continent b ON (b.id = a.continentid)
DBGrid显示的字段为:
Coun_no,name_chi,name_eng,bname,remark.
其中bname为表2的name_chi.
接着往DBGrid中输入多条数据后保存却无法送到数据,如何同时把bname的值转换成表2的id提交结表1的continentid

软件结构:C/S,Delphi6.0+ADO+SQL server7.0;
 
用SQL语句,遍历DbGrid连接的AdoQuery,
对于每条记录,更新一个表,如果RowsAffected =0,则将此记录插入表,
然后 更新另一个表,如果RowsAffected =0,则将此记录插入表;
 
to : svw0506
您的程序是同是把两个表的数据都更新了

我的想法是:
  根据b.bname的值(唯一值),得出表b的id号,接着把id保存到a表的对应字段中,
应在那个事件中响应,如何触发事件,而且在TDBGrid中数据的完整性和数据的正确性
是如何控制。如成品出货时会涉及到库存的变化,而且如果库存不够时则不能进行出货

 
如你所说,尽量显式的调用事务处理比较好,比如在保存按钮单击事件里,动态地拼写SQL语句
这样很少有麻烦,而且将来维护起来也方便:

procedure TForm1.Button1Click(Sender: TObject);
begin
ADOConnection1.BeginTrans;
try
//这里写逻辑判断的语句
with ADOQuery1 do
begin
Close;
SQL.Text := ''; //这里写更新数据库的语句
ExecSQL;
end;
// ...其它操作数据库语句
ADOConnection1.CommitTrans;
except
if ADOConnection1.InTransaction then
ADOConnection1.RollbackTrans;
Application.MessageBox('保存数据出错!', '提示', 64);
Exit;
end;
end;


 
后退
顶部