如何手动将新记录正确添加到空记录集中?

Posted

技术标签:

【中文标题】如何手动将新记录正确添加到空记录集中?【英文标题】:How to properly add new records to empty recordset manually? 【发布时间】:2011-01-18 15:11:06 【问题描述】:

如何手动将新记录添加到新的空 ADODB.Recordset?

现在,我正在做的事情不起作用:

Dim rs as ADODB.Recordset
rs.Open
Dim Fields() as String
Fields(0) = "SomeFieldName"

Dim Values() as String
Value(0) = "SomeValue"

rs.AddNew Fields, Values

【问题讨论】:

【参考方案1】:

就地:

rs.AddNew "SomeFieldName", "SomeValue"

或就地多个字段

rs.AddNew Array("SomeFieldName", "AnotherFieldName"), Array("SomeValue", 1234)

或者使用单独的变量

Dim Fields As Variant
Dim Values As Variant

Fields = Array("SomeFieldName")
Values = Array("SomeValue")
rs.AddNew Fields, Values

编辑:这是为上面的 AddNew 示例合成记录集的方法

Set rs = new Recordset
rs.Fields.Append "SomeFieldName", adVarChar, 1000, adFldIsNullable
rs.Fields.Append "AnotherFieldName", adInteger, , adFldIsNullable
rs.Open

我通常使用辅助函数 CreateRecordset,如 this answer 所示。

2018 年 11 月 12 日更新

您也可以像这样使用字段索引作为序数而不是字段名称作为字段数组的字符串

rs.AddNew Array(0, 1), Array("SomeValue", 1234)

【讨论】:

能否在 addnew() 调用之前包含记录集的声明和准备?我想确保我正在做所有需要做的事情,不多也不少。 在 AddNew 更新之后,在记录集上执行 SQL 语句的最佳方式是什么? @LoBellin 此合成客户端记录集未保存在 RDBMS 中。把它想象成一个美化的二维数组。由于没有 RDBMS,因此无法执行任何 SQL。【参考方案2】:
set rs = new ADODB.Recordset
rs.Open "Select SomeFieldName, AnotherFieldName FROM MyTable", myConnection, adOpenDynamic, adLockOptimistic

rs.AddNew
rs("SomeFieldName").Value = "SomeValue"
rs("AnotherFieldName").Value = 1
rs.Update

rs.AddNew
rs("SomeFieldName").Value = "AnotherValue"
rs("AnotherFieldName").Value = 2
rs.Update

rs.Close

【讨论】:

【参考方案3】:

使用打开的连接 Conn:

sSql="INSERT into mytable (somefieldname, anotherfieldname) values  ('Somevalue','Anothervalue')"
      Conn.Execute sSql

【讨论】:

以上是关于如何手动将新记录正确添加到空记录集中?的主要内容,如果未能解决你的问题,请参考以下文章

如何在临时表中添加Null Value记录?

Microsoft Access 无法添加不在记录集中的表的记录连接键

记录集到表?

Ms Access 比较两个记录集

将 HQL 与 MySQL 一起使用,如何在 group by 之前对结果集进行排序,以便选择正确的记录?

除了记录集之外,如何以编程方式将项目添加到 ms 访问列表/组合框