問題を切り分けるために (ほぼ) あらゆることを試みましたが、道に迷っています。
ADODB を使用してローカルの MySQL データベースに接続する MS Access アプリケーションがあります。それを新しいコンピューターにコピーしましたが、ストアド プロシージャの出力パラメーターには毎回ランダムな値が含まれるようになりました (ADODB 経由で実行した場合)。MySQL WorkBench で実行すると、出力パラメーターは正しくなります。
2 台の PC のスペックは次のとおりです。
- old : Windows 7 Pro、Office 2010 ProPlus、MySQL ODBC 5.3.4、MySQL サーバー 5.6.22 (すべて 64 ビット。32 ビット ODBC もインストールされています)。
- new : Windows 10 Pro、Office 2016 ProPlus、MySQL ODBC 5.3.6、MySQL サーバー 5.7.16 (MS Office を除くすべてが 64 ビットです。32 ビット ODBC もインストールされます)。
問題を切り分けるために、次の単純なストアド プロシージャを使用しました。
CREATE PROCEDURE `testit`(
OUT iTest INT(11))
BEGIN
SET iTest = 123;
END
また、次の VBA コード (および Microsoft ActiveX Data Objects 6.1 ライブラリへの参照) のみを含むテスト MS Access データベース:
Public Function dbTestIt() As Long
Dim dbConn As ADODB.Connection
Dim dbCmd As ADODB.Command
'Open new connection
Set dbConn = New ADODB.Connection
dbConn.ConnectionString = "Driver={MySQL ODBC 5.3 Ansi Driver};option=3;database=xxx;user=root;password=yyy;"
dbConn.Open
'Execute new command
Set dbCmd = New ADODB.Command
With dbCmd
Set .ActiveConnection = dbConn
.CommandTimeout = 0
.CommandType = adCmdStoredProc
.CommandText = "testit"
.Parameters.Append dbCmd.CreateParameter("iTest", adInteger, adParamOutput)
.Execute
dbTestIt = dbCmd.Parameters.Item(0).Value
End With
'Close Connection
dbConn.Close
End Function
テスト結果は次のとおりです。
- 古いコンピュータでは、dbTestIt() は常に 123 を返します。
- 新しいコンピュータでは、dbTestIt() はランダムな値を返します (例: 51, 1936020585, 1)。
- また、新しいコンピューターから古いコンピューターの MySQL サーバーに(接続文字列で server=192.168.1.x を使用して) 接続すると、常に 123 も返されます。
- これは、問題が (のみ)新しいコンピューターのMySQL サーバーにあることを示しています (そうですか?)。
- ただし、古いコンピューターから新しいコンピューターの MySQL サーバーに接続すると、常に 123 が返されます。
では、問題は新しいコンピューターのコンポーネントの組み合わせにあるようですが、どれがなぜでしょうか? そして、それをテストする方法は?
誰か明るいアイデアはありますか?