如何获得 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 的结果?的主要内容,如果未能解决你的问题,请参考以下文章

vbscript 选择en Tquery

delphi 调用exe文件后怎么获得执行结果

DELPHI基础教程:数据访问部件的应用及编程(一)[1]

模拟tquery封装选择器

delphi 如何获取执行sql返回的结果

delphi 管道执行dos获得返回memo中的问题