3

私はどこでも答えを探していましたが、ここで説明する問題に対する成功はありませんでした。

手動で頻繁に更新される 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]')

この問題は、Excel ファイルを開いたままサーバーにデータをクエリ、挿入、または更新しようとすると発生します。

私が最終的に計画しているのは、プロセスの最後に対応する SQL Server テーブルに送信できる Excel テーブルに入力するウィザード アプリを構築することです。

私は今のところ VBA と ADO で遊んでいますが、成功していません。DTS または SSIS を使用するように提案されましたが、Excel ファイルを常に開いたままにしておく必要があります。

前もってありがとう、ロドリゴ。

4

1 に答える 1

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=No の場合、さまざまな列の名前に F1、F2 などを使用し、範囲の最初の列から番号を付けます。

これは Excel でも機能します。この例では、Microsoft ActiveX Data Objects xx ライブラリへの参照を使用しましたが、レイト バインディングも同様に機能します。

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
于 2013-02-13T21:27:58.513 に答える