0

我有一个FilesToCopy包含文件名列表的表 ( )。

ID 文件名
1 c:\temp\file1.txt
2 c:\temp\file2.txt
3 c:\temp\file2.txt

文件一个接一个地被复制到另一个位置(例如c:\test)。我可以很容易地遍历这个表来为每个文件执行一个复制命令。这只是一个读取表的执行 SQL 任务,将结果放入对象变量中,然后是 For Each 容器。

但是,如果在 for each 循环的执行过程中,记录被添加到表中FilesToCopy呢?

想象一下,在 for each 循环中,文件 c:\temp\file99.txt 被添加到表中FilesToCopy

ID 文件名
1 c:\temp\file1.txt
2 c:\temp\file2.txt
3 c:\temp\file2.txt
99 c:\temp\file99.txt

我能否以某种方式告诉 for each 循环它还必须复制文件 c:\temp\file99.txt,即使该文件在循环开始时不存在?

所以效果会是:

  1. 读取表FilesToCopy,开始循环。
  2. c:\temp\file1.txt被复制到c:\test
  3. c:\temp\file1.txt从表中删除记录 FilesToCopy
  4. c:\temp\file2.txt被复制到c:\test
  5. c:\temp\file2.txt从表中删除记录 FilesToCopy
  6. 同时c:\temp\file99.txt被添加到表中FilesToCopy
  7. c:\temp\file3.txt被复制到c:\test
  8. c:\temp\file3.txt从表中删除记录 FilesToCopy
  9. c:\temp\file99.txt被复制到c:\test
  10. c:\temp\file99.txt从表中删除记录 FilesToCopy
  11. 当表中没有更多记录时循环结束FilesToCopy

所以我想做的是以某种方式刷新在循环开始时馈送到循环的列表。

我希望这很清楚。

4

1 回答 1

1

我会改用 do while 循环。

有一个名为 moreToProcess 数据类型 boolean 的变量。

使用基于 count > 0 的执行 SQL 语句设置进入循环前的值

循环的第一步是使用 exec SQL 获取要处理的记录。

在退出循环之前重新运行 SQL 以重置变量。

当 moreToProcess 为真时设置为循环。

于 2021-09-07T14:02:16.893 回答