上記の Delete ステートメントは、ランダム アクセス ファイルには適用されません。残念ながら、VB6 ランダム アクセス ファイルには、レコードを削除するための直接的なメカニズムがありません。これは主に、削除によって、ファイルの縮小 (空きスペースを埋める)、断片化 (未使用の空きスペース) などの他の問題が発生するためです。本当にレコードを削除する必要がある場合、他のすべてのレコードを一時ファイルにコピーし、古いファイルを削除して、一時ファイルの名前を「元の」名前に変更するしかありません。悲しいことに、その通りです。マイクロソフトから。
前もって理想的ではないことを認めますが、できることの 1 つは、「削除済み」フィールドをランダム アクセス ファイルに追加することです。デフォルトは 0 ですが、true、1、またはその他の関連値に変更します。レコードが無効になったことを示します。
削除されたレコードを再利用するためのルーチンを作成することもできますが、ファイルのセマンティクスにそれほど慣れている場合は、アプリケーションを SQL Server などのより堅牢なデータベース環境に移行することを検討することをお勧めします。
* EDIT : *これは、上記で説明した「削除されたフィールド」の概念を使用してレコードを削除/追加する方法を示すサンプル VB6 コードの非常に大まかな/粗い/テストされていないチャンクです..このコードを取得するには微調整が必要になる可能性があることに注意してください完璧ですが、ポイントはコンセプトを説明することです:
Type SampleRecord
UserID As Long
lastName As String * 25
firstName As String * 25
Deleted As Boolean
End Type
' This logically deletes a record by setting
' its "Deleted" member to True
Sub DeleteRecord(recordId As Long)
Dim targetRecord As SampleRecord
Dim fileNumber As Integer
fileNumber = FreeFile
Open "SampleFile" For Random As fileNumber Len = LenB(SampleRecord)
Get fileNumber, recordId, targetRecord
targetRecord.Deleted = True
Put #fileNumber, recordId, targetRecord
Close #fileNumber
End Sub
Sub AddRecord(lastName As String, firstName As String)
Dim newRecord As SampleRecord
Dim fileNumber As Integer
Dim newRecordPosition As Long
newRecord.firstName = firstName
newRecord.lastName = lastName
newRecord.Deleted = False
newRecord.UserID = 123 ' assume an algorithm for assigning this value
fileNumber = FreeFile
Open "SampleFile" For Random As fileNumber Len = LenB(SampleRecord)
newRecordPosition = LOF(fileNumber) / LenB(SampleRecord) + 1
Put #fileNumber, newRecordPosition, newRecord
Close #fileNumber
End Sub