一个数据库里有 A ,B,C 3个表,且3个表完全相同(只是数据不同)
请先代码
var
I:TStringList;
X:Integer;
begin
 I := TStringList.Create;
 ADOConnection1.GetTableNames(I);
  For X :=0 to I.Count-1 do 
   ADOQuery1.Close;
   ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select * From '+ String(I[X]) +' Where A= '''+Y+ '''');
  ADOQuery1.ExecSQL;
  ADOQuery1.Open;意思就是分别分 A B C 3个表里查询 字段A的值为Y的数据
运行后,表里面只显示出最后一张表C里所查到的数据,A B 都没显示出来
请问如何显示出 A B C 3表里所查到的全部数据?

解决方案 »

  1.   

    你的逻辑错误了,在你的循环里面,虽然对每个表都进行了查询,但循环到最后,只查询了最后一个表的数据,fox x:=0 to i.count-1 do
       tempstr:=i[x]+',';
    adoquery1.close;
    adoquery1.sql.clear;
    adoquery1.sql.add('select * from')+tempstr+'where a=''''+y+'''');
    adoquery1.open;附:你的ADOQUERY1.EXECSQL不要用的,open就是执行查询语句
      

  2.   

    knife_s(一只渴望变得不菜的菜鸟) 
    你能帮我解释下 tempstr:=i[x]+',' 后面的',' 是什么意思吗?
      

  3.   

    用参数传递把, 不要用那么多的引号, 不方便调试的, 另外如果SQL语句执行的结果返回数据集则用Open, 如果不返回数据集/像删除更新之类的才用ExexSQL
    一个例子
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      with ADOQuery1 do
      begin
        Close;
        SQL.Clear;
        SQL.Add('select * from TableName where time = :tim');
        Parameters.ParamByName('Tim').Value := now;
        Open;
      end;
    end;
      

  4.   

    试试这个行不行?
    var
    I:TStringList;
    X:Integer;
    begin
      I := TStringList.Create;
      ADOConnection1.GetTableNames(I);
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add('Create table #tmp(a varchar(20), b varchar(20))');
      For X :=0 to I.Count-1 do
        ADOQuery1.SQL.Add('Insert into #tmp Select a, b From '+ String(I[X]) +' Where A= '''+Y+ '''');
      ADOQuery1.SQL.Add(' Select * from #tmp');
      ADOQuery1.SQL.Add(' drop table #tmp');
      ADOQuery1.Open;
    end;
      

  5.   

    ADOQuery1.SQL.Add('Create table #tmp(a varchar(20), b varchar(20))');
    创建一个表???   请问#是什么意思?
      

  6.   

    Select * From A Where A= '''+Y+ ''''
    union all
    Select * From B Where A= '''+Y+ ''''
    union all
    Select * FromC Where A= '''+Y+ ''''
      

  7.   

    fcjg(★飘来飘去!★(一天18小时在线)) 
    我按你的去做程序提示Undeclared identifier: 'union'
      

  8.   

    一个数据库里有 A ,B,C 3个表,且3个表完全相同(只是数据不同)
    请先代码
    var
    I:TStringList;
    X:Integer;
    begin
     I := TStringList.Create;
     ADOConnection1.GetTableNames(I);
      For X :=0 to I.Count-1 do 
       ADOQuery1.Close;
       ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('Select * From '+ String(I[X]) +' Where A= '''+Y+ '''');
      ADOQuery1.ExecSQL;
      ADOQuery1.Open;意思就是分别分 A B C 3个表里查询 字段A的值为Y的数据
    运行后,表里面只显示出最后一张表C里所查到的数据,A B 都没显示出来
    请问如何显示出 A B C 3表里所查到的全部数据?