0

我想编写一个 sql 查询,它从 excel 表的单元格中获取输入。

例如,如果数据库中有 3 列,如 EmpID、EmpName、Salary、Address,我想连接 sql server 数据库并使用 excel 表中的按钮更新数据库。

我写了这样的代码

Dim rst As ADODB.Recordset
Dim Cnxn As ADODB.Connection
Dim strCnxn As String
Dim strSQL As String

' Open connection
Set Cnxn = New ADODB.Connection
strCnxn = "Provider=SQLOLEDB;" & _
          "Data Source=ABC\SQLEXPRESS;" & _
          "Initial Catalog=Trail;" & _
          "Integrated Security=SSPI;" & _
          "Application Name=MyExcelFile"

Cnxn.Open strCnxn
Set rst = New ADODB.Recordset
Dim Ename As Variant
Ename = Worksheets("DBSheet").Cells(2, 2).Value
Dim Eno As Variant
Eno = Int(Worksheets("DBSheet").Cells(2, 1).Value)
strSQL = "UPDATE Employee SET EmpName='Micro' WHERE EmpID=1"
rst.Open strSQL, Cnxn, adOpenDynamic, adLockOptimistic, adCmdText
Cnxn.Close
Set rst = Nothing
Set Cnxn = Nothing

在上面的代码中,我写了一个像 SET EmpName='Micro' WHERE EmpID=1 这样的更新查询,在这里我手动提到了 EmpName 和 EmpID,而不是我想用 Excel 表的单元格值填充更新查询,比如

strSQL = "UPDATE Employee SET EmpName=Worksheets("AB').Cells(2,2).Value WHERE EmpID=Worksheets("AB').Cells(2,1).Value"

但这不起作用,因为 EmpName 和 EmpID 值以“”(双引号)的格式出现在查询中,但 sqlquery 不接受该格式的任何内容,以便执行它应该以 ''(单引号)。

因此,如果有人知道如何将 excel 工作表的单元格值填充到 sql 查询中,请建议我如何做到这一点。

4

2 回答 2

2

使用此代码

strSQl="UPDATE Employee SET EmpName='" & sheets("AB").Cells(2,2).Value & "' WHERE EmpID='" & sheets("AB").Cells(2,1).Value & "'"
于 2013-03-19T11:20:24.530 回答
1

使用参数:

1)创建一个命令对象并初始化它。

Dim cmd as adodb.command

set cmd = new adodb.command

2)改变你的SQL:

strSQL = "UPDATE Employee SET EmpName= ? WHERE EmpID = ? "

3) 使用命令对象中的 .createParameter 函数从命令对象创建参数。

dim parId as adodb.parameter
dim parEmp as adodb.parameter

set parId = new adodb.parameter
set parEmp = new adodb.parameter

set parId = cmd.createParameter(...)
set parEmp = cmd.createParameter(...)

4) 将参数添加到命令对象中的参数集合中。

cmd.parameters.append(parId)
cmd.parameters.append(parEmp)

注意:添加参数的顺序与它们在 SQL 语句中的顺序相同。

5)打开你的记录集

rst.open cmd

6)循环和东西

7)关闭并取消初始化所有内容。

于 2013-03-20T14:16:07.360 回答