【保存版】2013年度発売全パチスロアプリ一覧(iPhone,iPad)

【Access】DAOのODBCダイレクト接続を、泣く泣くADO接続に書き換える。

とある昔に作成したシステムのお話。
フロントエンドはWindowsXP/Access2003。
ODBC接続でバックエンドのデータベースがMySQLの構成でした。

数年間なんら問題なく安定稼動していました。

ところが先日、
クライアント環境を新しくしたところエラーが発生して動かない。
との連絡が。
ちなみに新しいクライアント環境は、Windows7/Access2010

エラーメッセージは、以下。

3847:ODBCDirectはサポートされていません。DAOの代わりに
ADOを使用するには、コードを記述し直してください。


・・・非常にわかりやすいメッセージです。
直せば動くって、、、簡単に言ってくれますねぇ。

「大変申し訳ございませんが、DAOのODBCDirect機能は廃止
させていただきました。非常に心苦しいのですが、
ADOへ修正してはいただけませんでしょうか?」
ぐらいい言ってほしいです。。。(嘘)

そうですが、記述しなおしですか。。。
調べてみると、Access2007以降、ODBCDirect接続は廃止されたようです。
ODBCDirect ワークスペースがサポートされなくなりました。この機能を用いたコードは、RDO 2.0 や ADO を用いたコードに置き換える必要があります。
Jet ワークスペースからの ODBC 接続や ODBC パススルーは、引き続き利用可能です。

そもそもODBCDirectは、
・重い処理をMySQL側で実行させる
・実行中、処理状況のメッセージを表示するために非同期実行させる
目的で使用しておりましたが、調べてみると
ADOでも上記目的を達成できるようなので、メッセージの指示通りADOに
ちゃっちゃと書き換えることにします。

変数定義
Dim cnMySQL As New ADODB.Connection 'ADO接続コネクション
Dim strCON_STR As String '接続文字列
Dim strSQL As String 'SQL文字列

まず、DAOとADOとで、接続文字列が若干違います。
接続文字列に、「ODBC;」の記述がいらないのと、DRIVER名を「{}」でくくる
必要がありました。(逆に言うとそれ以外は同じ)

adoodbc接続文字列

あとはDB接続部分を、
Set wks = DBEngine.CreateWorkspace("xxxxxxxxx", "", "", dbUseODBC)
Set cnMySQL = wks.OpenConnection("", dbDriverNoPrompt, False, strCON_STR)

以下に変更。
cnMySQL.Open strCON_STR

非同期実行時は、こんな感じでadAsyncConnect オプションをつけて実行。
cnMySQL.Execute strSQL, , adAsyncConnect '非同期実行

非同期実行時の処理待ち判定は、
Do While cnMySQL.StillExecuting 
処理中メッセージとか表示
Loop

以下に変更。
Do While cnMySQL.State >= adStateConnecting
処理中メッセージとか表示
Loop

Stateが2以上の値になっている場合は処理中という判定をしています。
処理中は、5が返ってくるようです。(adStateOpen + adStateExecuting )

<State プロパティー値の説明>
MSDN /objectStateEnum
adStateClosed 0 オブジェクトが閉じていることを示します。
adStateOpen 1 オブジェクトが開いていることを示します。
adStateConnecting 2 オブジェクトが接続していることを示します。
adStateExecuting 4 オブジェクトがコマンドを実行中であることを示します。
adStateFetching 8 オブジェクトの行が取得されていることを示します。

上記のDAOODBCダイレクト接続から、ADO接続への変更を行った結果、
Access2010環境でも問題なく動作するようになりました。

以上、どこかで私と同じような状況になっている人へのアドバイス
もかねた覚書でした。
[Google PR]

Twitterはじめました。プラプラ | Twitter

<< 【iPad】10月22日のAppleイベント。新型iPadminiも発表予定らしいよ。
【コンピュータ】office完全対応!8インチWindows8.1タブレットが密かに熱い。 >>

[関連エントリ 最新5]

[Google PR]


[最新エントリ 5]

>>トップページ
人気カテゴリ:AccessTips SQLServer CakePHP iPad
過去ログ(全記事一覧)

コメント
コメントする(お気軽にどうぞ)









この記事のトラックバックURL
トラックバック
カテゴリー
プロフィール
お問い合わせ
Powered by NINJA TOOLS
links
recent comment
  • 【Access】vbaでhmacが正しく計算できた!!
    まさ (06/01)
  • 【Access】AccessReportMailメール送信時のポートを25から587へ
    わら (05/31)
  • 【SQLServer】超シンプル!再帰CTE(共通テーブル式)で連続データを作成する。
    sazi (09/08)
  • 【あまっちゃお】Amazon商品検索「あまっちゃお」プロジェクト始動。Ver00-06-00 β
    カメちゃん (07/31)
  • 【Access】あれ?DoCmd.RunCommand acCmdSaveRecordの内部仕様が変わった?
    花姉 (03/17)
  • 【Access】実行中のmdb(自分自身)をバックアップコピーする方法。
    亀 (02/06)
  • 【雑記】Amazonでの注文時、TMGさん発送にご注意を。納期を守れない可能性あり!
    管理人 (01/31)
  • 【雑記】Amazonでの注文時、TMGさん発送にご注意を。納期を守れない可能性あり!
    あ (01/31)
  • 【雑記】Amazonでの注文時、TMGさん発送にご注意を。納期を守れない可能性あり!
    K (11/13)
  • 【VAIOP】VaioXと両持ちできるものすっっごくマニアックなケース。当たり前ですが在庫限り。(笑)
    管理人 (08/04)
recent trackback
  • 【Access】2003安全でない式がブロックされていませんとセキュリティーレベル。
    awgs Foundry (10/29)
  • 【VAIOtypeP】液晶保護シートは、新車のカバーではない。レイアウト社液晶/天板保護フィルムセットRT-VP1FS1
    XMLがキライ。 (04/09)
  • Vistaから、LinkStation(NAS)にアクセスできません。
    そのほかいろいろ (09/06)