2013-02-13 83 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