バック エンド テーブルが Access 2000 でコモン ダイアログ コントロールを再リンクする方法

文書翻訳 文書翻訳
文書番号: 209862
この資料の Microsoft Access 97 バージョンは、参照してください。 181076.
詳細: エキスパート コーディング、相互運用性、およびマルチ ユーザーを必要します。スキル。

この資料は Microsoft Access データベース (.mdb) にのみ適用します。

すべて展開する | すべて折りたたむ

目次

概要

この資料で使用する方法を示しています、 コモン ダイアログ データベース内のリンク テーブルを更新するコントロール。は、 コモン ダイアログ コントロール Microsoft Office 2000年のデベロッパー版を使用できるかツールです。リンクされているテーブル内の 1 つまたは複数のバック エンド データベース内にあります。

使用してテーブルを再リンクする方法の例については、Windows アプリケーション プログラミング インターフェイス (API) 関数を参照してをください。ソリューションの開発サンプル ・ プログラム (Solutions9.mdb。)取得するのにはSolutions9.mdb、記事を表示するのには、次の文書番号をクリックして、技術情報:
248674 Acc 2000: 注文し、マイクロソフト開発者向けネットワーク (MSDN) で利用可能なソリューションの開発サンプル ・ データベース
Solutions9.mdb データベースを開くを選択 複数のデータベースを使用します。 で、 カテゴリを選択します。例 ボックスとクリック 起動時にテーブルなリンクで、 例を選択します。 ボックス。

詳細

Microsoft プログラミング例としては、明示または黙示の保証もないだけを提供します。これを含むが、商品性や特定目的への適合性の黙示的な保証に制限はありません。この資料は、例示されているプログラミング言語やを作成したりプロシージャをデバッグするために使用されるツールに精通するいると仮定します。マイクロソフト サポート エンジニアに、特定のプロシージャの機能について説明する役立ちますが追加機能を提供またはお客様固有の要件を満たすようにプロシージャを作成するこれらの例は変更されません。 データベース設計の分割を使用するプログラムが、共有ネットワーク上の場所 (バック エンド データベース) の 1 つのデータベース内のテーブルすべてのクエリ、フォーム、レポート、マクロ、およびモジュールで別のデータベースクライアント上の各コンピューター (フロント エンド データベース)。フロント エンド データベース リンクすべてのバック エンド データベース テーブル。バック エンド データベースを移動する場合は、プログラムでエラーを発生します。それを検出すると、プログラムを有効にすることができます、バックエンド データベース ファイルが予期した場所から不足していると、プロンプトのです。ユーザーを新しい場所に。

次の例では、その方法について説明します。テーブルのデータをプログラムを再リンクします。このメソッドは、ユーザーがフォームを使用してください。開いた点を再リンクするのには、バック エンド テーブル、および他のオプションがをフォームします。データベースを開いたときに自動的にバック エンド リンクを確認します。

この資料で、マイクロソフトがあることを想定しています。 コモン ダイアログ Microsoft Office 2000 Developer で利用可能なコントロールは、版のツールです。このコントロールがあるない場合は、スキップ、 Browse() 関数の例です。

メモ: 使用する場合は、 コモン ダイアログ 管理計画、データベース アプリケーションを配布するにはコモン ダイアログ コントロールを追加するのには、パッケージと展開ウィザードを使用する必要があります。ファイル、Comdlg32.ocx、およびそのサポート Dll、セットアップ ファイルを使用します。詳細についてはパッケージおよび展開ウィザードの使用方法についての記事を参照してください。この資料の「関連情報」セクションで表示します。

バック エンド データベースのテーブルを再リンクする方法

