运行查询并将结果显示在TEdit中

时间:2012-11-03 07:58:39

标签: sql delphi delphi-xe3

我有一个TComboBox,其中包含从我的数据库中收集的名称列表。它旁边是TEdit,我打算将其用于显示与每个人相关联的ID号。

由于firstName和lastName是表中的单独字段,但在TCombobox中一起显示,我写了一小段将firstName和lastName分成两个独立的变量:

 pos := AnsiPos(' ', cbStudents.Text); 
 firstName := Copy(cbStudents.Text, 0, pos-1);
 lastName := Copy(cbStudents.Text, pos+1, Length(cbStudents.Text));

然后我执行SQL代码:

  try
    query.Open;
    query.SQL.Add('Select studentID');
    query.SQL.Add('From student');
    query.SQL.Add('Where firstName = ' + StrToQuote(firstName));
    query.SQL.Add('And lastName = ' + StrToQuote(lastName));
    editID.Text := query
  finally
    query.Free;
  end;

注意:StrToQuote用双引号(“”)封装变量firstName和lastName

我收到的错误是:

参数超出范围

我做错了什么?谢谢你的帮助。

2 个答案:

答案 0 :(得分:5)

您的代码无法使用。它首先打开查询,然后设置SQL查询字符串。而不是

   try
     query.Open;
     query.SQL.Add('Select studentID');
     query.SQL.Add('From student');
     query.SQL.Add('Where firstName = ' + StrToQuote(firstName));
     query.SQL.Add('And lastName = ' + StrToQuote(lastName));
   finally
     query.Free;
   end;

使用

  // create or reset query here
  query := ...

  try

    query.SQL.Add('SELECT studentID');
    query.SQL.Add('FROM student');
    query.SQL.Add('WHERE firstName = :firstname');
    query.SQL.Add('AND lastName = :lastName');

    // set parameter values here

    query.Open;

    // now transfer data from fields to the user interface (TEdit)

  finally
    query.Free;
  end;

答案 1 :(得分:3)

你的方法不适合我(拆分显示的名称),但你的问题是在释放查询后访问query.Fields [0] .AsString。