我怎么能够使用DBGrid1.OnDblclick事件,使得DBGrid2获得鼠标所双击的记录?

解决方案 »

  1.   

    可以设置从表的Datasource指向主表的DataSource
    同时从表写名联接主表的关键字
      

  2.   

    给你段源码:-------------乱码是中文,不影响的
    procedure TfrmFKQD.DBGridEh1CellClick(Column: TColumnEh);
    var
    S,Str,Str1:string;
    i,j,p:integer;
    a:string;
    begin
         Str:=Edit1.Text +datetostr(DTP.DateTime)+Edit1.Text;
         Str1:=Edit1.Text+datetostr(DTP.DateTime-7)+Edit1.Text;
         if  checkBox1.Checked=true then
         begin//获取DBGrid的选中行
        with DBGridEh1.DataSource.DataSet do
            for p:=0 to DBGridEh1.SelectedRows.Count-1 do begin
                GotoBook(pointer(DBGridEh1.SelectedRows.Items[p]));
                s:=s+Fields[0].AsString;
            end;
                if MidStr(s,10,1)<>'' then
                begin
                    j:=StrLen(pChar(s)) div 9;
                    for i:=0 to j-1 do
                    begin
                        a:=a +Edit1.Text+MidStr(s,1+i*9,9)+Edit1.Text+'or kh_dm=';
                    end;
                    a:=MidStr(a,1,StrLen(pChar(a))-9);            end else
                begin
                    a:=Edit1.Text+s+Edit1.Text
                end;
    {
                 // DBGridEh2 &micro;&Auml;&cedil;ü&ETH;&Acirc;
                with ADOQuery2 do begin
                Close;
                SQL.Clear;
                SQL.Add('select distinct pm_mc as &AElig;·&Atilde;&ucirc;,dm_mc as &acute;ó&sup1;&aelig;&cedil;&ntilde;,dn_mc as &ETH;&iexcl;&sup1;&aelig;&cedil;&ntilde;,jh_sl/cast(kc_bl as int) as &Ecirc;&yacute;&Aacute;&iquest;, ceiling(((jh_sl/kc_bl-jh_sl/cast(kc_bl as int))*kc_bl)) as &Aacute;&atilde;&Iacute;· ,jh_je as &frac12;&oslash;&raquo;&otilde;&frac12;&eth;&para;&icirc;,zp_hm as &Ocirc;&ouml;&AElig;±&ordm;&Aring;,jc_rq as &frac12;&oslash;&sup2;&Ouml;&Egrave;&Otilde;,');
                SQl.Add(Edit1.Text+Edit1.Text);
                SQL.Add(' as &Ecirc;&micro;&cedil;&para;&frac12;&eth;&para;&icirc;,');
                SQl.Add(Edit1.Text+Edit1.Text);
                SQL.Add('as &Icirc;&acute;&cedil;&para;&frac12;&eth;&para;&icirc; ,');
                SQl.Add(Edit1.Text+Edit1.Text);
                SQL.Add('as ±&cedil;×&cent;,rq as &frac12;á&Euml;&atilde;&Egrave;&Otilde;&AElig;&Uacute;,kh_dm,kh_mc  from pv_yfzk');
                SQL.Add('where (rq+ht_zq=');
                SQL.Add(Str);
                SQL.Add('or fk_rq=');
                SQl.Add(Str1);
                SQL.Add(') and fk_ye<>0 and (kh_dm=');
                SQl.Add(a);
                SQl.Add(') order by kh_dm, zp_hm');
                Open;
                end;
    }
                with ADOQuery4 do begin
                    Close;
                    SQL.Clear;
                    SQL.Add('insert into Means_Goods_F  select distinct pm_mc as &AElig;·&Atilde;&ucirc;,dm_mc as &acute;ó&sup1;&aelig;&cedil;&ntilde;,dn_mc as &ETH;&iexcl;&sup1;&aelig;&cedil;&ntilde;,jh_sl/cast(kc_bl as int) as &Ecirc;&yacute;&Aacute;&iquest;, ceiling(((jh_sl/kc_bl-jh_sl/cast(kc_bl as int))*kc_bl)) as &Aacute;&atilde;&Iacute;· ,jh_je as &frac12;&oslash;&raquo;&otilde;&frac12;&eth;&para;&icirc;,zp_hm as &Ocirc;&ouml;&AElig;±&ordm;&Aring;,jc_rq as &frac12;&oslash;&sup2;&Ouml;&Egrave;&Otilde;,rq as &frac12;á&Euml;&atilde;&Egrave;&Otilde;&AElig;&Uacute;,');
                    SQl.Add('0');
                    SQL.Add(' as BZ,');
                    SQl.Add(Edit1.Text+Edit1.Text);
                    SQL.Add(' as &Ecirc;&micro;&cedil;&para;&frac12;&eth;&para;&icirc;,');
                    SQl.Add(Edit1.Text+Edit1.Text);
                    SQL.Add('as &Icirc;&acute;&cedil;&para;&frac12;&eth;&para;&icirc; ,');
                    SQl.Add(Edit1.Text+Edit1.Text);
                    SQL.Add('as ±&cedil;×&cent;,kh_dm,kh_mc,ht_zq  from pv_yfzk');
                    SQL.Add('where (rq+ht_zq=');
                    SQL.Add(Str);
                    SQL.Add('or fk_rq=');
                    SQl.Add(Str1);
                    SQL.Add(') and fk_ye<>0 and (kh_dm=');
                    SQl.Add(a);
                    SQl.Add(') order by kh_dm, zp_hm');
                    Execsql;
                end;
                with ADOQuery4 do begin
                    Close;
                    SQl.Clear;
                    SQl.Add('insert into Means_KH_F select distinct kh_dm from  Means_Goods_F order by kh_dm');
                    Execsql;
                end;
      

  3.   

    晕!这么长的代码。主表双击后,用DBGrid1.datasource.dataset.fieldbyname('ID').asstring ;得到主键,然后在显示从表的DBGrid的Query或者ADOQuery中写sql语句。
      

  4.   

    有这么麻烦,弄个主从表不就行了。主和从用同一个表,用关键字作为masterfields
      

  5.   

    看例子
    http://www.incom.com.cn/download/demo.rar