从 Excel 文件查询更新

Posted

技术标签:

【中文标题】从 Excel 文件查询更新【英文标题】:Query update from an Excel File 【发布时间】:2017-10-05 12:57:04 【问题描述】:

我有一个 Excel 文件,其中包含我必须导入到我创建的 Access db 中的数据列表。在数据库中,我有一个名为“描述”的列。当描述比单元格长时,可能会发生我必须更新我的字段,但我不知道如何正确编写查询的情况。

在我的 Excel 文件中,描述从 C 列开始,所以当我想提取字符串时,我会编写如下代码行:

cap.Description = grid(r, 3).Text

我尝试编写更新查询,但它不起作用,因为 VS 向我显示此消息:“附加信息没有为一个或多个必需参数提供值”。

Public Sub updateDB(ByVal PathDB As String)
Dim db As New cDB
Dim v As New cVoice

Dim rs As ADODB.Recordset = db.RecordSet
db.connect_DB(PathDB)
db.get_rs("UPDATE Voice SET Description = @v.Description")

db.close_DB()
End Sub

Public Function get_rs(ByVal query As String) As ADODB.Recordset

    If db Is Nothing Then rs = Nothing : Return rs

    rs = New ADODB.Recordset
    rs.CursorType = ADODB.CursorTypeEnum.adOpenStatic
    rs.LockType = ADODB.LockTypeEnum.adLockOptimistic

    rs.Open(query, db)

    Return rs

End Function

 Public Function connect_DB() As ADODB.Connection

    If Not My.Computer.FileSystem.FileExists(pPathDB) Then db = Nothing : Return db

    db = New ADODB.Connection
    db.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & pPathDB & ";Persist Security Info=False"
    db.Open()

    If db.State = ConnectionState.Closed Then db = Nothing

    Return db

End Function

然后我愚蠢地尝试将Description = @v.Description 切换为Description = grid(r, 3).Text,但显然这种方式行不通。 那么,如何表达我必须在 Excel 中使用 C 单元格更新我的 db 列?

【问题讨论】:

需要给参数赋值:docs.microsoft.com/en-us/sql/ado/reference/ado-api/… 这似乎不是有效的 VBA 代码。例如,您不能像在Dim rs As ADODB.Recordset = db.RecordSet 中那样在声明中分配某些内容。此外,很多set 命令丢失 @FunThomas 我写了其他简单的查询,程序运行正常 【参考方案1】:

尝试将查询设为:

 db.get_rs("UPDATE Voice SET Description  = '" + v.Description +"'")

由于此错误意味着此处提到的值或缺失值的拼写错误:no value given for one or more required parameters

【讨论】:

以上是关于从 Excel 文件查询更新的主要内容,如果未能解决你的问题,请参考以下文章

VBA Excel - 访问查询不可更新

VBA Excel ADO SQL 更新查询不起作用

使用oledb读写excel出现“操作必须使用一个可更新的查询”的解决办法

从 Excel 文件更新 SQL Server 表

使用 vb.net 从 excel 文件更新 SQL 表

VBA - 从 Excel 更新 Access 文件的链接表