Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


775 / 2272 ツリー ←次へ | 前へ→

【10180】OpenDatabase ODBC接続について なお 08/1/28(月) 14:34 質問[未読]
【10181】Re:OpenDatabase ODBC接続について VBWASURETA 08/1/28(月) 16:59 質問[未読]
【10182】Re:OpenDatabase ODBC接続について VBWASURETA 08/1/28(月) 17:32 質問[未読]
【10184】Re:OpenDatabase ODBC接続について なお 08/1/28(月) 17:36 回答[未読]
【10185】Re:OpenDatabase ODBC接続について VBWASURETA 08/1/28(月) 18:09 回答[未読]
【10187】Re:OpenDatabase ODBC接続について VBWASURETA 08/1/28(月) 18:24 発言[未読]
【10190】Re:OpenDatabase ODBC接続について なお 08/1/29(火) 11:03 発言[未読]
【10191】Re:OpenDatabase ODBC接続について VBWASURETA 08/1/29(火) 12:00 発言[未読]
【10195】Re:OpenDatabase ODBC接続について VBWASURETA 08/1/29(火) 14:31 発言[未読]
【10196】Re:OpenDatabase ODBC接続について なお 08/1/29(火) 15:57 発言[未読]
【10183】Re:OpenDatabase ODBC接続について なお 08/1/28(月) 17:32 回答[未読]
【10188】Re:OpenDatabase ODBC接続について 小僧 08/1/28(月) 23:25 回答[未読]
【10189】Re:OpenDatabase ODBC接続について なお 08/1/29(火) 10:19 発言[未読]

【10180】OpenDatabase ODBC接続について
質問  なお E-MAIL  - 08/1/28(月) 14:34 -

引用なし
パスワード
   DAOを使用して、ODBCデータソースに接続しようとしているのですが、OSとアクセスのバージョンによってうまくいきません。

(最初)
Set Ws = DBEngine.CreateWorkspace("ORADB", "", "", dbUseODBC)
Set Db = Ws.OpenDatabase("", False, False, "ODBC; Driver={ORACLE ODBC Driver}; DSN=TEST; ")

1.Windows2000 Access2000 でOK
2.WindowsXP  Access2003 でNG

だったので、色々やってみた結果、引数の順番を変える(DSNの指定とDriverの指定)と2.でもうまくいきました。

'ACCESS のバージョンにより、引数の順序を変える
If SysCmd(acSysCmdAccessVer) <> "9.0" Then 'Access2003
 Set Db = Ws.OpenDatabase("", False, False, "ODBC; TEST; Driver={ORACLE ODBC Driver};")
Else 'Access2000
 Set Db = Ws.OpenDatabase("", False, False, "ODBC; Driver={ORACLE ODBC Driver}; DSN=TEST; ")
End If

1.Windows2000 Access2000 でOK
2.WindowsXP  Access2003 でOK

ところが、
3.WindowsXP  Access2000 でNGとなりました。

Elseの構文で書いた接続方法ではNG、Ifの構文で書いた接続方法ではOKでした。。

色々調べてみたいのですが、行き詰まってしまい、何かご意見いただけるかと思いまして、投稿した次第です。

何故、引数の記述順を変えたらうまくいくのかも、正直わかってなく、
たまたま変えてみたらうまく動いたといった状況です。

以上、よろしくお願いいたします。

【10181】Re:OpenDatabase ODBC接続について
質問  VBWASURETA  - 08/1/28(月) 16:59 -

引用なし
パスワード
   ▼なお さん:

こんにちは。

Oracleについてはあまり知りませんが、
4点教えてください。

1、OpenDatabaseでエラーになってますか?

2、ユーザ名、パスワードがありませんが設定されてますか?

3、エラーはどのようなエラーとなって止ってますか?

4、参照設定順はどのようになってますか?


因みに3のエラーNo.やエラーコードで調べられる場合が
結構あるので書いて下さい。

【10182】Re:OpenDatabase ODBC接続について
質問  VBWASURETA  - 08/1/28(月) 17:32 -

引用なし
パスワード
   ▼なお さん:

後、1点追加です。

