【问题标题】:TADOTable - how to count specific records at once?TADOTable - 如何一次计算特定记录?
【发布时间】:2014-09-19 20:37:51
【问题描述】:

我的数据库表(客户)有一个字段“活动”(是否)。我正在使用 TADOTable 来处理这个表,我想在我的应用程序的状态栏中有一个统计数据,说明有多少客户是活跃的,有多少是不活跃的。如果我当前的客户是活跃的,我总是可以通过写这个来阅读:

bool isActive = CustomerADOTable->FieldByName("Active")->AsBoolean;

但是,如何一次检查所有记录?还是仅仅因为这个,我真的需要使用 TADOQuery 和 sql 语句?

【问题讨论】:

    标签: database delphi ado c++builder vcl


    【解决方案1】:

    您要么必须运行查询,要么遍历表中的所有记录并计算有多少 Active 设置为 true。

    除非您的记录很少,否则查询将明显加快。查询是正确的方法(tm)。它的扩展性会更好。

    【讨论】:

    • 我希望避免两者。但我认为如果没有其他方法,查询将是我的选择。
    【解决方案2】:

    为避免循环和自己的查询,您可以使用 Filter 属性。

    begin
      Showmessage(IntToStr(DS.RecordCount));
      DS.Filter := 'Active=true';
      DS.Filtered := true;
      Showmessage(IntToStr(DS.RecordCount));
      DS.Filtered := false;
    end;
    

    【讨论】:

    • 我觉得我应该删除我的答案......这是错误的。确认?
    • 不幸的是,我在浏览记录时已经使用了主动过滤器,这会搞砸。我需要的是计算 DataSource::OnDataChange 事件中的记录。实际上,我会看看是否可以将 TADOTable::AfterPost 事件与 SQL 语句一起使用。
    • @LynnCrumbling 你的回答应该有什么问题,我们只是在收集可能性。
    猜你喜欢
    • 2019-08-29
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多