作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我的 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;
上面的代码工作正常,并从表 city 中加载字段名称的内容。然而,
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 子句时,查询没有返回任何内容!谁能指出我的代码有什么问题?
这是我表中数据的图像:
最佳答案
您可能没有任何包含 kabol
的 district
的数据。添加 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
,但第二个会不是。)
关于database - 当我添加 WHERE 子句时,为什么我的查询没有返回任何结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16614471/
我是一名优秀的程序员,十分优秀!