Oracleのバージョンもわかりましたら書いて下さい。
お願いします。

【10183】Re:OpenDatabase ODBC接続について
回答  なお E-MAIL  - 08/1/28(月) 17:32 -

引用なし
パスワード
   ▼VBWASURETA さん:

コメントありがとうございます。
回答させていただきます。

>4点教えてください。
>
>1、OpenDatabaseでエラーになってますか?

 はい。

>2、ユーザ名、パスワードがありませんが設定されてますか?

 設定はしてません。
 っというのも、認証画面として、ODBCの接続画面を使おうと思ってます。

>3、エラーはどのようなエラーとなって止ってますか?

 ODBC--呼び出しが失敗しました
 エラー番号は 3146 が返ってきてます。

>4、参照設定順はどのようになってますか?
  
  Visual Basic For Applications
  Microsoft Access 9.0 Object Library
  OLE Automation
  Microsoft ActiveX Data Objects 2.1 Library
  Microsoft DAO 3.6 Object Library
  Microsoft VBScript Regular Expressions 5.5

っとなっています。

以上、よろしくお願いいたします。

【10184】Re:OpenDatabase ODBC接続について
回答  なお E-MAIL  - 08/1/28(月) 17:36 -

引用なし
パスワード
   ▼VBWASURETA さん:

>後、1点追加です。
>
>Oracleのバージョンもわかりましたら書いて下さい。
>お願いします。

バージョンは Oracle9i Release 9.2.0.4.0 です。

【10185】Re:OpenDatabase ODBC接続について
回答  VBWASURETA  - 08/1/28(月) 18:09 -

引用なし
パスワード
   ▼なお さん:

わからないなりに調べてみたですが、

www.accessclub.jp/bbs6/0018/das5493.html

のURLにある設定に合わせてもダメでしょうか?
原因は別ですが、環境が同じでエラー箇所を
超えてますので使えそうです。

【10187】Re:OpenDatabase ODBC接続について
発言  VBWASURETA  - 08/1/28(月) 18:24 -

引用なし
パスワード
   ▼なお さん:

すみません。見ていて気になったのですが、
全てXPでNGになってますよね?

ACCESSではなくOS判定では?

【10188】Re:OpenDatabase ODBC接続について
回答  小僧  - 08/1/28(月) 23:25 -

引用なし
パスワード
   ▼なお さん、VBWASURETA さん:
こんばんは。

基本的な所を確認させて下さい。

各PCの ODBCのバージョンと MDACのバージョンは統一されていますか?

OTN Japanより
h tp://otn.oracle.co.jp/software/tech/windows/odbc/index.html


AccessVBAに関する以前の問題として各PCの環境設定に違いがあれば、
当然コードにも影響が出てきますよね。

今回はOSが違うとの事ですのでMDAC辺りが怪しいですね。
(SPの当て具合によってもバージョンが変わってきます)


> 何故、引数の記述順を変えたらうまくいくのかも、正直わかってなく

MSサポートオンラインより
h tp://www.microsoft.com/japan/msdn/vs05/adonet/vsgenerics.aspx

上記はADOの説明ですので、DAOにも当てはまるとは限りませんが

> データ プロバイダは、
> 名前付きパラメータ (パラメータ名が重要で、パラメータが指定される順序は無関係) か、
> 位置指定パラメータ (パラメータの順序が重要で、名前は無関係)
> のどちらか、あるいはその両方をサポートできます。

とあります。
今回は名前付きパラメータを使っているため、
順序は関係なさそうに思えるのですが、
正直、当方も同じ環境が再現できないため解りません。

以上、何かご参考になれば幸いです。

【10189】Re:OpenDatabase ODBC接続について
発言  なお E-MAIL  - 08/1/29(火) 10:19 -

引用なし
パスワード
   ▼小僧 さん:
コメントありがとうございます。

>各PCの ODBCのバージョンと MDACのバージョンは統一されていますか?

ODBCは同じでした。
MDACは、2000が2.53 XPが2.81 で異なっていました。。

>上記はADOの説明ですので、DAOにも当てはまるとは限りませんが
>正直、当方も同じ環境が再現できないため解りません。
>以上、何かご参考になれば幸いです。

