| Access 覚書 -- データベース操作関連 |
1.他のデータベースへのリ
ンクをチェックする。 | |
|
データ用のデータベーとのプログラム用データベースを分離した場合、ディレクトリを移動したり他のマシンにコピーするとテーブルへのリンクが引き継がれ
ず、毎回「リンクテーブルマネージャ」で再度リンクしなおさなければなりません。
その不便さを解消するため
に、起動時にデータ用のデータベースの存在を確認し、存在すればリンクを張りなおすルーチンを作ってみました。データ用テーブルがない場合にはエラーメッ
セージを表示します。
エ
ラーが返されたら、プログラムを終了するなどの処理をつけておくと便利です。
以下のサンプルコードはプログラム用データベースのデータ用データベースを同一ディレクトリの置くことを基本にしています。 | |
| ' データベースリンクチェック Public Function CheckLink() As Boolean Dim obj As DAO.TableDef ' テーブル定義オブジェクト Dim strDBName As String ' プログラムデータベースフルパス Dim strDir As String ' 現在のリンク先 Dim strDir1 As String ' データ用データベースのディレクトリ Dim strConn As String ' 接続文字列 On Error GoTo ERRTRAP ' プログラムデータベースのフルパス取得 strDBName = CurrentDb.Name ' ディレクトリの切り出し strDir1 = Mid(strDBName, 1, Len(strDBName) - Len(Dir(strDBName))) ' データ用データベースの存在確認 If Dir(strDir1 & "TestData.mdb") = "" Then ' 存在しない場合はエラーメッセージを表示して終了 MsgBox "データ保存用データベースがありません", vbOKOnly, "データベースエラー" CheckLink = False Exit Function End If ' データベースが存在した場合はリンク先をチェックする。 For Each obj In CurrentDb.TableDefs ' Connectプロパティを調べてリンクテーブルのみを対象にする。 If obj.Connect <> "" Then ' 先頭の「;DATABASE=」を取り除く strDir = Mid(obj.Connect, 11, Len(obj.Connect) - 10) ' ファイル名を取り除いてディレクトリ部分のみとする strDir = Mid(strDir, 1, Len(strDir) - Len(Dir(strDir))) ' 現在のリンク先ディレクトリとプログラムデータベースのディレクトリを比較 If strDir <> strDir1 Then ' 異なっていればリンク先を訂正する strConn = ";DATABASE=" & strDir1 & "TestData.mdb" obj.Connect = strConn obj.RefreshLink End If End If Next CheckLink = True Exit Function ERRTRAP: MsgBox Err.Description, vbOKOnly, "CheckLink" CheckLink=False End Function | |
| 2. データベースをバックアップする。 Access mdbの場合 DAOを使用 | |
| mdbデータベースをプログラムmdbから操作してバックアップする。 最適化関数 DBEngine.CompactDatabaseを使用している。 バックアップ先のファイル名は「年、月、日、時、分、秒」を付加している。 | |
| ' データベースバックアップ Public Function fBackUp(strPath As String) As Boolean Dim strCompDB As String Dim strDir1 As String Dim strBaseDB As String On Error GoTo ERRTRAP strCompDB = strPath & "\TestData" & Format(Now, "yyyymmddhhnnss") & ".mdb" strDir1 = CurrentDb.Name strDir1 = Mid(strDir1, 1, Len(strDir1) - Len(Dir(strDir1))) strBaseDB = strDir1 & "TestData.mdb" DBEngine.CompactDatabase strBaseDB, strCompDB fBackUp = True Exit Function ERRTRAP: MsgBox Err.Description, vbOKOnly, "fBackUp" fBackUp=False End Function | |
| 3. データベースをバックアップする。 Access adpの場合 SQLServerを使用 | |
| adp形式のAccessプログラムでリンク先のSQLServerデータベースをバックアップする。 T-SQLのBACKUPコマンドを使用している。 このバックアップはディスクに対して全体バックアップを行う。 一部ファイルのみをバックアップする場合や差分バックアップでは指定が異なる。 | |
| ' データベースバックアップ関数 Public Function fDBBackUp(strPath As String) As Boolean ' strPath = バックアップ先のディレクトリ Dim strSQL As String On Error GoTo ERRTRAP Call SetCon ' cDBName = バックアップするデータベース名 ' cBackUpFile = バックアップファイル名 ' cBackUpName = バックアップセットの名前 strSQL = "BACKUP DATABASE [" & cDBName & "] TO DISK = N'" strSQL = strSQL & strPath & "\" & cBackUpFile & "' WITH NOINIT , NOUNLOAD , " strSQL = strSQL & "Name = N'" & cBackUpName & "', NOSKIP , STATS = 10, NOFORMAT " con.Execute strSQL Call CloseCon DoEvents fDBBackUp = True Exit Function ERRTRAP: MsgBox Err.Number & " " & Err.Description, vbOKOnly, "fDBBackUp" fDBBackUp = False End Function | |
| 4.VBAの編集時、文字列置換ダイアログで日本語を入力すると 文字化けする。 | |
| 変換元、変換後どちらも、テキストエディタなどを使って必要な文字列を入力。それをコピー&ペーストでコンボボックスに貼り付ける。 | |