如何编写从Excel工作表的单元格中获取输入的SQL查询

时间:2013-03-19 11:05:58

标签: vba excel-vba excel

我想写一个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查询中,请建议我如何操作。

2 个答案:

答案 0 :(得分:2)

使用此代码

strSQl="UPDATE Employee SET EmpName='" & sheets("AB").Cells(2,2).Value & "' WHERE EmpID='" & sheets("AB").Cells(2,1).Value & "'"

答案 1 :(得分: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)关闭并解除所有内容。

相关问题