紹介いただいたサイトを見て、参考にさせていただきます。
本当にありがとうございました。

【10190】Re:OpenDatabase ODBC接続について
発言  なお E-MAIL  - 08/1/29(火) 11:03 -

引用なし
パスワード
   ▼VBWASURETA さん:

こんにちは。

>すみません。見ていて気になったのですが、
>全てXPでNGになってますよね?
>ACCESSではなくOS判定では?

そうなんですよね。確かにそうです。。

ただ、ちゃんとした確証が取れればいいのですが、XP、2000以外のOSのとき
どうなるかとか、悩むところです。

小僧さんが、MDACのバージョンを触れてらっしゃり、OSによって異なっていました。

今のところ、最初のOpenDatabaseで失敗したら、次は引数の順番を変えて
OpenDatabaseするような、突貫工事的な対応を入れて逃げています。。(汗)

【10191】Re:OpenDatabase ODBC接続について
発言  VBWASURETA  - 08/1/29(火) 12:00 -

引用なし
パスワード
   ▼なお さん:

こんにちは。

実は、アクセスではOracleに繋いだことがないので
DAO Jetで試したことがないんですよね。

OracleはRDOでの接続が主流だった時期で
VB6.0からかExcelのどちらかでした。

アクセスもRDOで接続できたと思いますが、
試しにされてみますか?

h tp://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_130_020.html

ここの「RDOでデータを取得する。」のExcelの画像をクリックすると
サンプルMDBがダウンロードできますから一度試してみるのも良いかも
知れませんね。

【10195】Re:OpenDatabase ODBC接続について
発言  VBWASURETA  - 08/1/29(火) 14:31 -

引用なし
パスワード
   ▼なお さん:

もしどうしても、ダメでしたら
エラー処理はあまり宜しくない気がしますので
OS判定で試してもらえますか?
逃げ処理2みたいですけど。


例:
Public Const VER_WIN2000 = 5
Public Const VER_WINXP = 5.01
'
Public Function GetOSVersion() As Single
  On Error GoTo GetOSVersion_Error
  Dim SysObj As Object
  
  Set SysObj = CreateObject("SysInfo.SYSINFO")
  
  GetOSVersion = SysObj.OSVersion
  
  Set SysObj = Nothing

Exit Function
GetOSVersion_Error:
  GetOSVersion = -1 'OSバージョン取得失敗
End Function


Sub test()

  'Call MsgBox("OSのバージョンは:[" & GetOSVersion & "]です", vbOKOnly, "OSバージョン確認")

  If GetOSVersion = VER_WINXP Then 'OSがXPの場合
    Set Db = Ws.OpenDatabase("", False, False, "ODBC; TEST; Driver={ORACLE ODBC Driver};")
  ElseIf GetOSVersion = VER_WIN2000 Then 'OSがWin2000の場合
    Set Db = Ws.OpenDatabase("", False, False, "ODBC; Driver={ORACLE ODBC Driver}; DSN=TEST; ")
  Else 'OSがその他
    'ここは必要に応じて決めて下さい。
  End If

End Sub

【10196】Re:OpenDatabase ODBC接続について
発言  なお E-MAIL  - 08/1/29(火) 15:57 -

引用なし
パスワード
   ▼VBWASURETA さん ▼小僧 さん
こんにちは。本当に色々コメントいただき、ありがとうございます。

で、MDACのバージョン違いが気になったので、2000のマシンを2.53→2.81にバージ
ョンアップさせて動かしたら、エラーになりました。

纏めると

2.81は
OpenDatabase("", False, False, "ODBC; DSN=TEST; Driver={ORACLE ODBC Driver};")

2.53は
OpenDatabase("", False, False, "ODBC; Driver={ORACLE ODBC Driver}; DSN=TEST; ")

だと動きました。

うーん・・(他のバージョンならどうなの?って感じなんですけども)

VBWASURETAさんがご指南くださった、RDOとか他の方法で考えたほうがいいかもしれません・・

とりあえず、途中経過のご報告をさせていただきました。

775 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078201
(SS)C-BOARD v3.8 is Free