2016-06-13 21 views
0

私はdatetimeデータ型の2つの入力パラメータを受け入れるSQL Serverストアドプロシージャを持っています。 Excel VBAから呼びたいVBAのdatetimeパラメータを使用してSQL Serverストアドプロシージャを呼び出す方法はありますか。

Dim spCommand As ADODB.Command 
Set spCommand = New ADODB.Command 
spCommand.ActiveConnection = cnn 
spCommand.CommandText = "myProcedureName" 
spCommand.CommandType = adCmdStoredProc 
spCommand.Parameters.Refresh 
spCommand.Parameters(1).Value = "6/1/2016"  'DateValue("2016-06-01") + TimeValue("00:00:00") 
spCommand.Parameters(2).Value = "6/1/2016"  'DateValue("2016-06-01") + TimeValue("23:59:59") 
spCommand.Execute 

しかし、私はこのエラーを取得:

enter image description here

は、私はそれをどのように解決することができますが、私はこのような何かを試してみたので

VBAは、日時の種類を持っていませんか?

EDIT 1
@Joeが提案何followeingした後、私は私のデバッガを開いて、これを取得するが、エラーがまだそこにある:

enter image description here

+0

#の前後に書式設定された日付を試しましたか?例えば2016年6月1日、#6/1/2016#になります。 –

+0

@RyanWildry。はい、私はしました – baudo2048

+0

@ RyanWildry - 更新された答えを参照 – Joe

答えて

1

DateSerialの機能を使用します。

spCommand.Parameters(1).Value = DateSerial(2016,1,6) 

必要に応じて、オプションでTimeSerial関数:

spCommand.Parameters(2).Value = DateSerial(2016,1,6) + TimeSerial(23,59,59) 

VBA doesn't have a datetime type

はい、それがない:

Dim dtDateTime as Date 
dtDateTime = DateSerial(2016,1,6) + TimeSerial(23,59,59) 

UPDATE

あなたの編集に続いて、私はParametersコレクションは三つの項目を持っていることがわかります。最初はリターンパラメータ、2番目と3番目はadDBTimeStamp型の入力パラメータです。

また、Command.NamedParametersプロパティはfalseなので、編集に伴うスクリーンショットでは、名前付きパラメータは使用できません。あなたのパラメータを指定する必要がありますので、2つの

VBAのコレクションは、ない0、1から始まるインデックス化されている

UPDATEとして:私は上記のだと思います

spCommand.Parameters(2).Value = ... 
spCommand.Parameters(3).Value = ... 

違う。標準のVB/VBAコレクションは1から始まるインデックスが付けられています。私の見解では、1ベースのインデックスは「より直観的」であると誤解しています。

ADOが開発されたとき、Microsoftは1ベースのコレクションが間違っていると認識し、ADOコレクションを0ベースにすることにしました。これにより、標準的なコレクションと矛盾しますが、例えば、javascript開発者にとっては「直感的」です。何が一貫性のない混乱。

私が正しい(と、それは私がADOを使用するので、長い時間だ、と私はこれをテストしていない)場合は、次のものが必要です。

あなたの3265エラーを排除するが、doesnのはずです
spCommand.Parameters(1).Value = ... 
spCommand.Parameters(2).Value = ... 

」あなたの元の問題を解決する。デバッグトレースが表示され、パラメータが期待値に設定されていることが示されます。問題のストアドプロシージャの簡略化されたバージョンを含めて、MCVEを生成しようとお勧めします。

+0

ありがとう@ジョーしかし、それは私のために動作しません!私は同じエラーが発生します。 – baudo2048

+1

@ baudo2048 - 80040e14は一般的なエラーです。デバッガの下で実行して、refreshを呼び出した後でパラメータのコレクションを調べて、データ型が期待どおりであることを確認してください。 – Joe

+0

私はあなたのUPDATEであなたが提案したものを試しましたが、うまくいかず、別のエラーが発生します:ランタイムエラー '3265'。私はdatetimeの問題を解決するので、あなたの答えをupvote。私は何か他のものがあると思います。質問を解決するために愚かな間違いかもしれません。最初の@RETURN_VALUEが異常です。私のストアドプロシージャは値を返しません。ありがとう – baudo2048

関連する問題