1

我有一个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

我收到的错误是:

参数超出范围

我究竟做错了什么?提前感谢您的帮助。

4

2 回答 2

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;
于 2012-11-03T08:55:10.467 回答
3

您的方法对我来说并不是最佳的(拆分显示名称),但您的问题是在释放查询后访问 query.Fields[0].AsString。

于 2012-11-03T08:07:36.600 回答