1

私はいくつかの異なるサイトで使用する SQL Server にリンクされたテーブルを持つ小さな Access アプリケーションを持っているので、SQL サーバー名と、場合によっては SQL データベースと odbc 接続名がサイトごとに異なります。ただし、Access ランタイムを使用して使用するため、フル バージョンがないとテーブルを再リンクできません。ODBC接続エラーをキャッチする方法を見つけるのに苦労しており、ODBC接続名などを入力してテーブルを再リンクするオプションを提供し、可能だと思われるVBAコードを介して再リンクします。( http://www.access-programmers.co.uk/forums/showthread.php?t=143180例)

データベースは、リンク テーブルのレコード ソースを含むフォームにすぐに読み込まれるため、可能であればそのフォームのエラーをキャッチする必要があります。そこにテーブルを再リンクするためのボタンを備えたメインメニューを追加できると思いますが、ユーザーが余分なクリックを必要とするメニューフォームを導入することは避けたいと思います.

これらの記事を見つけましたが、フォームの On Error イベントで最初の odbc の接続失敗をキャッチできず、Activate イベントも試しました。どんな提案でも大歓迎です!

http://support.microsoft.com/kb/209855

http://www.access-programmers.co.uk/forums/showthread.php?t=198039

4

1 に答える 1

2

リンクされたテーブルの 1 つから接続情報を抽出し、それを使用して ADO 接続を開こうとします。ConnectionTimeout必要に応じてプロパティを調整できます。

リンクの ODBC 接続情報は、TableDef.Connect プロパティから取得できます。

CurrentDb.TableDef("link name").Connect

理想的には、「ODBC;」を破棄できます。その文字列の先頭から、残りを ADO 接続文字列に使用します。しかし、あなたのものがうまくいかない場合はSplit()、「;」の文字列を使用できます。必要なピースを使用します。

ADO 接続を開くためのコード アウトラインを含めました。それを改良する必要があります。次に、スプ​​ラッシュフォームから呼び出すことができます。接続に成功したら、メイン フォームを開きます。接続に失敗した場合は、再リンクに必要な情報を要求するフォームを開きます。

Dim cn As Object
Dim strConnect As String

On Error GoTo ErrorHandler
    strConnect = Mid(CurrentDb.TableDefs("link name").Connect, 6)
    Set cn = CreateObject("ADODB.Connection")
    cn.ConnectionString = strConnect
    cn.ConnectionTimeout = 5 ' in seconds
    cn.Open
    Debug.Print "success"
    cn.Close
    Set cn = Nothing

ExitHere:
    Set cn = Nothing
    On Error GoTo 0
    Exit Sub

ErrorHandler:
    Debug.Print "failed"
    GoTo ExitHere
于 2013-08-20T20:50:11.063 に答える