ADODB 记录集不会在 MS SQL 的临时表中添加新记录

Posted

技术标签:

【中文标题】ADODB 记录集不会在 MS SQL 的临时表中添加新记录【英文标题】:ADODB Recordset Does Not Add New Records In Temporary Table in MS SQL 【发布时间】:2018-08-15 09:07:18 【问题描述】:

我想创建一个包含两个字段“ID”和“TempData”的临时表。然后想通过循环将数据从excel表中插入到该表中。我创建了临时表,但是当我尝试将数据添加到该表中时,它失败了。有谁知道将 excel 列值移动到临时表而不循环? 谁能帮忙。

Sub MPNTEST()

Dim dbCon As ADODB.Connection, dbt As ADODB.Recordset, dbtf As ADODB.Field, r As Range, SqlQry1 As String
Set dbCon = New ADODB.Connection
Set dbt = New ADODB.Recordset
dbCon.ConnectionString = SqlConStr
On Error GoTo CloseConnection

SqlQry1 = "Use tempdb CREATE TABLE #TempTbl ( ID INT Primary KEY IDENTITY(1,1),TempData NVARCHAR(255))"

dbCon.Open   
dbCon.Execute (SqlQry1)

With dbt
    .ActiveConnection = dbCon
    .Source = "#TempTbl"
    .LockType = adLockOptimistic
    .CursorType = adOpenForwardOnly
    .Open
    For Each r In ActiveSheet.Range("AE2:AE10")
        .AddNew
        .Fields("TempData").Value = r.Value
        .Update                                               '###Here it fails
    Next r
End With
dbt.Close    
dbCon.Close

End Sub

【问题讨论】:

以什么方式失败?如果它似乎没有任何记录,请说明您是如何观察到这一点的。你试过普通桌子吗? @Nick.McDermaid 我无法使用记录集方法添加记录。从 excel 列循环到 sql 中的临时表。但是,如果我编写 Insert Into 查询,那么它可以工作,但不能通过循环。 我认为你应该测试 r.Value 是否不是 Nothing,如果 Nothing 你应该输入 DBNull.Value 不起作用?不能?这些话在解决问题上的用处为零。你怎么“不能”?你有错误吗?如果您没有收到错误,您如何观察到没有插入任何记录。您尚未描述症状。 Here it failed 在您的代码中是什么意思?有错误吗? 【参考方案1】:

希望这个帮助(我没有测试过:

Sub MPNTEST()

Dim dbCon As ADODB.Connection, dbt As ADODB.Recordset
Dim dbtf As ADODB.Field, r As Range, SqlQry1 As String
Dim SQLInsert$

Set dbCon = New ADODB.Connection
'Set dbt = New ADODB.Recordset

dbCon.ConnectionString = SqlConStr

On Error GoTo CloseConnection

''create table db..table
SqlQry1 = "CREATE TABLE tempdb..#TempTbl ( ID INT Primary KEY IDENTITY(1,1),TempData NVARCHAR(255))"

dbCon.Open   
dbCon.Execute (SqlQry1)
dbCon.Execute "use tempdb" ' Move to tempdb

With dbt

    For Each r In ActiveSheet.Range("AE2:AE10")
        SQLInsert = "Insert into #TempTbl(TempData) values('" & Replace(""& r.Value, "'", "''") &"')"
        dbCon.Execute (SQLInsert)
    Next r
End With
'dbt.Close    
dbCon.Close

End Sub

【讨论】:

感谢您的帮助。出现错误“无法更新查询,因为 FROM 子句不是一个简单的表名。” 我再次编辑代码,我没有你的真实环境,它只是一个原型。请测试。希望它工作正常。 万岁!它的工作。什么是 Dim SQLInsert$ 以及它是如何工作的,以便我理解。不过,我非常感谢您的帮助。 我在这里找到了声明:bettersolutions.com/vba/variables/abbreviations.htm

以上是关于ADODB 记录集不会在 MS SQL 的临时表中添加新记录的主要内容,如果未能解决你的问题,请参考以下文章

带有 ADODB 记录集的 MS Access ListBox 列属性创建错误 424 需要对象

使用 ADODB 记录集执行联合更新​​查询

在 VBA 中对断开连接的 ADODB 记录集应用过滤器

Excel VBA - 搜索范围和连接的 SQL ADODB 记录集以在列中匹配写入结果集

adodb updateBatch 存储不正确的信息

将 Access 报表的记录源设置为 ADODB 记录集