如何编写从excel表格的单元格中输入输入的sql查询

问题描述:

我想写一个从excel表格的单元格中获取输入的sql查询语句。如何编写从excel表格的单元格中输入输入的sql查询

例如,如果有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 

在这里,在上面的代码我写了一个更新的查询,比如集合EmpName =“微” 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查询中,请告诉我该怎么做。

使用此代码

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

使用参数:

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)关闭和去初始化一切。

+0

哎呀,没有想到... 很明显,SQL应该是一个SELECT打开记录集。但是,如果你只是想运行一个更新,那么用Exec in命令对象来做。 对不起。 – user1644564 2013-03-20 14:23:00