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;
--当然也可以: procedure get(TableName: string); begin with adoquery1 do begin close; sql.Clear; sql.text := 'Select * From '+TabneName+' Where 字段1=某值'; Open; end; end;
如果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; ----------------------------------------------------------------------
何必分开写:SQL.Add('select * from '+TabneName+' where 字段1='''+trim(Edit1.Text)+'''');
var sqlStr,tablename:string; begin tablename:=Edit1.Text; sqlStr:='select * from '+tablename+' where 字段1='''+Trim(Edit2.Text)+'''' ... end;
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;
--当然也可以:
procedure get(TableName: string);
begin
with adoquery1 do
begin
close;
sql.Clear;
sql.text := 'Select * From '+TabneName+' Where 字段1=某值';
Open;
end;
end;
我这样写
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;
----------------------------------------------------------------------
var
sqlStr,tablename:string;
begin
tablename:=Edit1.Text;
sqlStr:='select * from '+tablename+' where 字段1='''+Trim(Edit2.Text)+''''
...
end;