【问题标题】:Cant add fields to ADO recordset - this operation is not allowed in this context无法将字段添加到 ADO 记录集 - 此上下文中不允许此操作
【发布时间】:2019-10-19 18:30:56
【问题描述】:

我需要从 oracle 服务器向现有 ADO 记录集添加字段。这是我尝试过的代码,但我得到了错误

在此上下文中不允许操作

With ADORec
Set .ActiveConnection = ADOConn
.Source = SQL
.LockType = adLockOptimistic
.CursorType = adOpenKeyset
.CursorLocation = adUseClient
.Open
End With
ADORec.AddNew
ADORec.Fields.Append "calcField", adInteger, , adFldUpdatable

SQL 获取 ID 列表。

如何在我的记录集中获得一个额外的列,以便在 vba 中运行计算?

或者: 首先,您对这个问题的处理方法是什么?

【问题讨论】:

  • 您不能只将字段添加到记录集中。如果您想要另一种方法,请从 why 您要添加字段开始。您想更改表格、在表单上显示计算结果还是完全其他内容?
  • 我想根据记录集进行计算。最后,我从记录集中得到的数据和我计算的值需要以拆分的形式显示。这就是为什么我试图将所有内容压缩到一个记录集中,以便我可以在我的表单中使用此记录集中的所有现有字段。
  • 你不能在 SQL 语句中添加一个虚拟字段吗? Select ID, 0 as dummy from MyTable
  • @FunThomas 如果您想在字段中存储数据,请不要这样做。虚拟字段不可更新,仅包含静态值。
  • 可能是可能的,但我目前无法访问 SQL 来测试它。如果连接关闭,则记录集将被断开。因此,通过使用虚拟字段(@Fun Thomas)打开它然后断开连接,我认为可能有一种方法可以使其可更新。

标签: vba oracle ms-access adodb


【解决方案1】:

您很少(= 几乎从不)向 ​​ADODB 记录集添加字段。

默认情况下,ADODB 记录集绑定到它来自的表,并且对其进行更改应该更改该表。这显然也不是你的意图。虽然您可以切断连接或将设计和数据复制到未链接的记录集,但这往往会导致麻烦。

另外,.AddNew 指的是添加新记录,而不是新字段。

如果要在表单中显示计算结果,请在控制源中进行计算。拆分形式允许这样做。

只需添加一个控件来包含您的计算结果,并将控件源设置为等于=MyFunctionToDoCalculation(InpArguments)

不过,一般来说,出于性能和可靠性的原因,如果可以的话,请在 SQL 中进行计算。

如果您想执行多行计算(例如移动平均线),请发表评论,我将分享一个更复杂的方法,它也有更多的副作用(例如排序/过滤/刷新时的错误)。

【讨论】:

  • 通过自定义函数随时随地计算字段的想法对我来说效果很好!谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-03
  • 1970-01-01
  • 1970-01-01
  • 2021-04-13
相关资源
最近更新 更多