VBA を使用して、データベース内の既存のテーブルを基にして Schema.ini ファイルを作成する方法を紹介します。
Access 97 あるいは、Access 95 では、区切り記号付きテキストファイルまたは、固定長テキスト ファイルをリンクしたり、直接開いたりすることができます。これらのテキストファイルのデータの読み取り、インポート、およびエクスポートを行うには、Schema.ini ファイルを作成して、その中に Text ISAM 情報を追加する必要があります。
Schema.ini には、テキスト ファイルの書式化方法、インポート時の読み取り方法、既定値のファイルへのエクスポート書式などの、テキスト データ ソースの仕様が記述されています。また、Schema.ini ファイルは、テキスト ファイルと同じフォルダに保存する必要があります。
サンプルをご覧いただく前に
この文書は Access 97 Access 95 のプログラミングツールを使用して Access 97 Access 95 のアプリケーションを作成でき、かつ Microsoft(R) VisualBasic(R) Programming System Applications Edition (以下 VBA) を十分に理解している方を対象とします。
VBA に関する詳細な情報はオンラインヘルプをご覧ください。
サンプル
以下のサンプルは、プロシージャ CreateSchemaFile の引数 sTblQryName で指定したカレントデータベースのテーブルやクエリーをテキスト形式 (区切り記号付き) でエクスポートし、引数 sPath で指定したフォルダに Schema.ini を作成します。
プロシージャ名:CreateSchemaFile
引数:bIncFldNames - True/Falseでテキスト ファイルの最初の行に列名の有無を
指定します。
sPath - Schema.ini が保存されるフォルダへの完全なパス。
sSectionName - Schema.ini セクション名。(テキスト ファイルの名前と
同じ)
sTblQryName - Schema.ini ファイルを作成するテーブルまたはクエリーの
名前。
-----------------------------------------------------------------------------
Public Function CreateSchemaFile(bIncFldNames As Boolean, sPath As String, _
sSectionName As String, sTblQryName As String) As Boolean
Dim Msg As String
Dim ws As Workspace, db As Database
Dim tblDef As TableDef, fldDef As Field
Dim i As Integer, Handle As Integer
Dim fldName As String, fldDataInfo As String
On Error GoTo CreateSchemaFile_Err
'テキスト形式(区切り記号付き)でエクスポートします。
DoCmd.TransferText acExportDelim, , sTblQryName, sPath & "\" & _
sSectionName, bIncFldNames
' スキーマ ファイルを開きます。
Handle = FreeFile
Open sPath & "\schema.ini" For Output Access Write As #Handle
' スキーマ ファイルのヘッダーを書き込みます。
Print #Handle, "[" & sSectionName & "]"
Print #Handle, "ColNameHeader=" & IIf(bIncFldNames, "True", "False")
Print #Handle, "CharacterSet=ANSI"
Print #Handle, "Format=CSVDelimited"
' スキーマ ファイルに情報を設定します。
Set db = CurrentDb()
Set tblDef = db.TableDefs(sTblQryName)
With tblDef
For i = 0 To .Fields.Count - 1
Set fldDef = .Fields(i)
With fldDef
fldName = .Name
Select Case .Type
Case dbBoolean
fldDataInfo = "Bit"
Case dbByte
fldDataInfo = "Byte"
Case dbInteger
fldDataInfo = "Short"
Case dbLong
fldDataInfo = "Long"
Case dbCurrency
fldDataInfo = "Currency"
Case dbSingle
fldDataInfo = "Single"
Case dbDouble
fldDataInfo = "Double"
Case dbDate
fldDataInfo = "DateTime"
Case dbText
fldDataInfo = "Char Width " & Format$(.Size)
Case dbLongBinary
fldDataInfo = "Memo"
Case dbMemo
fldDataInfo = "Memo"
Case dbGUID
fldDataInfo = "Char Width 16"
End Select
Print #Handle, "Col" & Format$(i + 1) & "=" & fldName & _
Space$(1) & fldDataInfo
End With
Next i
End With
MsgBox sPath & "SCHEMA.INI を作成しました。"
CreateSchemaFile = True
CreateSchemaFile_End:
Close Handle
Exit Function
CreateSchemaFile_Err:
Msg = "エラー番号 " & Format$(Err.Number) & vbCrLf
Msg = Msg & Err.Description
MsgBox Msg
Resume CreateSchemaFile_End
End Function
-----------------------------------------------------------------------------
操作手順
サンプル データベース Northwind.mdb の [運送会社] テーブルをテキスト形式 (区切り記号付き) で、c:\My Documents フォルダに UNSO.TXT というファイル名でエクスポートし、同じフォルダに Schema.iniファイル を作成します。その後、プロシージャ名 AddRecToText で作成した Schema.ini を使用してテキストファイルにレコードを追加します。
-
サンプル データベース Northwind.mdb を開きます。
-
データベース ウィンドウの [モジュール] タブをクリックして、モジュールを新規に作成します。
-
モジュール ウィンドウから、上記のサンプル プロシージャを入力します。
-
[デバッグ] メニューの [ロード済みモジュールのコンパイル] をクリックするか、ツール バーの [ロード済みモジュールのコンパイル] ボタンをクリックします。
-
エラーが表示された場合は、入力ミスがないかどうかを再度チェックしてください。
-
[表示] メニューの [デバッグ ウィンドウ] をクリックするか、ツール バーの [デバッグ ウィンドウ] ボタンをクリックして、デバッグ ウィンドウを表示します。
-
プロシージャを実行します。デバッグ ウィンドウに以下のように入力して、Enter キーを押します。
?CreateSchemaFile(False, "C:\My Documents", "UNSO.TXT", "運送会社")
-
メモ帳またはワードパッドなどのテキスト エディタで、作成した Schema.ini ファイルを開きます。ファイルには以下の情報が含まれています。
------------------------------
[UNSO.TXT]
ColNameHeader=False
CharacterSet=ANSI
Format=CSVDelimited
Col1=運送コード Long
Col2=運送会社 Char Width 40
Col3=電話番号 Char Width 24
------------------------------
-
上記の手順で作成した [UNSO.TXT] テキストファイルにレコードを追加するプロシージャを作成します。
-
データベース ウィンドウの [モジュール] タブをクリックして、モジュールを新規に作成します。
-
モジュール ウィンドウから、以下のサンプル プロシージャを入力します。
-------------------------------------------------------------------------
Sub AddRecToText()
Dim db As Database
Dim rs As Recordset
Dim i As Integer
Set db = DBEngine(0).OpenDatabase("C:\my documents", True, False, "Text;")
Set rs = db.OpenRecordset("unso")
rs.AddNew
rs!運送コード = 5
rs!運送会社 = "MS 宅配"
rs!電話番号 = "(03) 1111-xxxx"
rs.Update
End Sub
------------------------------------------------------------------------
-
[デバッグ] メニューの [ロード済みモジュールのコンパイル] をクリックするか、ツール バーの [ロード済みモジュールのコンパイル] ボタンをクリックします。
-
エラーが表示された場合は、入力ミスがないかどうかを再度チェックしてください。
-
[表示] メニューの [デバッグ ウィンドウ] をクリックするか、ツール バーの [デバッグ ウィンドウ] ボタンをクリックして、デバッグ ウィンドウを表示します。
-
プロシージャを実行します。デバッグ ウィンドウに以下のように入力して、Enter キーを押します。
AddRecToText
-
メモ帳またはワードパッドなどのテキスト エディタで UNSO.TXT を開きます。1 レコード追加されていることが確認できます。
参照
以下は、Access 97 のヘルプで検索するときのキーワードです。
-
フォームのタブ オーダーの設定の詳細
「ドライバの初期化」で検索し、「テキスト データ ソース ドライバの初期化」
この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID
155512?
(http://support.microsoft.com/kb/155512/EN-US/
)
(最終更新日 1997-04-14) をもとに作成したものです。