我有一个AdoQuery1 查询出了内容,并显示在GRID1里,
一个AdoQuery2 查询出了内容也显示在GRID2里;通过Tedit控件输入方式作为条件;在TEDIT里输入的内空代表在
AdoQuery1跟AdoQuery2表里都有这个字段;
问题:要把在AdoQuery2表字段(Tedit)里的内容跟AdoQuery1表字段(Tedit)里的内容一样的数据查询到另一个AdoQuery3或GRID3里,应如何实现呢?谢谢哪大虾帮忙,
急待在线

解决方案 »

  1.   

    {公共字段是 'kk', int类型;具体字段,类型自己变通一下,也可以是多个字段}
    {Tedit.text输入条件, 则在查询按扭Button1中写上:}
    procedure TForm1.Button1Click(Sender: TObject);
    var 
    i: LongInt;
    f: Double; 
    begin
      if not TryStrToInt(Edit1.Text,i) or not TryStrToFloat(Edit1.Text,f) then Exit; {判断是不是数字}
      AdoQuery1.filter:='kk>'+edit1.text+'';  
      AdoQuery2.filter:='kk>'+edit1.text+'';  
      AdoQuery1.filtered:=true;
      AdoQuery2.filtered:=true;
    {上面已经过滤了记录,下面判断一下,显示在dbgrid3中:}
      if (ADOQuery1.RecordCount>0) and (AdoQuery2.RecordCount>0) then
          begin 
             AdoQuery3.Close;
             AdoQuery3.sql.text:='Select * from tb1 where kk>'+edit1.text+''; {要显示那个表,那个列,或全部列,自己改一下}
             AdoQuery3.open;
          end  
       else
          ...
    end; 
      

  2.   

    楼上kaikai_kk兄弟:
    首先谢谢;
      上面问题点:1.TEDIT是我输入两个表字段名,我的意思通过TEDIT输入的内容就安两
                     个表里有这个字段来查询出相同的字段(Tedit)里的内容;而不是条件;
                  2.我没有说清楚的是在表AdoQuery2有的字段在AdoQuery1里都有,查询出
                     AdoQuery3的内容字段以AdoQuery2为依据;
                  3.在上面“AdoQuery3.sql.text:='Select * from tb1 where kk>'+edit1.text+''; ”与  
                     AdoQuery1、AdoQuery2都没有半天关系;如何查出有AdoQuery2表里字段(Tedit)在AdoQuery1
                   字段(Tedit)里有相同的内容
       
      

  3.   

    整理如下:
    一个AdoQuery1 查询出了内容,并显示在GRID1里, 
    一个AdoQuery2 查询出了内容也显示在GRID2里; 通过Tedit控件输入方式作为两个表里都有的字段;就是在TEDIT里输入的内空代表在 
    AdoQudoquery1跟AdoQuery2表里都有这个字段; 
                     1.TEDIT是我输入两个表字段名,我的意思通过TEDIT输入的内容就为两 
                     个表里有这个字段来查询出相同的内容;而不是内容条件; 
                     2.在表AdoQuery2有的字段在AdoQuery1里都有,查询出 
                     AdoQuery3的内容字段以AdoQuery2为依据;也就是把AdoQuery2表字段
                       TEDIT的内空跟在表AdoQuery1字字段TEDIT相同内空查找出来;问题:要把在AdoQuery2表字段(Tedit)里的内容跟AdoQuery1表字段(Tedit)里的内容一样的数据查询到另一个AdoQuery3或GRID3里,应如何实现呢?
      

  4.   

    例如:edit1作为设入字段:
     if trim(edit1.Text)<>'' then
     with adoquery3 do begin
      close;
      sql.Text:='select a.*,b.* from 表1 a inner join 表2 b on a.'+edit1.Text+'='+'b.'+edit1.Text;
      open;
     end;
      

  5.   

    Edit输入的是表的字段名称吗?你是用两个Edit吗?,每个Edit内容对应,两表的某个字段?
    然后,对比查询结果,有两同的值就显示在DBGrid3中??
      

  6.   

    补充一下,如果你表中用的是中文字段则要改为:if trim(edit1.Text)<>'' then
     with adoquery3 do begin
      close;
      sql.Text:='select a.*,b.* from 表1 a inner join 表2 b on a.['+edit1.Text+']='+'b.['+edit1.Text+']';
      open;
     end;
      

  7.   

    GDTOPONE
     sql.Text:='select a.*,b.* from 表1 a inner join 表2 b on a.'+edit1.Text+'='+'b.'+edit1.Text;这个上面的不是我想要的;
     表1、 表2是数据里的实表,我要的是ADOQUERY1跟ADOQUERY2查询处理过的两上虚表,问题的重点在这里;
    谢谢
      

  8.   

    一个EDIT为两个表里都有的字段名;
    ADOQUERY1跟ADOQUERY2为查询出来的两上虚表,而不是数据库里面的表,这个是我搞不出来要要问的重点;
    谢谢
      

  9.   

    例子:
    1.ADOQUERY1的SQL语句是:select * from 表1 where x_a=1
    2.ADOQUERY2的SQL语句是:select * from 表1 where l_a=14
    以上是两个含有条件的查询语句.if trim(edit1.Text)<>'' then
     with adoquery3 do begin
      close;
      sql.Text:='select a.*,b.* from (select * from 表1 where x_a=1) a inner join (select * from 表1 where l_a=14) b on a.['+edit1.Text+']='+'b.['+edit1.Text+']';
      open;
     end;
      

  10.   


    if trim(edit1.Text)<>'' then
     with adoquery3 do begin
      close;
      sql.Text:='select a.*,b.* from (生成虚表1的语句) a inner join (生成虚表2的语句) b on a.['+edit1.Text+']='+'b.['+edit1.Text+']';
      open;
     end;
      

  11.   

    ADOQUERY1查询并可显示在GRID1里字段、内容:
    prd_no,   name,  spc,   knd,  ut, 
    002       B02    23*3     4    KG
    004       KHL    M*23      2     MADOQUERY2查询并可显示在GRID2里字段、内容:
    prd_no,   name,  spc    
    001       B01    20*2   
    002       B02    23*3    
    003       B03    Y*Y7    
    004       KHL    M*23     现在我在edit里输入"prd_no", 点BUTTON后就在上面两查出的表里按prd_no来对应,把ADOQUERY2
    在ADOQUERY1里有的内容查出来显示到ADOQUERY3或GRID3里得到结果:
    prd_no,   name,  spc    
    002       B02    23*3    
    004       KHL    M*23 我这样说是否明白
      

  12.   

    csdn老是有问题,要么就是看不到回贴,要么就是显示的与实制回贴的不一样,真是受不了,同时也难以明白那些管理的是如何管理的.
      

  13.   

    一定要:“..from (生成虚表1的语句) a inner join (生成虚表2的语句).. ”这样子才能实现吗?直接引用ADOQUERY1或GRID1、ADOQUERY2或GRID2不行吗因为“..from (生成虚表1的语句) a inner join (生成虚表2的语句).."对我现实情况来讲是很有难度的;
    所以我才想到是否能直接引用ADOQUERY1或GRID1、ADOQUERY2或GRID2来解决
      

  14.   

    1.ADOQUERY3生成并连接一个临时表,并含有prd_no,   name,  spc 字段procedure TForm1.Button1Click(Sender: TObject);
    begin
     if trim(edit1.Text)<>'' then
     with adoquery1 do begin
       DisableControls;
       First;
       adoquery2.DisableControls;
       adoquery2.First;
       while not eof do begin
        if FieldValues[edit1.Text]=adoquery2.FieldValues[edit1.Text] then begin
        adoquery3.Append;
        adoquery3.FieldValues['prd_no']:=FieldValues['prd_no'];
        adoquery3.FieldValues['name']:=FieldValues['name'];
        adoquery3.FieldValues['spc']:=FieldValues['spc'];
        adoquery3.Post;
        end;
       next;
       adoquery2.Next;
       end;
      EnableControls;
      adoquery2.EnableControls;
     end;
    end;
      

  15.   

     GDTOPONE 还差一点点,
    我查询adoquery2这个表里的内容不是固定的呢,应如保处理呢
      

  16.   


    我没有数据表的:我就是想做一个从EXCEL里能倒入到SQL表里的功能;但是我就是判断不出有重复的如何处理;ADOQUERY1是查的是数据库表里的内容出来的数据;
    而ADOQUERY2是从EXCEL里查询转过来的内容数据;所以ADOQUERY2字段不是固定变化的,但是它有的字段一定会ADOQUERY2表里存在;
      

  17.   

    1.首先把从excel中取得的数据放在一个临时表中t2中
    2.根据这个临时表和adoquery1所联接的表假定为t1进行关联(因为你的临时表中有的字段一定在t1中存在)
    3.开始拼sql
      with adoquery3 do
      begin
        close;
        sql.text := ' select t1.*,t2.* from t1,t2'+
                    ' where t1.'+trim(edit1.text)+'=t2.'+trim(edit1.text);
        Open;
      end;不知道是不是这个意思,你是根据edit1中的内容做为联接字段来查询t1与t2中有关联的信息.
      

  18.   

     zxf_feng我现在想要的是想把两个adoquery1、adoquery2里面查询的数据作一个对照显示在adoquery3或GRID3里;
    而不是T1、T2表;T1、T2是从哪里来的呢;我已把源、目标数据查询到adoquery1、adoquery2里了,现在就想对
    adoquery1、adoquery2两个控件里的作比较有一样的数据显示出来  den88
    您引用的这个差很大;可以看我另发整理的一个贴 
     
      

  19.   

    BarryW:你的adoquery1与adoquery2肯定是要联接数据库表的,否则数据从哪里来
    为什么一定要把思维锁定在操作adoquery1和adoquery2呢,其实你最终操作的还是数据表,adoquery1,adoquery2中人过是把数据进行提取罢了.