有DBGrid1、DBGrid2,xxx为DBGrid1的DataSource
代码如下:
procedure TForm1.DataChange(Sender: TObject; Field: TField);
begin
  with (Query2 as TADOQuery) do
  begin
    Close;
    SQL.Clear;
    SQL.Add('select * from '''+tablename2+''' where 编号='''+(Query1 as TADOQuery).fieldbyname('编号').AsString+'''');
    Open;
  end;
end;
事先定义了
tablename1:='表1';
tablename2:='表2';
Query1:=DM.findcomponent('b1');
Query2:=DM.findcomponent('b2');
把TForm1.xxxDataChange换成 TForm1.DBGrid1CellClick还是出错
错误提示'表2'附近语法错误

解决方案 »

  1.   

    补充下: TForm1.DataChange改为TForm1.xxxDataChange
      

  2.   

    dbgrid1 dataset为ADODataSet1
    dbgrid2 dataset为ADODataSet2procedure TForm1.DBGrid1CellClick(Column: TColumn);
    begin
      if self.ADODataSet1.IsEmpty then exit;
      self.ADODataSet2.Close;
      self.ADODataSet2.CommandText:='select * from table2 where xxx='+QuotedStr(self.ADODataSet1.fieldByName('xxx').AsString);
      self.ADODataSet2.Open;
    end;
      

  3.   

    SQL.Add('select * from '''+tablename2+''' where 编号='''+(Query1 as TADOQuery).fieldbyname('编号').AsString+'''');
    注意SQL.Add('select * from '+tablename2+' where 编号='''+(Query1 as TADOQuery).fieldbyname('编号').AsString+'''');
    table name 不能加引号
      

  4.   

    你的方法我去试下
    self.ADODataSet1.IsEmpty then exit我刚才没加,补充下:tablename2不是数据库中表的名字,而是String,其内容为表的名字
      

  5.   

    就是这个意思如果按照你的写法解析后select语句是这样的select * from 'tablename'这样显然是不对了,pascal总两个单引号将被转义成一个单引号
      

  6.   

    select * from '''+tablename2+''' 
    tablename2去掉引号