如何循环删除记录?

AJPerez

我正在编写一个业务服务,该业务需要迭代BC中的所有记录,并删除其中的一些记录:

bc.ExecuteQuery(ForwardBackward);
var isRecord = bc.FirstRecord();
while (isRecord) {
  if (...) {
    bc.DeleteRecord();
  }
  isRecord = bc.NextRecord();
}

但是,DeleteRecord将光标移动到下一个,所以我将为每个要删除的记录跳过一条记录,这不是我想要的。有没有什么标准- ISH解决这个办法吗?

我想我可以做两个循环,一个循环用于检查,另一个循环用于删除...虽然可以,但是在记录上重复两次是很愚蠢的,必须有一个比这更好的方法:

bc.ExecuteQuery(ForwardBackward);
var isRecord = bc.FirstRecord();
var list = [];
while (isRecord) {
  if (...) {
    list.push(bc.GetFieldValue("Id"));
  }
  isRecord = bc.NextRecord();
}

bc.ClearToQuery();
bc.SetSearchSpec("Id", "='" + list.join("' OR ='") + "'");  // "='1-ABCD' OR ='1-1234'"
bc.ExecuteQuery(ForwardBackward);
while (bc.FirstRecord()) {
  bc.DeleteRecord();
}
尤金·沙蒂洛(Eugene Shatilo)

解决方案将直接取决于您的if(...)条件:

  • 如果这是一个简单的条件,可以转换为搜索表达式,则只需进行查询并删除找到的所有内容即可。

  • 如果它是一个复杂的条件,无法实现为searchspec,则可以通过两种方式来做到这一点(两者都有其自身的缺点):a)使用DeleteRecord和PreviousRecord的笨拙组合。b)创建第二个方法,该方法将删除单个记录,并为每个满足条件的记录调用它,类似这样

    function deleteRecord(sId:chars) {
      ...
      bc.SetSearchSpec("Id", sId);
      bc.ExecuteQuery(ForwardOnly);
      if (bc.FirstRecord()) {
        bc.DeleteRecord();
      }
    }
    ... 
    bc.ExecuteQuery(ForwardBackward);
    var isRecord = bc.FirstRecord();
    while (isRecord) {
      if (...) {
        deleteRecord(bc.GetFieldValue("Id"));
      }
      isRecord = bc.NextRecord();
    }
    ...
    

您的解决方案可以是and选项c),但是当ID列表太大时将无法使用,因为这样的查询将导致庞大的SQL语句,并且数据库对SQL查询的大小有一些限制(并且DBA不会很乐意请参阅日志中的此类查询)。

我更喜欢选项b)。您可以通过在主函数中创建相同BC的第二个实例,然后将其传递给deleteRecord函数来对其进行优化。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用循环删除特定记录的所有关联记录?(不使用依赖)

来自分类Dev

如何删除孤立记录?

来自分类Dev

如何删除“子”记录?

来自分类Dev

如何删除纱线记录

来自分类Dev

如何删除孤立记录

来自分类Dev

如何删除“子”记录?

来自分类Dev

如何删除重复的记录?

来自分类Dev

在一个循环SQL删除记录

来自分类Dev

使用循环从数组中删除nTh记录

来自分类Dev

如何使用VBA循环从多个表中删除所有记录?Access 2010

来自分类Dev

当我循环遍历 php 中的记录时,如何计算删除的行数

来自分类Dev

如何删除嵌套的循环?

来自分类Dev

雪花,如何删除拼合记录?

来自分类Dev

如何从TDBAdvGrid删除选定的记录?

来自分类Dev

如何删除Cassandra中的记录?

来自分类Dev

如何通过加入删除记录

来自分类Dev

如何防止用户删除记录

来自分类Dev

如何通过 OID 删除记录?

来自分类Dev

如何使用 IN 子句删除记录

来自分类Dev

如何获取删除记录的用户?

来自分类Dev

如何删除记录,子记录和孙子记录?

来自分类Dev

我如何循环并打印以记录 javascript 中循环内的循环

来自分类Dev

如何删除for循环中的标签

来自分类Dev

如何使用ZoneMinder循环记录x天?

来自分类Dev

如何使用ZoneMinder循环记录x天?

来自分类Dev

如何在循环中追加记录?

来自分类Dev

使用foreach循环在laravel中删除多个记录

来自分类Dev

如何从循环中的子记录访问直接父记录?

来自分类Dev

如何删除重复记录并保留最新记录?