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

时间:2012-09-01 15:09:43

标签: vb6 record

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

Delete #FileNumber1, LatestRec, MyRec

是获得它的好机会。 LatestRec是最新记录的编号(例如:5表示第5记录)。 MyRec是我的记录变量。 有什么建议吗?

1 个答案:

答案 0 :(得分:2)

您在上面注意到的Delete语句不适用于随机访问文件。遗憾的是,VB6随机访问文件没有提供记录删除的直接机制,主要是因为删除会导致其他问题的老鼠窝,例如文件收缩(填充空白区域),碎片(未使用的空白区域)等等。如果您确实需要删除记录,那么您唯一的选择就是将所有其他记录复制到临时文件中,删除旧文件,并将临时文件重命名为“原始”名称 - 遗憾的是,这是微软的。

你可以做的一件事,我在前面承认并不理想,就是在随机访问文件中添加一个“已删除”字段,默认为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