问题简述如下:
数据库中:
一个表(XianInfor)中存储着县级单位的信息。包括县级单位的编号、名称、该单位所在的市级单位的编号。
一个表(ShiInfor)中存储着市级单位的信息。包括市级单位的编号、名称。create table XianInfor (XianID int identity(1,1) primary key, XianName varchar(5), ShiID int )
create table ShiInfor (ShiId int identity(1,1) primary key, ShiName varchar(5))数据在这里不列了。
在delphi程序中,用adoquery联合两个表进行查询,查询结果是县级单位的编号、县级单位的名称、该单位所在的市级单位的名称。with adoquery1 do
 begin
 close;
 sql.clear;
 sql.add ('select a.xianid,a.xianName, b.shiName from xianinfor a left join shiinfor b on a.shiid=b.shiid')
 end;之后,当利用adoquery进行数据更新时会出问题:
adoquery1.fieldbyname('xianName')='文水县';
adoquery1.fieldbyname('shiname')='吕梁市';
只有“文水县”会被写入到xianinfor表中,而它所对应的shiId 是没有内容的,如何解决此类问题呢???

解决方案 »

  1.   

    你在SQL面中再把a.shiId加上 然后adoquery1.fieldbyname('shiid')=  ID ;
      

  2.   

    你的设计有问题。查询和录入界面不应放在一起。
    如果你坚持这么做,可以在 AdoQuery1 的 OnAfterPost 中增加代码  with ADOQuery2 do
      begin
        sql.clear;
        sql.add('Update xianInfor x set shiid=(select shiid from ShiInfor'+
                ' where ShiName=x.shiName');
        ExecSQL;
      end;
      

  3.   

    sorry! 少了一个 ')'  with ADOQuery2 do
      begin
      sql.clear;
      sql.add('Update xianInfor x set shiid=(select shiid from ShiInfor'+
      ' where ShiName=x.shiName)');
      ExecSQL;
      end;
      

  4.   

    Sorry, 没看清数据表,xianInfo 中没有 ShiName。
    正确做法应该是县信息和市信息分开录入,不要和查询混在一起。
    录入县信息之前先录入市信息。这样录入县信息时只要选择所属市即可,
    而不是每录入一个县都要录入所属市名。