【问题标题】:Delphi, ADO, MySQL: checking whether an empty set was returnedDelphi、ADO、MySQL:检查是否返回空集
【发布时间】:2013-04-09 16:20:06
【问题描述】:

Delphi 的版本是 7。

我正在向 MySQL 数据库发送查询。可以返回的是一组数据行或只是一个空集。没有什么不寻常的。但是我不知道如何建立一个检查机制来检查它是一组数据还是一个空集。

这里有一些代码:

var
    Q: TADOQuery;
begin
    Q := TADOQuery.Create(self);
    Q.Connection := ADOConnection;

    Q.SQL.Add('CALL get_shopping_cart_list()'); // Call stored procedure
    Q.Open;                                     // Send query and get some
                                                // results back
    // PSEUDOCODE
    // IF get_shopping_cart_list() RETURNS A NON-EMPY SET THEN
    //     SHOW WHAT WE HAVE
    // ELSE
    //     SHOW A MESSAGE THAT SAYS 'EMPTY SET'

    Q.Free;
end;

【问题讨论】:

    标签: mysql delphi ado


    【解决方案1】:

    根据 Delphi 版本,它可以是任一

     if Q.IsEmpty then ...
    

     if Q.BOF and Q.EOF then ...
    

    您还可以深入了解 Microsoft ADO。只要您的查询中没有多个语句,Q.RecordSet.EOFQ.RecordSet.BOF 就应该这样做。


    另外请不要忘记保护内存管理的错误。

     Q := TADOQuery.Create;
     try
        .... do this or that ....
        .... do this or that ....
        .... do this or that ....
     finally
        Q.free;
     end;
    

    【讨论】:

    • @SirRufo 否。ADO 声称它可能只返回 -1。这也是SP。要计算单向游标中的所有记录,您必须实际获取它们,通过网络,然后缓存在客户端的 RAM 中。我想服务器和客户端都有更好的事情要做。使用 RecordCount 是人们从 DBF/CSV/Paradox 迁移到 SQL 的一个常见话题,但这对于任何 DB 访问库(包括 OLE DB)通常都是一个不好的建议。 msdn.microsoft.com/ru-RU/library/windows/desktop/ms676701.aspx
    • 听起来像条件​​ Q.RecordCount > 0 就可以了。你怎么看?
    • IsEmpty 听起来是迄今为止最好的方法。
    • @Mikhail 正如我在上面所说的,RecordCount 在 SQL 中是非常糟糕的习惯。但是,如果您需要用缓慢且不可靠的整数函数调用替换一个布尔函数调用,并且您可能只是错误输入错误的比较,例如 RecordCount >= 0RecordCount > i0 或您可能会犯的任何随机错误......好吧,至少以后很容易修复以发布下一个版本:-D
    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 2011-08-22
    • 2021-02-03
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    相关资源
    最近更新 更多