|

|
|
 |
5.9 エクスポート、エクスポート |
 |
|
|
|
|
|
他のMDBファイルから自分の中にフォームやレポートやモジュールなど何らかのオブジェクトを取り込みたいとき、または逆に自分が持っているフォームやレポートやモジュールなどを他のMDBへ送り込みたいときの方法です。アクセスオブジェクトのDoCmd.TransferDatabaseというメソッドを使います。
それにしてもこのメソッド、差分を配布するときなんて超便利な気がしますが…誤った使い方をすると、とんでもないことになりますのでご注意を(汗)
|
|
|
|
|
|
|
|
|
|
DoCmd.TransferDatabaseメソッドの使い方です。こんな順序でパラメタを指定します。
アクセスオブジェクト.DoCmd.TransferDatabase (1) ,"Microsoft Access" ,(2) ,(3) ,(4) ,(5)
|
※Microsoft Accessという指定は、MDBファイルを!という意味
まずインポートする場合ですが、左から(1)インポートを指定、(2)インポート元MDBファイルのフルパス、(3)インポートするオブジェクトのタイプ、(4)インポート元(相手側)のオブジェクトの名前、(5)インポート先(自分側)でのオブジェクトの名前を指定します。インポート時に自分側に同じ名前のオブジェクトがあると、名前の後ろに1、2、3…などが付き(自分側では)新たなオブジェクトとして作成されます。
次にエクスポートする場合ですが、左から(1)エクスポートを指定、(2)エクスポート先MDBファイルのフルパス、(3)エクスポートするオブジェクトのタイプ、(4)がエクスポート元(自分側)でのオブジェクトの名前、(5)エクスポート先(相手側)でのオブジェクトの名前を指定しますエクスポート時に相手側に同じ名前のオブジェクトがあると、そのオブジェクトは上書きされます。
これらを踏まえた上で、定数などで決まり切った内容を指定する部分は2ヶ所。まず、(2)のインポートやエクスポートの指定は、次の内容を指定します。
| acImport |
インポートするときの指定 |
| acExport |
エクスポートするときの指定 |
※他にもありますが省略しました
それと、(3)のインポートまたはエクスポートするオブジェクトのタイプには、以下のようなものがあります。
| acTable |
テーブル |
| acQuery |
クエリー |
| acForm |
フォーム |
| acReport |
レポート |
| acMacro |
マクロ |
| acModule |
モジュール |
※他にもありますが省略しました
|
|
|
|
|
|
|
|
|
|
DoCmd.TransferDatabaseメソッドの使い方です。例では、c:\happyというフォルダに入っている全てのMDBファイルの共通関数というモジュールを、エクスポートを使って新しいモジュール(c:\happy\temp\island.mdbの中にある)に置き換える処理(A)をしています。早い話が、自動バージョンアップです。
また、置き換える前には、インポート機能を使い前のバージョンのモジュールをc:\happy\temp\island.mdbの中へバックアップする処理(@)も行います。
こっちがメイン(実行する方)。ファイル名はTransferMain.wsfで作成
|
<job id="AccessJob">
<!-- Accessのライブラリを宣言(Accessの定数を使うため) -->
<reference guid="4AFFC9A0-5F99-101B-AF4E-00AA003F0F07"></reference>
<script language="VBScript" src="./Transfer.vbs"></script>
<script language="VBScript">
'主となる処理は509.vbsにあるので呼び出します
Call prcMain
</script>
</job>
|
こっちの処理で行っているBフォルダ内にあるファイルを検索するについては、3.2 フォルダの中を探るとの合わせ技です。詳しいことは、そちらを参照してください。
ちなみに、Accessを終了する方法は5.11 Accessを終了するを見てくださいね。
こっちは実際の処理を行う方。ファイル名はTransfer.vbsで作成
|
Option Explicit
Dim objAccess
Sub prcMain()
Dim objApl
Dim objFolder
Dim objFolderItems
Dim objItem
Dim i
'シェルアプリケーションオブジェクトを作成します
Set objApl = WScript.CreateObject("Shell.Application")
'Accessオブジェクトを作成します
Set objAccess = CreateObject("Access.Application")
'Access画面を表示します
objAccess.Visible = True
'元となるMDBファイルを開きます
objAccess.OpenCurrentDatabase("c:\happy\temp\island.mdb")
'探りを入れたいフォルダのオブジェクトを作成します
Set objFolder = objApl.NameSpace("C:\happy")
'フォルダオブジェクトから、入っているファイルやフォルダの全情報を取得します
Set objFolderItems = objFolder.Items()
'Bフォルダ内にあるファイルを検索する。何個入っていたかは、Countで参照
For i=0 To objFolderItems.Count-1
'ファイルやフォルダの情報を1コ取り出します
Set objItem = objFolderItems.Item(i)
'取り出した物がファイルのとき
If objItem.IsFolder = False Then
'mdbファイルならモジュールの入れ替え処理へ
if Right(objItem.Name,3)="mdb" Then
Call prcTransferDatabase (objItem.Path)
End If
End If
Next
'MDBファイルを閉じます
objAccess.CloseCurrentDatabase
Set objItem = Nothing
Set objFolderItems = Nothing
Set objFolder = Nothing
Set objApl = Nothing
Set objAccess = Nothing
End Sub
Sub prcTransferDatabase(strMDBPath)
'@インポートで置き換え前のモジュール(業務関数)のバックアップを取ります
objAccess.DoCmd.TransferDatabase acImport _
,"Microsoft Access" _
,strMDBPath _
,acModule _
,"共通関数" _
,"共通関数"
'Aエクスポートでモジュール(業務関数)を置き換えます
objAccess.DoCmd.TransferDatabase acExport _
,"Microsoft Access" _
,strMDBPath _
,acModule _
,"共通関数" _
,"共通関数"
End Sub
|
※例では、Accessの画面をわざと表示しています
|
|
|
|
|