スキップしてメイン コンテンツに移動

リンクテーブルの自動更新

MS-Access で、リンクテーブルでデータテーブルを別ファイル等に設定していた場合、端末や場所を移動した場合に、リンクテーブルでデータテーブルを指定し直す必要があります。

これをサボろう。以下コード。



Private Sub LinkTableRenew()
    Dim strMsg as String
    strMsg = "リンクテーブルを自動更新しますか?" & vbcrlf & vbcrlf & _
      "ネットワーク先への接続試行がある場合、かなり時間がかかる場合があります。" & _
      "進捗状況は左下のステータスバー内メッセージで確認してください。"
    If MsgBox(strMsg, vbYesNo + vbDefaultButton2 + vbQuestion, "テーブル自動更新確認") = vbNo Then Exit Sub
   
   
    Dim objDB       As DAO.Database
    Dim objTB       As DAO.TableDef
    Dim aryTBpath   As Variant
    Dim strTBpath   As Variant
    Dim strCpath1   As String
    Dim strCpath2   As String
    Dim strCpath3   As String
   
    Set objDB = CurrentDb
   
    '-- カレントパスに置いた場合、こういった書き方も出来るっつー例
    strCpath1 = CurrentProject.Path & "hoge_db1.accdb"
    strCpath2 = CurrentProject.Path & "hoge_db2.accdb"
    strCpath3 = CurrentProject.Path & "hoge_dbRef.accdb"
   
    '-- 接続試行をファイル名も含めたフルパスで表記。先に書いたものからヒットした順にリンクを張る。
    aryTBpath = Array("C:\Documents and Settings\hoge\My Documents\access\hoge_be.accdb", _
                      "\\HogeServer\db\hoge_db.accdb", _
                      strCpath1, strCpath2, strCpath3)
   
    On Error Resume Next    'ネットワークエラーが出ても文句を言わない
    For Each objTB In objDB.TableDefs
        For Each strTBpath In aryTBpath
            If objTB.Connect <> "" Then          'リンクテーブルだけ処理
                objTB.Connect = ";DATABASE=" & CStr(strTBpath) & ";TABLE=" & objTB.Name
                objTB.RefreshLink
                strMsg = objTB.Name & "のリンク自動更新中です..."
                SysCmd acSysCmdSetStatus, strMsg
            End If
        Next
        strMsg = objTB.Name & "のリンク自動更新に成功!"
        SysCmd acSysCmdSetStatus, strMsg
    Next objTB
    objDB.Close: Set objDB = Nothing
    SysCmd acSysCmdClearStatus
   
    MsgBox "リンクテーブルの更新が終了しました。", vbOKOnly + vbInformation, "更新終了"
End Sub
 これで、ボタン一つで予め設定したデータベースにリンクを張り直せるはずです。設定するデータベースは、テーブルから読み直すように変更するなりご自由に。
……しかし、このブログ、内容が全然一貫してねぇ……

コメント

人気の投稿

ドコモマーケットからdメニューへ

何処に何があるのかさっぱりで、ユーザから好評だったドコモマーケットがdメニューへリニューアルされました。 自分が見つけることが出来なかったのかもしれませんが、 お客様サポートからspモード決済や月額課金状況のページへ辿ることが出来なくなってませんか? どうしてこういう事をするのかなぁ? spモード決済の履歴をたどるメニューは、マイメニューから入っていくようになっています。 dメニュートップページ 「マイメニュー」を選択すると このページへ飛んで、継続課金一覧や履歴を確認できるリンクがでる マイメニューに、何が表示されるのか知らされていないのに、こんな項目を置かれても。役割や名称を見ても、普通はお客様サポートへアクセスするでしょうに。 ……ただ理解できないのが、継続課金一覧等からログインして表示されるページから、用意されている「戻る」をタップすると、お客様サポートのページに戻るんですよね。なぜこのページをお客様サポートから確認できるページにしなかったのだろう?コンテンツ作るのに、失敗してるのかしらん? わかりやすくしたつもりなのかもしれません。 ただ、エンドユーザが迷うようなサポートページを提供してどうする。 身も蓋もないことですが、そもそもspモードで接続している場合はマイメニューこそトップページにすべきでしょう。dメニューはマイメニューから見たい人だけ行けばいい。

Edge 入れたくないでござる

PowerShell によるアンインストールも塞がれ、遂に消す方法がなくなってしまった。勝手に入るし。だから要らんのだ。 Windows10 22H2 に、Edge を入れたくないでござる、絶対に Edge を入れたくないでござる! なので。昔ながらの古典的な方法で、二度と勝手に入らないようにした。 まず削除だが、C:\Program Files (x86)\Microsoft にある、Edge、EdgeCore、EdgeWebView の3つのフォルダを削除。 アンインストーラが機能しないんだから、フォルダごとバッサリやってもいいよね? Microsoft365Apps で使う? いらねーよあんなゴミ。 他にインストールしてあるブラウザ上で開けばいい。PWA として動かすにしても、勝手にインストールしやがる EdgeWebView 上で動かす必要はない。 Windows10 22h2 なら、EdgeWebView を消しても、Microsoft Store は動く。Windows 11 は知らん。いつになったら安定するんだ、Windows11 は。23/11 現在、まだ使いもんにならん。 Win+x キーを押して、WindowsPowerShell(管理者)を開き、次の3行を入力。 echo "" >"C:\Program Files (x86)\Microsoft\Edge" echo "" >"C:\Program Files (x86)\Microsoft\EdgeCore" echo "" >"C:\Program Files (x86)\Microsoft\EdgeWebView" ファイル置いとけば中身入れらんないから、インストールもされまい理論。 タスクスケジューラには何もなかったが、サービスに、 MicrosoftEdgeElevationService っていうクソがいたので無効に。しつけーわ、ほんと。 追記: 11 でも一応可能。MicrosoftStore も問題はないが、EdgeWebView を内蔵せずに利用するアプリは動作しなくなる(Microsoft PC Manager とか。PDF24 はE...