在Vb6中删除随机文件中的记录

在Vb6中删除随机文件中的记录,vb6,record,Vb6,Record,我正试图用Vb6和记事本管理一个相当小的数据库。 我将所有记录随机收集到记事本文件(.dat)中。 我使用Get和Put命令获取存储的记录并插入最新的记录。 现在我想有可能删除我输入的记录(可能是最新的)。 我认为: Delete #FileNumber1, LatestRec, MyRec 这是一个很好的机会。 LatestRec是最新记录的编号(例如:5表示第5条)。 MyRec是我的记录变量。 有什么建议吗?您在上面提到的删除语句不适用于随机访问文件。不幸的是,VB6随机访问文件没有提供

我正试图用Vb6和记事本管理一个相当小的数据库。 我将所有记录随机收集到记事本文件(.dat)中。 我使用Get和Put命令获取存储的记录并插入最新的记录。 现在我想有可能删除我输入的记录(可能是最新的)。 我认为:

Delete #FileNumber1, LatestRec, MyRec
这是一个很好的机会。 LatestRec是最新记录的编号(例如:5表示第5条)。 MyRec是我的记录变量。
有什么建议吗?

您在上面提到的删除语句不适用于随机访问文件。不幸的是,VB6随机访问文件没有提供记录删除的直接机制,主要是因为删除会导致其他问题,例如文件收缩(填充空白)、碎片(未使用的空白),等等。如果您确实需要删除一条记录,那么您唯一的选择就是将所有其他记录复制到一个临时文件中,删除旧文件,然后将临时文件重命名为“原始”名称——遗憾的是,这是来自Microsoft的

您可以做的一件事(我承认这并不理想)是在随机访问文件中添加一个“已删除”字段,默认为0,但更改为true、1或其他相关值,以指示记录不再有效

您甚至可以编写例程来重用已删除的记录,但如果您对文件语义有那么多的了解,那么考虑将应用程序迁移到更健壮的数据库环境(如SQL Server)可能会更好

*编辑:*下面是一段非常粗糙/粗糙/未经测试的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

如何将0和1设置为记录?我将为数据库的布局创建一个“结构”或“记录”,并在其中添加字段。如果需要删除记录,请使用GET将该记录提取到该“记录”的变量中,将其“已删除”字段设置为1,然后将该记录“放回”文件。在应用程序的其余部分中使用记录时,需要考虑该值。