注意: 次の使用例の手順を実行する場合は、このサンプルを変更します。Northwind.mdb をデータベースです。Northwind.mdb ファイルのバックアップを作成することができ、次の手順は、データベースのコピーにします。

  1. 新しい空の Access データベース ファイルを作成し、名前FrontEnd.mdb.
  2. で、 ファイル メニューのポイント 外部データを取り込み、し [テーブルなリンク.
  3. サンプル データベース Northwind.mdb を選択参照してをクリックして、 リンク.で、 [テーブルなリンク ダイアログ ボックス、クリックして すべてを選択します。、し [OK].
  4. 任意のテーブルに基づかない、次の新しいフォームを作成するかデザイン ビューでクエリします。
    フォーム: frmNewDataFile

    テキスト ボックス:
    名前: txtFileName
    幅: 3"
    コモン ダイアログ コントロール:
    名前: xDialog
    コマンド ボタン:
    名前: cmdBrowse
    標題: 参照.
    クリック: =Browse()
    コマンド ボタン:
    名前: cmdLinkNew
    タイトル: 更新リンク
    クリック: =Processtables()
    コマンド ボタン:
    名前: cmdCancel
    標題: キャンセル
    [OnClick]: [イベント プロシージャ]
    キャンセル: はい
  5. で、 ビュー メニューをクリックして コード.
  6. 入力するか、次の手順を貼り付けます。
    Private Sub cmdCancel_Click()
       On Error GoTo Err_cmdCancel_Click
     
       MsgBox "Link to new back-end cancelled", vbExclamation, "Cancel Refresh Link"
       DoCmd.Close acForm, Me.Name
    
    Exit_cmdCancel_Click:
       Exit Sub
    
    Err_cmdCancel_Click:
       MsgBox Err.Description
       Resume Exit_cmdCancel_Click
    
    End Sub
    					
  7. で、 デバッグ メニューをクリックして フロント エンドをコンパイルします。.
  8. FrmNewDataFile フォームを保存して閉じます。
  9. データベース ウィンドウをクリックします。 モジュール、し 新しい.
  10. で、 ツール メニューをクリックして 参照を選択 Microsoft DAO 3.6 オブジェクト ライブラリ 場合は、まだ選択されていないと、クリックして [OK].
  11. 入力するか、次のコードを貼り付けます。
    Dim UnProcessed As New Collection
           
    Public Function Browse()
        ' Prompts user for back-end database file name.
        On Error GoTo Err_Browse
        
        Dim strFilename As String
        Dim oDialog As Object
        Set oDialog = [Forms]![frmNewDatafile]!xDialog.Object
        
        With oDialog                    ' Ask for new file location.
            .DialogTitle = "Please Select New Data File"
            .Filter = "Access Database(*.mdb;*.mda;*.mde;*.mdw)|" & _
            "*.mdb; *.mda; *.mde; *.mdw|All(*.*)|*.*"
            .FilterIndex = 1
            .ShowOpen
            If Len(.FileName) > 0 Then  ' user responded, put selection into text box on form.
               [Forms]![frmNewDatafile]![txtFileName] = .FileName
            End If
        End With
    
    Exit_Browse:
        Exit Function
    
    Err_Browse:
        MsgBox Err.Description
        Resume Exit_Browse
    
    End Function
    
    Public Sub AppendTables()
    
        Dim db As DAO.Database, x As Variant
        Dim strTest As String
        ' Add names of all table with invalid links to the Unprocessed Collection.
        Set db = CurrentDb
        ClearAll
        For Each x In db.TableDefs
            If Len(x.Connect) > 1 And Len(Dir(Mid(x.Connect, 11))) = 0 Then
            ' connect string exists, but file does not
                 UnProcessed.Add Item:=x.Name, Key:=x.Name
            End If
        Next
    
    End Sub
    
    Public Function ProcessTables()
    
        Dim strTest As String
        On Error GoTo Err_BeginLink
        
        ' Call procedure to add all tables with broken links into a collection.
        AppendTables
        
        ' Test for existence of file name\directory selected in Common Dialog Control.
        strTest = Dir([Forms]![frmNewDatafile]![txtFileName])
        
        On Error GoTo Err_BeginLink
        If Len(strTest) = 0 Then   ' File not found.
            MsgBox "File not found. Please try again.", vbExclamation, "Link to new data file"
            Exit Function
        End If
        
        ' Begin relinking tables.
        Relinktables (strTest)
        ' Check to see if all tables have been relinked.
        CheckifComplete
        
        DoCmd.Echo True, "Done"
        If UnProcessed.Count < 1 Then
             MsgBox "Linking to new back-end data file was successful."
        Else
             MsgBox "Not All back-end tables were successfully relinked."
        End If
        DoCmd.Close acForm, [Forms]![frmNewDatafile].Name
        
    Exit_BeginLink:
        DoCmd.Echo True
        Exit Function
        
    Err_BeginLink:
        Debug.Print Err.Number
        If Err.Number = 457 Then
            ClearAll
            Resume Next
        End If
        MsgBox Err.Number & ": " & Err.Description
        Resume Exit_BeginLink
    
    End Function
    
    Public Sub ClearAll()
        Dim x
        ' Clear any and all names from the Unprocessed Collection.
        For Each x In UnProcessed
           UnProcessed.Remove (x)
        Next
    End Sub
    
    Public Function Relinktables(strFilename As String)
    
        Dim dbbackend As DAO.Database, dblocal As DAO.Database, ws As Workspace, x, y
        Dim tdlocal As DAO.TableDef
        
        On Error GoTo Err_Relink
        
        Set dbbackend = DBEngine(0).OpenDatabase(strFilename)
        Set dblocal = CurrentDb
        
        ' If the local linked table name is found in the back-end database
        ' we're looking at, Recreate & Refresh its connect string, and then
        ' remove its name from the Unprocessed collection.
         For Each x In UnProcessed
            If Len(dblocal.TableDefs(x).Connect) > 0 Then
                For Each y In dbbackend.TableDefs
                    If y.Name = x Then
                        Set tdlocal = dblocal.TableDefs(x)
                        tdlocal.Connect = ";DATABASE=" & _
                        Trim([Forms]![frmNewDatafile]![txtFileName])
                        tdlocal.RefreshLink
                        UnProcessed.Remove (x)
                    End If
                Next
            End If
        Next
    
    Exit_Relink:
        Exit Function
    
    Err_Relink:
        MsgBox Err.Number & ": " & Err.Description
        Resume Exit_Relink
    
    End Function
    
    Public Sub CheckifComplete()
    
        Dim strTest As String, y As String, notfound As String, x
        On Error GoTo Err_BeginLink
        
        ' If there are any names left in the unprocessed collection,
        ' then continue.
        If UnProcessed.Count > 0 Then
            For Each x In UnProcessed
                notfound = notfound & x & Chr(13)
            Next
            ' List the tables that have not yet been relinked.
            y = MsgBox("The following tables were not found in " & _
            Chr(13) & Chr(13) & [Forms]![frmNewDatafile]!txtFileName _
            & ":" & Chr(13) & Chr(13) & notfound & Chr(13) & _
            "Select another database that contains the additional tables?", _
            vbQuestion + vbYesNo, "Tables not found")
            
            If y = vbNo Then
                Exit Sub
            End If
            
            ' Bring the Common Dialog Control back up.
            Browse
            strTest = Dir([Forms]![frmNewDatafile]![txtFileName])
            If Len(strTest) = 0 Then   ' File not found.
                MsgBox "File not found. Please try again.", vbExclamation, _
                "Link to new data file"
                Exit Sub
           End If
           Debug.Print "Break"
           Relinktables (strTest)
        Else
           Exit Sub
        End If
        
        CheckifComplete
        
    Exit_BeginLink:
        DoCmd.Echo True   ' Just in case of error jump.
        DoCmd.Hourglass False
        Exit Sub
    
    Err_BeginLink:
        Debug.Print Err.Number
        If Err.Number = 457 Then
            ClearAll
            Resume Next
        End If
        MsgBox Err.Number & ": " & Err.Description
        Resume Exit_BeginLink
    
    End Sub
    					
  12. で、 デバッグ メニューをクリックして フロント エンドをコンパイルします。.
  13. としてモジュールを保存します。 RelinkCode、、それを閉じます。
  14. Northwind.mdb サンプル データベースの名前を変更または移動するにはハード_ディスク上の別のフォルダー、リンクされたテーブルに FrontEnd.mdb しないように更新する必要があります。
  15. FrmNewDataFile フォームを開くしをクリックして、 参照 ボタン クリックします。
  16. で、 新しいデータ ファイルを選択してください。 ダイアログボックス、その新しいフォルダーに Northwind.mdb を検索し、クリックしてください ファイルを開く.

    なお、データベースのパスとファイル名フォーム上のテキスト ボックスに表示されます。
  17. クリックして、 リンクを更新します。 フォーム上のボタン。

    表示されます、プロシージャが終了すると次のメッセージします。
    新しいバック エンド データ ファイルへのリンクが正常に終了しました。

リンク テーブルを確認するのには、スタートアップ フォームを作成します。

バックエンド テーブルへのリンクが自動的に毎回確認するにはFrontEnd.mdb データベースを開くには、非表示のフォームを作成できます。これらの手順を実行して目的:
  1. 任意のテーブルやクエリの設計に基づかない新しいフォームを作成します。表示します。
  2. で、 ビュー メニューをクリックして コード.
  3. フォームを開いたときに実行するのには、以下の手順を入力します。
    Private Sub Form_Open(Cancel As Integer)
          ' Tests a linked table for valid back-end.
          On Error GoTo Err_Form_Open
          Dim strTest As String, db As DAO.Database
          Dim td As DAO.TableDef
          Set db = CurrentDb
          For Each td In db.TableDefs
             If Len(td.Connect) > 0 Then   ' Is a linked table.
                On Error Resume Next   ' Turn off error trap.
                strTest = Dir(Mid(td.Connect, 11))   ' Check file name.
                On Error GoTo Err_Form_Open   ' Turn on error trap.
                If Len(strTest) = 0 Then   ' No matching file.
                   If MsgBox("Couldn't find the back-end file " & _
                      Mid(td.Connect, 11) & ". Please choose new data file.", _
                      vbExclamation + vbOKCancel + vbDefaultButton1, _
                      "Can't find backend data file.") = vbOK Then
                         DoCmd.OpenForm "frmNewDataFile"   ' Open prompt form.
                         DoCmd.Close acForm, Me.Name
                         Exit Sub                          ' to refresh links
                   Else
                      MsgBox "The linked tables can't find their source. " & _
                      "Please log onto network and restart the application."
                   End If
                End If
             End If
          Next   ' Loop to next tabledef.
          DoCmd.Close acForm, Me.Name
    Exit_Form_Open:
          Exit Sub
    Err_Form_Open:
          MsgBox Err.Number & ": " & Error.Description
          Resume Exit_Form_Open
          End Sub
    					
  4. で、 デバッグ メニューをクリックして フロント エンドをコンパイルします。.
  5. FrmCheckLink としては、フォームを保存し、閉じます。
  6. FrmCheckLink をスタートアップ フォームとして設定するのには ツール メニュー] をクリックします。 スタートアップを選択 frmCheckLink で、 フォーム/ページの表示 リストとクリック [OK].
  7. FrmCheckLink 非表示のフォームを作成するには、右クリックします。 frmCheckLink データベース ウィンドウをクリックします。 プロパティ ショートカット メニューの [選択] をクリックして、 非表示 チェック ボックスでは、 frmCheckLink プロパティ ダイアログ ボックスとクリック [OK].
  8. Northwind.mdb サンプル データベースを別のフォルダーに移動するのハード ディスクに FrontEnd.mdb リンク テーブルする必要がありますように更新します。
  9. FrontEnd.mdb を閉じてから再度開きます。

    確認します。次のエラー メッセージが表示されます。
    見つけることができません、バック エンド ファイル データベース ・ ファイル.新しいデータを選択してください。ファイルです。
    場所 データベース ・ ファイル パスとバックエンド データベースのファイル名。

    クリックすると、 [OK]、frmNewDataFile フォームは新しいバックエンドを選択が表示されます。データベースおよびテーブルのリンク] を更新します。クリックすると、 [キャンセル]は、次のエラー メッセージが表示されます。
    リンク テーブルのソースが見つかりませんでした。ネットワークにログオンし、再起動してください。プログラムです。

関連情報

カスタマイズの詳細については、開発者のソリューションのサンプル プログラムでリンク テーブルを更新する例(Solutions9.mdb)、記事を表示するのには、次の文書番号をクリックして、技術情報:
154397 ADT と持つ Solutions.mdb で RefreshTableLinks のモジュールを変更する方法
追加パッケージおよび展開ウィザードの詳細については文書番号をクリックします。次は、マイクロソフト サポート技術記事を表示するのには。
240956 : パッケージと展開ウィザードを使用、配布可能なアプリケーションを作成するようになりました
236143 : パッケージと展開ウィザードを起動する方法

プロパティ

文書番号: 209862 - 最終更新日: 2011年7月21日 - リビジョン: 5.0
キーワード:?
kberrmsg kbhowto kbinfo kbprogramming kbmt KB209862 KbMtja
機械翻訳の免責
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:209862
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com