如何获得 TQuery en Delphi 的结果?
Posted
技术标签:
【中文标题】如何获得 TQuery en Delphi 的结果?【英文标题】:How to get results of a TQuery en Delphi? 【发布时间】:2016-04-21 13:16:32 【问题描述】:数据库
当我在数据库中运行以下查询时:
选择 T.ID 来自 TABLA T 其中 ID=3结果:
没有返回行
现在我尝试在 Delphi 中显示消息说“记录不存在”。
在表单中我有一个组件 TQuery 调用 qValidacion 成功连接数据库 Oracle 11g。
试试 1
过程 TfPrueba.ButtonAceptarClick(Sender: TObject); 开始 qValidacion.关闭; qValidacion.SQL.Add('SELECT T.ID'); qValidacion.SQL.Add('FROM TABLA T'); qValidacion.SQL.Add('WHERE ID=3'); qValidacion.打开; qValidacion.First; 如果(不是 qValidacion.Eof)那么 开始 ShowMessage('记录不存在'); //它应该显示消息,但不显示 结尾; qValidacion.SQL.清除; 结尾;【问题讨论】:
我不关注。您有一个不返回任何行的查询。你到底在问什么? 您是否检查过以确保TABLA
中至少有一行包含ID = 3
?
你已经写了if (not qValidacion.Eof)...
- 你想检查你是否在Eof
,而不是如果你不在 Eof
。然而,检查这一点的惯用方法是检查qValidacion.RecordCount = 0
。
qValidacion.SQL.Add('SELECT T.ID');
- 坏主意 - 可能已经有东西了!要么在第一行之前拨打SQL.Clear
,要么直接拨打SQL.Text := ' SELECT ... WHERE T.ID=3';
@J... - 并将所有数据下载到客户端,也许是所有表,然后内存溢出?惯用的方法是调用if qValidation.IsEmpty then ...
【参考方案1】:
如果您想检查它们是否是查询中的任何记录,请不要使用 qValidacion.EOF 而是使用 qValidacion.IsEmpty
if (qValidacion.IsEmpty) then
begin
ShowMessage('The record not exist');
end;
EOF 函数用于在到达数据集末尾时返回 true。示例:
qValidacion.First;
while not qValidacion.eof do
begin
// do Something with the current record.
qValidacion.next
end;
Edit1:使用 IsEmpty 确实更干净。感谢 Arioch 'The
【讨论】:
RecordCount
对于 SQL 来说是个坏主意。如果有足够的内存,它要么不会被实现并返回 -1,要么会被实现并将所有数据从服务器复制到客户端。一个人必须打电话给TDataSet.IsEmpty
它有效,但使用“if (qValidacion.RecordCount = 0) then”以上是关于如何获得 TQuery en Delphi 的结果?的主要内容,如果未能解决你的问题,请参考以下文章