私はExcel 2003用のVBAマクロを作成しています.SQLデータベースからExcelシートにさまざまなデータをインポートしています。 は、私はそれを行うには、2つの方法を試してみました:ADOADOが間違った順序を返します
1. QueryTables.Add(...)2.より良い」または「クリーナー」ソリューションであるように見えたので、私は、ADOの賛成だった 。私はデータベースからADOで数値を取得しようとするまでうまくいっていました。値1842,47078を返すのではなく、0,01842を返しました。(ちょっと私の意味を示してください) 奇妙なことです: QueryTables.Add(...)私は正しい値を取得します
私はまったくこのようなことが起こらない理由を知りませんでしたが、解決策をインターネットで検索しましたが、何も見つかりませんでした。データベースの文字列はすべて正常です。
誰でも私にこれを手伝ってもらえますか?
ドライバはFirebird/InterBase(r)ドライバでODBCに接続しています。ここ は、私は物事を行う方法を少し例を次に示します。
'ADO solution = wrong value
With adoConnection
.Provider = "MSDASQL"
sConnection = "ODBC;DSN=ABC;Driver=Firebird/InterBase(r) driver;Dbname=blaName.gdb;"
ConnectionString = sConnection
.Open
End With
SQL_Import = "SELECT A.PRICE AS ""Price"" FROM TABLE A WHERE A.KEY ='x1234' "
adoRecordset.ActiveConnection = adoConnection
adoRecordset.Open SQL_Import
varSol = adoRecordset.Fields("Price")
Sheets(3).Cells(1, 1).Value = varSol
adoRecordset.Close
adoRecordset.ActiveConnection = Nothing
adoConnection.Close
'QueryTables solution = right value
Set QueryTbl = Sheets(3).QueryTables.Add(Connection:=sConnection, Destination:=Sheets(3).Cells(1, 2))
With QueryTbl
.CommandText = SQL_Import
.AdjustColumnWidth = True
.Refresh BackgroundQuery:=False
.Delete
End With
私は誰も私を助けることができると思います。
更新: 私はそれを何とかしていますが、何が間違っているのか分かりません。 "SELECT Price as numeric(15、2)..."というクエリを使用すると正しい結果が得られます。 これは奇妙なことですが、私はコンピュータ上でC#ですべてを試してみましたが、問題なく動作しました。したがって、エラーはExcelやVBAのいずれかによって発生しているようです。
レコードセットが返された後にブレークして、正しい値がレコードセットに返されているかどうかを調べます。そうでなければ、接続の設定方法に問題がある可能性があります。値がレコードセット内で正しく表示されている場合は、レコードセットからデータを渡すときにエラーが発生する可能性があります。私はファイヤーバードの接続に精通していないので、私はあまり助けにはならない。 – Fink
最初のWith With End WithブロックでConnectionStringにドットがないので、実際にそのプロパティを設定していない可能性があります。それがあなたが見ているものに関連しているかどうかはわかりません。 –
実際のコードの.ConnectionStringです。私はこの例を書いたときにちょうど間違っていました。私はマクロを停止し、レコードセットをチェックしました。値は、レコードセットに戻るときに既に間違っています。だから実際には接続に問題があるようです。おそらくプロバイダーですか? – MiVoth