保存された仕様の接続文字列パラメータ
Accessは、システムテーブルMSysIMEXSpecs
を使用して、テキストファイルのスキーマを記述する2番目の方法を提供します。 およびMSysIMEXColumns
仕様を保存します。前回の記事では、schema.ini
について説明しました。 テキストファイルの構造を説明するために使用できます。 schema.ini
暗黙的に参照される外部テキストファイルが含まれていましたが、システムテーブルでは、外部依存関係はありません。いくつかの重複はありますが、構造はかなり異なります。
MSysIMEXSpecs
およびMSysIMEXColumns
システムテーブル
テキストファイルと同じフォルダに存在する外部schema.iniに依存する代わりに、Accessデータベース内に保存された仕様を参照することにより、任意のパスのテキストファイルの仕様を提供できます。インポートまたはエクスポートウィザードを使用すると、Advanced
を使用して仕様を保存またはロードできます。 ボタン。
詳細ボタンをクリックすると、仕様ダイアログが表示されます。仕様のロードまたは保存に加えて、表示されるダイアログを使用して仕様をカスタマイズすることもできます。
仕様が保存されるたびに、両方のMSysIMEXSpecs
に書き込まれます。 およびMSysIMEXColumns
システムテーブル。テーブルは新しいAccessファイルには存在せず、最初にのみ作成されます。さらに、これらのテーブルからデータを編集または削除することもできます。それでも、それらはシステムテーブルであるため、デフォルトでは非表示になっています。ナビゲーションペインにそれらを表示する場合は、[ナビゲーションオプション]に移動して、非表示オブジェクトとシステムオブジェクトの両方の表示を有効にする必要があります。
ダイアログで使用可能なオプションをschema.ini
にあるオプションと比較すると 、いくつかの顕著な違いを見ることができます。一例として、schema.ini
日付または通貨金額のフォーマット方法に関して、より多くの選択肢があります。保存された仕様では、可能なフォーマットのプリセットリストからのみ日付フォーマットを制御できます。データ型を使用して、フォーマットに関係なく列を通貨としてインポートする必要があることを示すため、通貨金額の直接オプションはありません。したがって、システムテーブルのオプションはschema.iniと比較して単純です。次に、テーブルの構造を確認します。
MSysIMEXSpecs
構造
この表は、保存された仕様のセットを表しています。この表は、各行について、schema.ini
の2番目のセクションと同様に、ファイルの全体的な形式を示しています。 。ただし、考慮する必要のあるさまざまなオプションがあります。
-
DateDelim
:日付の区切り文字を識別します。通常は/
または-
。 1文字または0文字のみです。 -
DateFourDigitYear
:日付が年の4桁でフォーマットされているかどうかを示すYes/Noフィールド。 yesに設定すると、10/10/20
のような値になります 有効な日付とは見なされません。 -
DateLeadingZeros
:日付に先行ゼロがあるかどうかを示す別の[はい/いいえ]フィールド。 -
DateOrder
:使用する日付の書式を決定します。次のコードが有効です:
-
0
:DMY -
1
:DYM
-
2
:MDY -
3
:MYD
-
4
:YDM -
5
:YMD
-
-
DecimalPoint
:10進数の整数部と小数部を区切る文字を示します。正確に1文字にする必要があります。 -
FieldSeparator
:テキストファイルのフィールドを区切ります。 CSVファイルの場合、,
になります。 (コンマ文字)。また、1文字だけである必要があります。 -
FileType
:schema.ini
に似ています のCharacterSet
。前の記事で述べたように、Windowsマシンでサポートされているすべての可能なコードページを見つけることができます。レジストリキーComputer\HKEY_CLASSES_ROOT\MIME\Database\Codepage\
を調べてください。 。テキストファイルのエンコーディングを識別します。同じコードページ識別子を使用できます。ただし、1つの問題があります。FileType
Integer
として定義されています 。したがって、コードページ65000(Unicodeなど)は-536として報告されます。 32767より大きいコードページ識別子を変換するには、数式CInt("&H" & Hex(x))
を使用できます。 操作を逆にするには、CLng("&H" & Hex(x))
。たとえば、コードページ65000を変換すると、CInt("&H" & Hex(65000))
が実行されます。 -536を生成します。逆にするには、CLng("&H" & Hex(-536))
65000を取り戻すために。 -
SpecID
:テーブルの自動番号付け。これはテーブルの主キーではないことに注意してください。この列は、MSysIMEXColumns.SpecID
で使用されます レコードを関連付けるため。ただし、2つのテーブル間に外部キーの制約がないため、孤立した削除が発生する可能性があります。 -
SpecName
:テーブルの主キー。仕様を一意に識別します。仕様を保存するたびに、指定した名前がこのフィールドに記録されます。ウィザードを使用してインポートまたはエクスポートすると、Advanced
を使用しなかった場合でも、Accessによって新しい仕様が自動的に作成される場合があります。 明示的に保存します。 -
SpecType
:1
のいずれかのみになります 区切られたファイルまたは2
を示す 固定幅のファイルを示します。 -
StartRow
:インポートのスキャンを開始するテキストファイルの行を決定します。これは任意の数にすることができるため、ファイルの先頭の数行をスキップすることができます。不適合なヘッダーがある不正な形式のテキストファイルに役立ちます。 -
TextDelim
:テキスト値を区切る単一の文字。テキストが区切られていない場合は省略できます。テキストファイルの形式を制御できる場合は、通常、テキスト区切り文字を使用することをお勧めします。テキスト内にフィールド区切り文字(カンマなど)が含まれている場合でも、テキスト区切り文字を含むテキストファイルは整形式のままです。 -
TimeDelim
:その時間に使用された区切り文字を示します。任意の1文字にすることも、空白にすることもでき、デフォルトは:
です。 (コロン文字)。
MSysIMEXColumns
構造
この表では、テキストファイルの個々の列と属性について説明しています。これは、schema.ini
の3番目のセクションにほぼ対応しています。 。ただし、schema.ini
には存在しないインデックス作成などの追加オプションがあります 。
Attributes
: わからない。私のテストでは、0
以外のものになることはありませんでした 。それが何のために、そしてそれがどのように使われることができるかを知っているならば、コメントを残してください。-
DataType
:列のデータ型。番号はDAO.DataTypeEnumに対応している必要があります。 -
FieldName
:列の名前。 AccessはデフォルトでFieldN
に設定されることに注意してください ここで、N
は正の整数です。 -
IndexType
:0
の可能性があります インデックスがないことを示すには、1
通常のインデックスまたは2
を示します 一意のインデックスを示します。 -
SkipColumns
:ブール値は、列をスキップする必要があるかどうかを示します。スキップすると、クエリや読み取りに使用できなくなります。 -
SpecID
:MSysIMEXSpecs.SpecID
に対応します 自動番号。 2つのテーブル間に外部キー制約がないことに注意してください。レコードを削除した場合は、MSysIMEXSpecs
から孤立したレコードが存在する可能性があります テーブル。 Start
:テキストファイルで列がいつ開始するかを示す整数。固定幅のファイルにとって重要です。区切られたファイルの場合、Accessは、フィールドが見つかった最初の行の列位置を引き続き使用して、開始を決定します。さらに、Accessは列を使用して、列の順序を示します。Width
:列のサイズを管理する別の整数。固定幅のファイルでは、これも重要です。 Microsoft Accessは、テキストやバイナリなどの可変長データ型の情報を使用して、区切られたファイルでもそれに応じて列のサイズを変更することに注意してください。
仕様を使用した接続文字列:DSN
パラメータ
前回の記事では、schema.iniファイルを使用するために接続文字列に変更がないことを確認しました。 schema.ini
を暗黙的に参照しました リンクまたは開いているテキストファイルが存在するのと同じフォルダに存在することを確認するだけです。ただし、システムから保存された仕様を使用するには、接続で情報を提供する必要があります。これを行うには、DSN
にデータを入力します パラメータ。値は、MSysIMEXSpecs.SpecName
に記録されているように、保存された仕様の名前を参照する必要があります 列。
サンプルは次のとおりです:
Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Text;DSN=Products Link Specification;IMEX=1;DATABASE=C:\Links")
アクセスでは、DSNパラメーターとIMEXパラメーターの両方を接続文字列で指定する必要があります。 IMEX
を省略しようとした場合 パラメータを指定すると、仕様がMSysIMEXSpecs
に存在していても、Accessが仕様を見つけられないというエラーが発生します。 テーブル。また、テーブルにはSpecName
のレコードが含まれている必要があります。 DSN
で指定されたものと同じ値を含む パラメータ。
以前の記事で述べたように、個々のテキストファイルはフォルダの「データベース」内の「テーブル」として扱われます。したがって、接続文字列は特定のテキストファイルを指していませんが、接続文字列は、接続を介して開かれるすべてのテキストファイルで指定された仕様を使用します。
同じ記事で説明されているように他のパラメータを使用することも可能ですが、競合する場合は、保存された仕様が接続文字列よりも優先されることに注意してください。そのため、テキストファイルに正常に接続するために必要な最小限のパラメータセットを使用し、保存された仕様にテキストファイルの読み取り方法を説明させるのが最善です。
結論
外部ファイルを使用せずにテキストファイルの構造を説明する別の方法を学びました。 Accessが2つのシステムテーブルを使用して仕様を格納する方法を確認しました。最後に、DSN
を使用して保存された仕様を指定する方法も学習しました。 パラメータ。この時点で、Accessでテキストファイルをリンクしたり開いたりするために知っておく必要のあるすべてのことを説明しました。次の記事では、シリーズの残りの部分で学んだ情報をまとめます。また、コードなしのアプローチのためにAccessクエリで接続文字列を使用する方法についても説明します。