举个例子:
现在有三个表
_Product(ProductNo varchar(50),ProductName varchar(50))//产品编号,产品名称
Main(Main_ID int,Main_Date datetime,Main_ShortName varchar(50))//主表编号,日期,简称
Detail(Main_No int,Detail_No int ,Detail_ProductNo varchar(50),Detail_Unit varchar(50),Detail_Price numeric(18,2),Detail_Amount int)//主表编号,从表编号,产品编号,单位,单价,数量显示在 AdoQuery1,AdoQuery2分别与  DBGrid1,DBGrid2关联 :
procedure TForm1.Button4Click(Sender: TObject);
begin
    ADOQuery1.Close;
    ADOQuery1.Sql.Clear;
    ADOQuery1.Sql.Add('Select * from Main');
    ADOQuery1.Open;end;
procedure TForm1.ADOQuery1AfterScroll(DataSet: TDataSet);
begin
  ADOQuery2.Close;
  ADOQuery2.SQL.Clear;
  ADOQuery2.SQL.Add('Select a.Detail_No,(Select b.ProductName from _Product b where b.ProductNo=a.Detail_ProductNo) as ProductName ,a.Detail_Unit,a.Detail_Price,a.Detail_Amount,(a.Detail_Price*a.Detail_Amount) as SumAmount from Detail a where a.Main_No=:MainNo');    //执行是弹错,语句在查询分析器中执行正常,不知道为什么。如果想要实现该效果该如何写语句?
  //ADOQuery2.SQL.Add('Select a.Detail_No,a.Detail_ProductNo,a.Detail_Unit,a.Detail_Price,a.Detail_Amount,(a.Detail_Price*a.Detail_Amount) as SumAmount from Detail a where a.Main_No=:MainNo'); //可以正常执行
  ADOQuery2.Parameters.ParamByName('MainNo').Value:=ADOQuery1.fieldByName('Main_ID').AsInteger;
  ADOQuery2.Open;
end;
如果我现在想新增数据 在ProductName 这里如何通过输入 产品编号 直接得到 产品名称
另外在鼠标离开 Detail_Amount 栏位时直接计算出 Detail_Price * Detail_Amount