Excelファイルのデータベースへの接続を多数作成したので、問題はこの特定のシナリオと直接関係しています。私は、文字列とテストしているExcel接続経由でストアドプロシージャを実行する - SSMSで動作しますが、VBAマクロでは動作しません
With ActiveWorkbook.Connections("usp_LockUnlockCustomer").OLEDBConnection
.CommandText = "EXECUTE dbo.usp_LockUnlockCustomer '" & bLock & "','" & Id & "','" & LockedBy & "'"
End With
次のように上記のSPは、いくつかのVBA経由で呼び出され
IF OBJECT_ID('usp_LockUnlockCustomer', 'P') IS NOT NULL
DROP PROCEDURE usp_LockUnlockCustomer
GO
CREATE PROCEDURE usp_LockUnlockCustomer
@Lock AS CHAR(10), @Id AS nvarchar(50), @LockedBy AS nvarchar(50)=null
AS BEGIN
SET NOCOUNT ON;
IF @Lock = 'Lock'
INSERT INTO IO_Call_DB..IdLock (Id, LockedBy, LockedDtTm)
VALUES(@Id,@LockedBy,GETDATE())
;
IF @Lock = 'Unlock'
DELETE FROM IO_Call_DB..IdLock
WHERE Id = @Id
;
END;
--EXEC usp_LockUnlockCustomer 'Lock','123456789', 'Test User'
:サーバーは、Excelは、私は、次のSPを持っている2013年
で、2012年です文字列は正しい形式になります&にはすべての必要なデータが含まれています。
ExcelとSQL間の接続は、「データ>他のソースから> SQL Serverから」によって作成されますが、これは他のすべてのSPおよび一般クエリに対して有効なかなり標準的なプロセスです。
この接続ではExcelにデータが返されないため(Excelにデータを返すように指定するのではなく、接続を設定するだけです)、これが問題である可能性があります。
誰もこの問題を経験したことがありますか?
EDIT1:私は問題を解決しましたが、それは特に大きな結果ではありません。助けていただければ幸いです。 この問題を解決するには、ストアドプロシージャの最後に「select * from」プロセスをインクルードし、Excelにブック内の範囲にデータを出力するよう指示する必要があります。これにより、VBAの.Refresh部分は、&がSPにSQLを送信することを何でもすることができます。
基本的に、データテーブルを作成する必要がありますが、データは必要ありません。コマンドを送信するだけです。
コマンドを送信するにはどうすればよいですか?1)データの配置場所を明示します。2)データが返される必要がない場合は、ストアドプロシージャ内にSELECTステートメントを含めます。 。
私の修正はテーブルから「トップ0を選択する」ことでした。少なくともExcelに出力されるデータテーブルは増加しません。