我想写一个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查询中,请建议我如何操作。
答案 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)关闭并解除所有内容。