问题简述如下:
数据库中:
一个表(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 是没有内容的,如何解决此类问题呢???
数据库中:
一个表(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 是没有内容的,如何解决此类问题呢???
如果你坚持这么做,可以在 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;
begin
sql.clear;
sql.add('Update xianInfor x set shiid=(select shiid from ShiInfor'+
' where ShiName=x.shiName)');
ExecSQL;
end;
正确做法应该是县信息和市信息分开录入,不要和查询混在一起。
录入县信息之前先录入市信息。这样录入县信息时只要选择所属市即可,
而不是每录入一个县都要录入所属市名。