情况写的很详细 请耐心看完,我上礼拜刚学,请大家多多指教
我建了两个相同的库a,b,有一样的表t ,其中有相同的字段f,  a中表t有两条不同的数据两条x1,x2,b中表t有和a.t相同一条数据x1(以下出现的sql语句均验证正确)
SpeedButton1Click:
if (dm.Query1.SQL.add('SELECT COUNT (*) FROM a.dbo.t')) <> (dm.query2.sql.add('SELECT COUNT (*) FROM b.dbo.t inner join a.dbo.f on b.dbo.t.f=a.dbo.t.f');) then
showmessage('0000');
else
showmessage(‘1111’)
执行结果应为0000,却显示1111我有一SpeedButton2用于把a中t的数据完全复制到b中表t代码如下
begin
   with dm.Query1 do
     begin
     close;
     with sql do
       begin
         Clear;
         add('delete from b.dbo.t');
       end;
     execsql;
     close;
     with sql do
       begin
         clear;
         add('insert into b.dbo.t(f) select * from a.dbot');
       end;
     execsql;
执行button2后,再执行button1执行结果应为1111,却显示0000
后来我用以下button3来查看(dm.Query1.SQL.add('SELECT COUNT (*) FROM a.dbo.t')和(dm.query2.sql.add('SELECT COUNT (*) FROM b.dbo.t inner join a.dbo.t on b.dbo.t.f=a.dbo.t.f')SpeedButton3Click:
begin
edit1.Text:=inttostr(dm.Query1.SQL.add('SELECT COUNT (*) FROM a.dbo.t'));
edit2.Text:=inttostr(dm.query2.sql.add('SELECT COUNT (*) FROM b.dbo.t inner join a.dbo.b on b.dbo.t.f=a.dbo.t.f'));
end;点击button3 ,edit1显示1,edit显示1,再点击button3,edit1和2都显示2,以此类推,点击button1后再点击button3后,edit都多加了1(此时点击button1显示都为1111)
点击button2后,再点击button3,edit1变成了1,edit2再原数据基础上再加1(此时点击button1显示都为0000)
按我预期的edit输出结果应该是都不变的一个是2,一个是1,可是他却会每按一次都会变
,我快faint了,我跟另个人研究半天无结果。其中我还设置过i:= dm.Query1.SQL.add('SELECT COUNT (*) FROM a.dbo.t'),j:= dm.query2.sql.add('SELECT COUNT (*) FROM b.dbo.t inner join a.dbo.b on b.dbo.t.f=a.dbo.t.f'),替换后执行button3结果竟然会略有不同,再次faint。
我想要button1正常出结果 大家帮帮我啊,orz

解决方案 »

  1.   

    dm.Query1.SQL.add('SELECT COUNT (*) FROM a.dbo.t')的返回值并不是Count(*)的结果,而是当前SQL语句在Query1中的一个序号dm.query2.sql.add('SELECT COUNT (*) FROM b.dbo.t inner join a.dbo.f on b.dbo.t.f=a.dbo.t.f');同样解决方法:
    dm.Query1.SQL.add('SELECT COUNT (*) FROM a.dbo.t');
    dm.Query1.Open;dm.query2.sql.add('SELECT COUNT (*) FROM b.dbo.t inner join a.dbo.f on b.dbo.t.f=a.dbo.t.f');
    dm.query2.Open;if dm.Query1.Fields[0].Value <> dm.Query2.Fields[0].Value then
    showmessage('0000')
    else
    showmessage(‘1111’);楼主其他代码没看
      

  2.   

    dm.Query1.SQL.add('IF SELECT COUNT (*) FROM a.dbo.t != SELECT COUNT (*) FROM b.dbo.t inner join a.dbo.f on b.dbo.t.f=a.dbo.t.f' select 1 else select 0');