类似这样的查询:select * from tablename where 字段1=某值;其中tablename是变量,它的值由另一个变量传导给它,在delphi中怎么实现这样的查询?求详细解答!!

解决方案 »

  1.   


    procedure get(TableName: string);
    var
      ASQL: string;
    begin
      ASQL := 'select * ';
      ASQL := ASQL + ' from '+ TableName;
      ASQL := ASQL + ' where 字段1=某值';
      with adoquery1 do
      begin
        close;
        sql.Clear;
        sql.text := ASQL;
        Open;
      end;
    end;
      

  2.   


    --当然也可以:
    procedure get(TableName: string);
    begin
      with adoquery1 do
      begin
        close;
        sql.Clear;
        sql.text := 'Select * From '+TabneName+' Where 字段1=某值';
        Open;
      end;
    end;
      

  3.   

    如果where后面也有变量怎么办呢?
    我这样写
    SQL.Add('select * from '+TabneName+' where 字段1=:a');
    Parameters.ParamByName('a').Value :=  trim(Edit1.Text);
    报错,说找不到变量a,到底错在哪里,应该怎么写?
    btw:这么写以后,造成这一段使dbgrideh中字段自动调整宽度的代码失效,怎么回事?-----------------------代码---------------------------
    unction DBGridRecordSize(mColumn: TColumn): Boolean;
    { 返回记录数据网格列显示最大宽度是否成功 }
    begin
      Result := False;
      if not Assigned(mColumn.Field) then Exit;
      mColumn.Field.Tag := Max(mColumn.Field.Tag,
        TDBGrid(mColumn.Grid).Canvas.TextWidth(mColumn.Field.DisplayText));
      Result := True;
    end;function DBGridAutoSize(mDBGrid: TDBGridEh; mOffset: Integer = 5): Boolean;
    { 返回数据网格自动适应宽度是否成功 }
    var
      I: Integer;
    begin
      Result := False;
      if not Assigned(mDBGrid) then Exit;
      if not Assigned(mDBGrid.DataSource) then Exit;
      if not Assigned(mDBGrid.DataSource.DataSet) then Exit;
      if not mDBGrid.DataSource.DataSet.Active then Exit;
      for I := 0 to mDBGrid.Columns.Count - 1 do begin
        if not mDBGrid.Columns[I].Visible then Continue;
        if Assigned(mDBGrid.Columns[I].Field) then
          mDBGrid.Columns[I].Width := Max(mDBGrid.Columns[I].Field.Tag,
            mDBGrid.Canvas.TextWidth(mDBGrid.Columns[I].Title.Caption)) + mOffset
        else mDBGrid.Columns[I].Width :=
          mDBGrid.Canvas.TextWidth(mDBGrid.Columns[I].Title.Caption) + mOffset;
        mDBGrid.Refresh;
      end;
      Result := True;
    end;procedure Tbyname_query.DBGridEh1DrawColumnCell(Sender: TObject; const Rect: TRect;DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
      DBGridRecordSize(Column);
    end;
    ----------------------------------------------------------------------
      

  4.   

    何必分开写:SQL.Add('select * from '+TabneName+' where 字段1='''+trim(Edit1.Text)+''''); 
      

  5.   


    var
    sqlStr,tablename:string;
    begin
     tablename:=Edit1.Text;
     sqlStr:='select * from '+tablename+' where 字段1='''+Trim(Edit2.Text)+''''
     ...
    end;