2013-02-13 82 views
3

我一直在寻找一个解决问题的答案,而我将描述的问题没有成功。Excel 2007窗体到SQL Server

我有一个Excel表格,经常手动更新。我被要求以实时的方式将每一行更改推送到Sql Server中。我需要用户通过按保存按钮才能将行保存到服务器。

在SSMS中,我已经能够读取使用OPENROWSET从服务器获取数据,如:

SELECT * 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
'Excel 12.0;HDR=YES;Database=C:\tmp\test2.xlsm', 
'SELECT * FROM [myrng]'); 

我一直也能够从Excel中插入数据到SQL Server:

Insert into NEWDB.dbo.master 
Select * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 
12.0;HDR=YES;Database=C:\tmp\test2.xlsm','SELECT * FROM [myrng]') 

当我尝试将QUERY,INSERT或UPDATE数据返回到Excel文件仍然打开的服务器时,就会出现问题。

我打算做的最后是建立一个向导应用程序来填充一个Excel表,该表可以在过程结束时提交给相应的SQL Server表。

我一直在玩VBA和ADO,迄今为止没有成功,而且我建议使用DTS或SSIS,但我需要Excel文件始终保持打开状态。

在此先感谢, 罗德里戈。

回答

0

你可以运行针对到Excel的连接:

strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ActiveWorkbook.FullName _ 
    & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";" 

''Late binding, so no reference is needed 

Set cn = CreateObject("ADODB.Connection") 

cn.Open strCon 

''A single value, but a query with parameters would be better 
ssql = "INSERT INTO [ODBC;DRIVER=SQL Server;SERVER=server;Trusted_Connection=Yes;DATABASE=Test].table_1 (Atext) " _ 
& "Values ('" & Sheet1.[b3] & "')" 

cn.Execute ssql 

或者

ssql = "INSERT INTO [ODBC;DRIVER=SQL Server;SERVER=server;" _ 
    & "Trusted_Connection=Yes;DATABASE=Test].table_1 (Atext) " _ 
    & "SELECT ACol FROM [Sheet1$b7:c9]" 

或者

ssql = "INSERT INTO [ODBC;DRIVER=SQL Server;SERVER=server;" _ 
    & "Trusted_Connection=Yes;DATABASE=Test].table_1 (Atext) " _ 
    & "SELECT Acol FROM Anamedrange" 

如果HDR =否,使用F1,F2等的名称各种列,从范围的第一列开始编号。

这也适用于我在Excel中,对于这个例子我使用了对Microsoft ActiveX Data Objects x.x库的引用,但是后期绑定也可以正常工作。

Dim cn As New ADODB.Connection 
Dim cmd As New ADODB.Command 
cn.Open servercon 

cmd.ActiveConnection = cn 

cmd.CommandText = "insert_user" ''Stored procedure 
cmd.CommandType = adCmdStoredProc 
cmd.Parameters("@username").Value = Worksheets("Sheet1").Cells(3, 2) 
cmd.Execute 
+0

我最终也是这样做了一个命名范围。谢谢。 – Rod 2013-02-13 22:06:44