我试图找出数据库中是否存在一条记录,我运行一个查询select
,我想得到结果,但我仍然无法得到它......
数据库
通过直接在数据库上执行以下查询:
SELECT T.ID
FROM TABLA T
WHERE ID=3
获得:
No rows returned
现在我尝试在 Delphi 中显示一条消息,说明该记录不存在。
在表单中,我有一个TQuery
名为qValidacion
成功连接到 Oracle 11g 数据库的类型组件。
尝试 1
procedure TfPrueba.ButtonAceptarClick(Sender: TObject);
begin
qValidacion.Close;
qValidacion.SQL.Add('SELECT T.ID');
qValidacion.SQL.Add('FROM TABLA T');
qValidacion.SQL.Add('WHERE ID=3');
qValidacion.Open;
qValidacion.First;
if qValidacion.IsEmpty then //No se como validar si el Select regresa algo, IsEmpty me muestra los registros existentes
begin
ShowMessage('El registro No Existe');
end;
qValidacion.SQL.Clear;
end;
尝试 2
procedure TfPrueba.ButtonAceptarClick(Sender: TObject);
begin
qValidacion.Close;
qValidacion.SQL.Add('SELECT T.ID');
qValidacion.SQL.Add('FROM TABLA T');
qValidacion.SQL.Add('WHERE ID=3');
qValidacion.Open;
qValidacion.First;
if (not qValidacion.Eof) then
begin
ShowMessage('El registro No Existe'); //deberia mostrar el mensaje, pero no lo muestra
end;
qValidacion.SQL.Clear;
end;
IsEmpty
如果数据集为空,则 TDataSet 属性返回 true 。一般来说,对于任何 TDataSet 后代组件,这应该可以工作:
现在,
TQuery
它是一个组件,它是 Delphi 附带的第一个标准套接字层的一部分,称为Borland 数据库引擎(BDE),多年前它已被标记为已弃用。BDE oracle 驱动程序很可能有问题(或者总是有问题,我不记得了),并且正在获取包含所有字段的行null
(我记得在某些时候看到过 Firebird 的这种行为。你可以做两件事:
使用 BDE 和返回空值行的驱动程序
如果是这种情况,请检查检索到的值是否不为空,例如,这将适用于您提出的特定情况:
请注意,此解决方案不能一概而论,因为可能存在从数据库中确实
null
存在的行中检索值的情况,因此另一种选择是对记录进行计数,例如:移动到现代数据库连接层
这是真正的答案。即使您使用的是旧版本的 Delphi,例如 Delphi 7,您仍然可以使用DBExpress,或者理想情况下,如果您有现代版本的 Delphi,目前的建议是使用FireDac
另一件应该起作用的事情是这样的:
但是您提到的IsEmpty也应该有效。试试看你是否有更多的运气。
一切顺利。
我有一个类似的问题......这是我的代码:
但这不起作用,也就是说,当数据存在时它告诉我它不存在,反之亦然......
我该如何解决?