Delphi在dbgrid中选择行并在其他dbgrid中显示其他行

时间:2014-07-04 17:35:23

标签: delphi delphi-7

我有2个dbgrid连接到两个不同的SQL数据库。一个是“提供者”表,其中coloumns是(provider_name,provider_adress),其他表是customer表(customer_name,customer_adress,provider_name)。更多客户可以属于一个提供商。公共字段是提供者的名称。

我的问题是......我想列出供应商的客户名称。如果我在dbgrid中单击随机的“provider_name”,则客户表dbgrid将处于活动状态,并将显示customer_names,adresses等。)我使用AdoDatasets和AdoQueries。

Select * from customer_name, customer_adress --(in customer table) 
where provider name = 'xy' --(in provider table) 

任何人都可以帮助查询?任何人都可以帮助我,我该怎么做?感谢您的答案!

1 个答案:

答案 0 :(得分:2)

对customer表使用单独的查询,使用类似这样的SQL(将CustQuery替换为您自己的ADOQuery组件的名称,当然还有实际表信息的表和列名称):< / p>

CustQuery.SQL.Text := 'SELECT c.customer_name, c.customer_address' + #13 +
                      'FROM customer c' + #13 +
                      'WHERE c.provider_name = :provider';

在提供程序查询的AfterScroll事件处理程序中,使用类似这样的代码(通过双击Object Inspector Events选项卡中的AfterScroll事件生成它):

procedure TForm1.ProviderQueryAfterScroll(DataSet: TDataSet);
begin
  CustQuery.DisableControls;
  try
    CustQuery.Close;
    CustQuery.Paramseters.ParamByName('provider').Value :=
      ProviderQuery.FieldByname('Provider_Name').Value;
    CustQuery.Open;
  finally
    CustQuery.EnableControls;
  end;
  CustQuery.Open;
end;

无论用户是单击提供者网格中的新行还是使用键盘滚动行,上述操作都将起作用。