|
ActiveX メモリ イメージでのファイルの変更は、DDF の新しい定義を追加または変更してコミットする最初の段階として、また、間違った DDF の情報を修正する場合において有用です。必要とされる変更のほとんどは、FieldList プロパティおよび IndexList プロパティを使用して行うことができます。
DDF を変更する場合は、すべての変更がコミットできる状態になるまで ActiveX メモリ イメージに変更情報を保管しておき、その後 DdfAddTable を使用してファイルに変更情報をコミットする方が効率的です。したがって、FieldList または IndexList を設定するときは RefreshLocations を False に設定することをお勧めします。Visual Basic では、ReDim 関数で Preserve オプションを使用すれば、既存の定義にフィールドを追加することができます。また、DdfModifyTableName と DdfModifyLocation を使用して、現在のメモリ イメージまたは DDF ファイル自体に含まれるテーブルを変更することもできます。たとえば、次のようにします。
既存のテーブル定義にフィールドを追加するには
Option Base 0 Dim fields as Variant 'DDF から直接現在の情報を取得 VAccess1.RefreshLocations = True 'VAccess を正しい DDF とテーブルに設定 VAccess1.DdfPath = "c:¥mydata" VAccess1.TableName = "TableShortAField" 'フィールド リストを取得 fields = VAccess1.FieldList '配列の次元の変更およびフィールドの追加 ReDim Preserve fields(7, UBound(fields, 2) + 1) 'これで、前と同じ配列の最後に空のフィールドが追加されました '空のフィールドを定義 fields(1, UBound(fields, 2)) = "NewComment" fields(2, UBound(fields, 2)) = 0 '文字列 fields(3, UBound(fields, 2)) = VAccess1.DataLength fields(4, UBound(fields, 2)) = 20 '20 バイトの文字列 fields(7, UBound(fields, 2)) = "This is a new comment" 'この変更をまだファイルに書き込まない VAccess1.RefreshLocations = False '空のフィールドを ActiveX メモリ イメージに保存 VAccess1.FieldList = fields .... <そのほかの DDF 処理> .... 'さて、テーブルは希望どおりに設定されました 'テーブルの名前を変更しましょう DdfModifyTableName "TableWithAllFields" '次の操作を DDF に直接作用させるため、RefreshLocations を '設定してもかまいませんが、DdfAddTable はメモリ イメージ 'ではなく DDF にのみ作用するため、RefreshLocations は '無視されます(リファレンスの DdfAddTable を参照) 'テーブルをファイルに保存 - 既存の定義を上書き DdfAddTable True
メモ
上記の例で示した変更は DDF のみに作用します。この追加フィールドの領域がテーブル自体になければ、フィールドはファイル自体に存在しません。データ ファイルの構造の変更については、以下のセクションを参照してください。
|