var
// tqSerWindow:TQuery;
i,iWindowId:integer;
begin
if TblWindowsManage.FieldValues['windowid']=null then
exit;
if PgcSysManage.ActivePageIndex=1 then
begin
iWindowId:=TblWindowsManage.FieldValues['windowid'];
//增加窗口对应业务信息
tqSerWindow.Close;
tqSerWindow.SQL.Clear;
tqSerWindow.SQL.Add('select * from serviceinfo ');
tqSerWindow.SQL.Add('where serviceinfo.serviceid not in ');
tqSerWindow.SQL.Add('(select service.serviceid from service where service.windowid=:Serviceid)');
tqSerWindow.SQL.Add(' order by ServiceID');
tqSerWindow.ParamByName('Serviceid').AsInteger:=iWindowId;
tqSerWindow.Open;
//增加已经存在的业务信息
TqBeSerInfo.Close;
TqBeSerInfo.SQL.Clear;
TqBeSerInfo.SQL.Add('select * from serviceinfo ');
TqBeSerInfo.SQL.Add('where serviceinfo.serviceid in ');
TqBeSerInfo.SQL.Add('(select service.serviceid from service where service.windowid=:Serviceid)');
TqBeSerInfo.SQL.Add(' order by ServiceID');
TqBeSerInfo.ParamByName('Serviceid').AsInteger:=iWindowId;
TqBeSerInfo.Open;
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select * from serviceinfo ');
Query1.Open;
LtvSInfo.Clear;
LtvBeSInfo.Clear;
for i:=0 to tqSerWindow.RecordCount-1 do
begin
with LtvSInfo.Items.Add do
begin
Caption:=tqSerWindow.FieldByName('serviceid').AsString;
SubItems.Add(tqSerWindow.FieldByName('servicechinese').AsString);
SubItems.Add(tqSerWindow.FieldByName('serviceenglish').AsString);
end;
tqSerWindow.Next;
end;
LtvSInfo.Column[0].Width := 50;
LtvSInfo.Column[1].Width := 150;
LtvSInfo.Column[2].Width := 150;
for i:=0 to TqBeSerInfo.RecordCount-1 do
begin
with LtvBeSInfo.Items.Add do
begin
Caption:=TqBeSerInfo.FieldByName('serviceid').AsString;
SubItems.Add(TqBeSerInfo.FieldByName('servicechinese').AsString);
SubItems.Add(TqBeSerInfo.FieldByName('serviceenglish').AsString);
end;
TqBeSerInfo.Next;
end;
LtvBeSInfo.Column[0].Width := 50;
LtvBeSInfo.Column[1].Width := 150;
LtvBeSInfo.Column[2].Width := 150;
end;
end;
窗口上放了两个listview,分别显示已经发生业务的窗口 和没有发生业务的窗口,共涉及到两个表,业务窗口对应表tServiceWindow和窗口表tWindow。
我用了两个query(queryA,queryB)连接 ,分别用
A语句:select * from tWindow not in (select * from tServiceWindow)
和
B语句:select * from tWindow not in (select * from tServiceWindow)
来取出数据,先执行这两条sql语句后,在用
for i:=0 to query.recordcount do
begin
将取出的数据放到两个listview中;
end;
这个时候就有问题了。
因为是先执行A,再是B,两者之间没有别的代码,所以结果就是只能保存A的数据,B的数据丢失了。
我用断点跟 ,发现是这样的错误,
在A执行完之后,没有执行B之前,A语句用的query(假设为QueryA)的recordcount是0,当
执行B的时候 queryA的recordercount的数据就成了正常了。但是queryB的recordercount数据就不正常。 郁闷啊
我是这样解决的。
又放了一个queryC在上面,任意执行一个执行select的代码,取出tWindow 表中的内容,
这样子就好了~~~~~~~~~
大寒啊 哪位给个解释啊~~????