|
これまで説明してきた変更はすべて、DDF または DDF の ActiveX メモリ イメージにだけ当てはまるものです。ただし、DDF を変更しても、データ ファイル内の実際のレコードの長さや構造は変更されません。この変更を行うには、データ ファイルに直接影響を与える関数を使用する必要があります。
データ ファイルの長さの変更は、1 つの操作で済む問題ではありません。基本的には、データ ファイルを破壊し、新しい長さで再構築する必要があります。既存のファイルに対してこの変更を行う場合は、2 つの VAccess コントロールとテンポラリ ファイルを使用してレコードをコピーする必要があります。たとえば、次のようにします。
テーブルとデータ ファイルにフィールドを追加するには
Dim totalRecs as Integer Dim currRec as Integer 'DDF を読めるようにする VAccess1.RefreshLocations = True VAccess2.RefreshLocations = True 'DDFPath を設定 VAccess1.DdfPath = "c:¥mydata" VAccess2.DdfPath = "c:¥myData" 'テーブルを設定 VAccess1.TableName = "MyTable" VAccess2.TableName = "MyTable" 'メモリ イメージのみを使用 VAccess1.RefreshLocations = False VAccess2.RefreshLocations = False '上記ルーチンを使用して VAccess2 メモリ イメージに '新規フィールドを追加 AddNewField '実際のデータ ファイルを作成し DDF を更新 'VAccess1 のメモリ イメージは更新されない VAccess2.RefreshLocations = True VAccess2.DdfCreateTable True 'テーブルを一時的に別の場所に割り当てる VAccess2.RefreshLocations = False VAccess2.DdfModifyLocation "tempdata.mkd" 'ファイルを開き最初のレコードを取得 VAccess1.Open VAccess2.Open VAccess1.GetFirst 'レコードを一方から他方へコピー totalRecords = VAccess1.TotalRecords currRec = 0 While currRec < totalRecords VAccess2.Buffer(0) = VAccess1.Buffer(0) VAccess2.Insert 'ここにエラー処理を追加 VAccess1.GetNext currRec = currRec + 1 Wend VAccess1.Close VAccess2.Close ' 2 つのデータ ファイルができた(古いデータと新しいデータ) ' 言語 API を使用して古いデータ ファイルを削除し、 ' 新しいデータ ファイル名を古い名前に変更する RenameTempDataFile ' 正しい場所に置き直す - DDF は既に設定されているので変更しない VAccess2.DdfModifyLocation VAccess1.Location
その他にも、データ ファイルのインデックス構造に対して直接行える変更があります。これらの操作は ActiveX メソッド リファレンスに示されており、DdfAddIndex、DdfDropIndex、および DdfDropIndexMaintain などがあります。
|