我有一个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
我收到的错误是:
参数超出范围
我做错了什么?谢谢你的帮助。
答案 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。