Delphi - 使用sql查询在数据库中搜索组合框

时间:2015-12-11 12:42:03

标签: sql delphi delphi-7

这是我在运行下面的代码时遇到的错误。我不太清楚任何帮助是否有误

procedure TFSearchMember.btnSearchClick(Sender: TObject);
var buttonSelected:integer;
WhereTextSelection,WhereFieldSelection:string;
begin

WhereFieldSelection:=cboWhereField.Text;
WhereTextSelection:=txtWhere.Text;

adoQuery1.Parameters[0].Value:=WhereTextSelection;
adoQuery1.Open;
ADOQuery1.Requery;

txtWhere.Text:='';
cboWhereField.Text:='';


  if ADOQuery1.RecordCount=0 then
  begin
    buttonSelected:=MessageDlg('Record not found.', mtError, [mbOK],0);
    if buttonSelected = mrOK then
    Exit;
  end;

我在ADOQuery SQL属性中也有这个

2 个答案:

答案 0 :(得分:1)

虽然您的问题没有说明,但我怀疑您是否尝试允许用户同时选择要在WHERE(来自cboWhereField)中使用的字段和值(来自txtWhere)。如果是这种情况,则必须先更新SQL,然后再分配参数,因为两者都在变化。

这样的事情应该有效(从基本的意义上说):

procedure TFSearchMember.btnSearchClick(Sender: TObject);
const
  SQLBase = 'SELECT * FROM tblMembers WHERE %s = :SearchValue';
begin
  if AdoQuery1.Active then
    AdoQuery1.Close;
  AdoQuery1.SQL.Text := Format(SQLBase, [cboWhereField.Text]);
  AdoQuery1.Parameters.ParamByName('SearchValue').Value := txtWhere.Text;
  AdoQuery1.Open;

  txtWhere.Text:='';
  cboWhereField.Text:='';

  if not ADOQuery1.IsEmpty then
  begin
    // No need for if test here, as you're only offering one value.
    // MessageDlg can't return anything other than mrOK
    MessageDlg('Record not found.', mtError, [mbOk], 0);
    Exit;
  end;

  // Your other code
end;

答案 1 :(得分:0)

我假设并非显示所有代码,因为您似乎尝试创建动态SQL,其中" WhereFieldSelection"可以更改为组合框中显示的任何内容。如果在设置参数值后更改ADOQuery的SQL.Text属性(例如,使用" Forename"),则参数值将丢失,您必须重置它。此外,正如肯·怀特所提到的那样,Requery不是必需的。