実現したいこと
Microsoft Access 2021(.accdb)で作成したaccessファイルを他のPCにあるMicrosoft Access 2016 runtimeで起動したいのですが、エラーが発生してしまい実行することができません。
自分のPCで開いた時には発生しなかったのですが、どうすれば解決できるでしょうか?
初心者で申し訳ございませんが、ご教授の方よろしくお願いします。
発生している問題・分からないこと
テーブルを開きボタンをクリック時に発生するVBAが実行されると、下記のエラーが発生しています。
自分のパソコンではエラーは表示されず実行できましたが、別のパソコンで同じaccessのデータを実行時にエラーが出ました。
エラーメッセージ
error
1「実行時エラーが発生したため、このアプリケーションの実行は中断しました。 2アプリケーションを続行できません。システムはシャットダウンされます。」
該当のソースコード
'ボタンを押した際のイベント Private Sub btnログイン_Click() Dim strSQL As String Dim rs As ADODB.Recordset Dim cn As ADODB.Connection Dim str社員コード As String Dim strパスワード As String Dim int権限区分 As Integer str社員コード = Me.txt社員コード & "" strパスワード = Me.txtパスワード & "" strSQL = "SELECT [社員リスト].[社員コード], [社員リスト].[社員名], [パスワードリスト].[パスワード], [パスワードリスト].[権限区分]" strSQL = strSQL & "FROM [社員リスト] LEFT JOIN [パスワードリスト] ON [社員リスト].[社員コード] = [パスワードリスト].[社員コード]" strSQL = strSQL & "WHERE [社員リスト].[社員コード] = '" & str社員コード & "' AND [パスワードリスト].[パスワード] = '" & strパスワード & "' " 'Call ADO内部接続 'またはADO外部接続 Set cn = CurrentProject.AccessConnection Set rs = New ADODB.Recordset rs.Open strSQL, cn, adOpenKeyset, adLockOptimistic If rs.EOF = False Then MsgBox "ようこそ" int権限区分 = rs![権限区分] 'メニューを開く DoCmd.OpenForm "メインメニュー" '権限を確認して「環境設定ボタン」を制御する If int権限区分 = 9 Then '0:一般ユーザー 9:管理者 Forms.メインメニュー.btn設定.Enabled = True Else Forms.メインメニュー.btn設定.Enabled = False End If 'この画面を閉じる DoCmd.Close acForm, Me.Name Else MsgBox "データは存在しません" End If rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub 'フォームの[開く時]イベントの処理 Public Function RefreshAllTableLinks() As Boolean On Error GoTo Err_RefreshAllTableLinks '既定の戻り値(失敗時)は False RefreshAllTableLinks = False Dim db As DAO.Database Dim tdf As DAO.TableDef Dim strConnect As String Dim lngRefreshedCount As Long strConnect = "ODBC;DRIVER=SQL Server との接続に用いるドライバー名;" & _ "SERVER=SQL Server インスタンス名;" & _ "UID=接続ユーザー名;" & _ "PWD=パスワード;" & _ "DATABASE=データベース名;" Debug.Print strConnect Application.Echo False, "リンクテーブルの再リンクを実行しています" 'カレントデータベースの参照 Set db = CurrentDb 'データベースの全てのテーブル定義を順次参照する For Each tdf In db.TableDefs 'ODBCリンクテーブルである場合 If (Not tdf.Name Like "MSys*") And (tdf.Connect Like "ODBC;*") Then Debug.Print "テーブル定義[" & tdf.Name & "]を参照中" '接続文字列を更新 tdf.Connect = strConnect 'リンクのリフレッシュ tdf.RefreshLink '再リンクカウンターをインクリメント lngRefreshedCount = lngRefreshedCount + 1 Debug.Print "再リンク成功" End If Next Debug.Print lngRefreshedCount & " 個のリンクテーブルの再リンクを実行しました。" Application.Echo False, "パススルークエリの接続文字列の再設定を実行しています" Dim qdf As DAO.QueryDef lngRefreshedCount = 0 'データベースの全てのクエリ定義を順次参照する For Each qdf In db.QueryDefs 'パススルークエリである場合 If (qdf.Type = dbQSQLPassThrough) And (qdf.Connect Like "ODBC;*") Then Debug.Print "パススルークエリ[" & qdf.Name & "]を参照中" '接続文字列を更新 qdf.Connect = strConnect '再リンクカウンターをインクリメント lngRefreshedCount = lngRefreshedCount + 1 Debug.Print "接続文字列の再設定成功" End If Next Debug.Print lngRefreshedCount & " 個のパススルークエリの接続文字列の再設定を実行しました。" '全て成功したら True を返す RefreshAllTableLinks = True Exit_RefreshAllTableLinks: Application.Echo True, "" Set tdf = Nothing Set db = Nothing Exit Function 'エラー時処理 Err_RefreshAllTableLinks: Application.Echo True, "" Dim strErrMsg As String strErrMsg = "再リンク処理中に以下の実行時エラーが発生しました。" & vbCrLf & _ Err.Number & ": " & Err.Description Debug.Print strErrMsg MsgBox strErrMsg, _ vbCritical, _ "実行時エラー(RefreshAllTableLinks)" Resume Exit_RefreshAllTableLinks End Function 'フォームの[開く時]イベント Private Sub Form_Open(Cancel As Integer) 'リンクテーブルの再リンク処理を実行 If RefreshAllTableLinks() = False Then '失敗した場合はこのイベントをキャンセルする(このフォームを開くのを止める) Cancel = True Exit Sub End If End Sub
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
https://t-yumi.jp/gengo/access/201809251222501031.html
→Set rec = db.OpenRecordset(strSql, dbOpenDynaset)がないため変更不可
https://pentan.net/access-pro-runtime-kidouhouhou/
→自分のPCで.accdrに変更し実行したがエラーは起きなかった
・再起動→意味なし
・データベースの最適化、修復→意味なし
補足
自分のPC
Microsoft Access 2021(.accdb)
・ODBC プラットフォーム 32/64ビット ドライバー SQL Server
・リンクテーブルにてODBC接続
・Windows11
・64bit
・参照設定
エラーが起きるPC
・Microsoft Access 2016 runtime
・Windows11

回答2件
あなたの回答
tips
プレビュー