2017-12-18 101 views
1

私は、DSNなしでOracleデータベースからの私のテーブルを返すExcelで何かを持っています。私はAccessで同様のアプローチを望んでいた場合でも、私はこれを試してみました:私はここでエラーになってしまいアクセスパススルーDSNレスのOracleクエリ

Dim db As DAO.Database 
    Dim qdf As DAO.QueryDef 
    Dim rs As DAO.Recordset 

    Set db = CurrentDb 
    Set qdf = db.CreateQueryDef("") 
    qdf.Connect = "ODBC;DRIVER={Microsoft ODBC for Oracle};CONNECTSTRING=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=" & IP & ")(PORT=XXXX))(CONNECT_DATA=(SERVICE_NAME=" & svcname & ")));" & _ 
    "Uid=" & Username & ";PWD=" & password &";" 


    qdf.Sql = "---some query" 

    qdf.ReturnsRecords = True 

    Set rs = qdf.OpenRecordset 

The error

は、私ができることはここにありますかと等価なものはありませんAccessのクエリテーブルについて

+0

ExcelとAccess間の接続文字列とSQLが完全に同じであることは間違いありませんか?両方の 'Debug.Print'を行い、比較のためにテキストエディタに貼り付けます。 – Parfait

+0

同一。私は1つから別のものにコピーして貼り付けています。また、http://connectionstrings.com/oracleの接続文字列を確認して、正しく使用していることを確認しました。これは正しい接続文字列を使用して取得したエラーです。それ以外の場合はODBCエラーが発生します。 –

+0

QueryTablesに相当するものとして、レコードセット呼び出しを削除し、変更を保存するためにqdf、 'Set qdf = Nothing'を解放した後、' DoCmd.Open "mySavedQuery" 'クエリをオープンするだけです。これは、テーブルのようなExcelを開くか、Excelはテーブルのようなアクセスを開きます! – Parfait

答えて

0

パススルークエリを作成して機能させることをお勧めします。コードなしでPTクエリを作成+実行することができます。アクセスUIで100%動作するPTクエリを取得し、その後にコードを試してみてください。

PTクエリを作成します。アクセスUIでPTクエリをクリックすると機能しますか? このクエリの作業を取得(そして後にのみ)したら、あなたは、このようなコードでそのPTクエリを実行することができます

Dim rst  As DAO.Recordset 
Set rst = CurrentDb.OpenRecordset("qryPassR") 

は、Oracleクエリの生のSQLを変更する必要がある場合は、あなたが行くことができます:その後、

Dim rst  As DAO.Recordset 

With CurrentDb.QueryDefs("qryPassR") 
    .SQL = "select * from tblHotels" 
    Set rst = .OpenRecordset 
End With 

そして、あなたは店のPROCを実行したい場合、あなたはONE作業PTクエリを作成したら、あなたは上記のようなコードで何度も繰り返し、それを使用することができますので、

With CurrentDb.QueryDefs("qryPassR") 
    .SQL = "exec storeProc" 
    .ReturnsRecords = False 
    .Execute 
End With 

を行きます。したがって、接続文字列をコードに配置する必要はありません。PTクエリを作成するだけで、接続文字列を管理して管理します。

+0

VBAを使わずにPTを実行しようとすると、同じエラーが発生します。 PT ODBC Conn Str入力内で同じConnectionstringを使用する。 connectionstring.comによると正しいです。だから私はなぜ私はエラーを取得しているのか分からない。 –

+0

私は新しい接続を作成します。もう一つの方法はctrl-gを押してデバッグウィンドウにジャンプし、? currentdb.TableDefs( "リンクテーブル名")。Connect - 言い換えれば、リンクされたテーブルから既存の既知の作業接続を取り出し、それを使用します。したがって、単純なPTクエリがAccess UIから100%動作するまで、VBAコードを試すことはできません。あなたの接続は単に動作しません。リンクされたテーブルがありますか? (それから接続情報をつかむ)。 –

+0

したがって、一日の終わりには、サーバーに接続する簡単で基本的な接続を取得する必要があります。リンクされたテーブルや他の接続が機能しない場合、このプロセスでコードが心配するのは時期尚早です。あなたは単純なリンクテーブルを働かせなければならず、基本的な接続を働かせなければなりません。あなたの接続が機能していると同時にVBAコードを解決しようとしないでください。簡単なリンクテーブルの操作を取得します。私は、あなたの接続がうまくいかなかった場合、あなたは正常な接続を持っていない場合、この問題はあなたの元の質問と投稿に関係なく0に近いことを意味します。 –