我的Delphi应用程序已成功连接到SQLite。
procedure TForm1.Button1Click(Sender: TObject);
begin
ZQuery1.Close;
ZQuery1.SQL.Clear;
ZQuery1.SQL.Text := 'SELECT Name FROM city;';
ZQuery1.Open;
while not ZQuery1.EOF do
begin
Memo1.Lines.Add(ZQuery1.FieldValues['name']);
ZQuery1.Next;
end;
end;
上面的代码工作正常,并从表格城市加载字段名称的内容。 然而,
procedure TForm1.Button1Click(Sender: TObject);
begin
ZQuery1.Close;
ZQuery1.SQL.Clear;
ZQuery1.SQL.Text := 'Select name from city WHERE district = :aField';
ZQuery1.Params.ParamByName('aField').Value := 'kabol';
ZQuery1.Open;
while not ZQuery1.EOF do
begin
Memo1.Lines.Add(ZQuery1.FieldValues['name']);
ZQuery1.Next;
end;
end;
令人惊讶的是,当我添加一个where子句时,查询什么都不返回!任何人都可以建议我的代码有什么问题吗?
这是我表中数据的图像:
答案 0 :(得分:4)
您可能没有district
kabol
的任何数据。添加WHERE
子句将导致不返回任何行,这意味着ZQuery1.Eof
立即为真,并且永远不会输入您的while not ZQuery1.Eof do
循环。
您可以通过将第一个查询(有效的查询)更改为以下内容来检查:
ZQuery1.SQL.Text := 'SELECT Name, District FROM City';
然后将输出更改为
Memo1.Lines.Add(ZQuery1.FieldValues['name'] + #9 +
ZQuery1.FieldValues['district']);
如果在最右边的列中没有在备忘录中看到包含kabol
的至少一行,则表示您没有符合WHERE
条件的行。 (请注意,大多数数据库都区分大小写,因此kabol
不等于Kabol
;第一个数据库与WHERE
匹配,但第二个数据库不匹配。)
答案 1 :(得分:1)
您的屏幕截图显示district
为'Kabol'
(大写K)的一个数据库行,但您的SQL查询正在查找'kabol'
(小写k)。假设查询以区分大小写的方式比较strins,这可以解释为什么没有找到行。因此,要么在查询输入中修复大小写,要么改为执行不区分大小写的查询。