2

我的程序的这一部分旨在将用户详细信息添加到随机访问文件中。下面的子例程旨在执行此操作:

    'This allows a user to be added to the User File
    Dim UserToAdd As User
    Dim UserFile As Integer
    Dim RecordNumber As Long

    'Read the data off the form and populate corresponding
    'UserToAdd values
    With UserToAdd
        .UserID = Val(txt_UserID.Text)
        .UserBarcode = txt_UserBarcode.Text
        .Forename = txt_Forename.Text
        .Surname = txt_Surname.Text
        .AccessRights = cmb_AccessRights.Text
    End With

    'Find the next open space in the User File
    UserFile = FreeFile()

    'Now open the file used to store User records
    FileOpen(UserFile, UserFileName, OpenMode.Random, OpenAccess.Write, OpenShare.Shared, Len(UserToAdd))
    RecordNumber = Len(UserFile) + 1

    'Add the new user to the file
    FilePut(UserFile, UserToAdd, RecordNumber)
    FileClose(UserFile)

实际保存详细信息没有问题,但是,每次添加另一条记录时,文件都会被覆盖。我怎么能阻止这个,我在上面做错了什么?

4

1 回答 1

0

似乎发生了几件事,首先是因为您正在编写一个 RandomAccess 文件,因此 Records 需要具有相同的长度,因此您的 Structure 需要设置类似这样的内容(因为您没有发布您的结构/类 I我猜这可能是一个问题,如果不是第二个问题可能是导致您的问题的原因)。

Public Structure User
    Public UserId As Integer
    <VBFixedString(50)> Public UserBarCode As String
    <VBFixedString(20)> Public Forename As String
    <VBFixedString(20)> Public Surname As String
    <VBFixedString(20)> Public AccessRights As String
End Structure

第二个是你RecordNumber是无效的,你只是得到一个整数的长度(你的 UserFile 变量)。通过给你的结构一个固定的大小,你可以使用LOF方法来获取你打开文件的长度,然后将它除以你的记录大小来确定类似这样的记录数量。

RecordNumber = (LOF(UserFile) \ Len(UserToAdd)) + 1

正如我在评论中所说,这些功能是 VB6 遗留下来的,但我可以理解您为什么要使用它们,似乎缺乏任何其他方式的信息。

于 2014-02-04T21:52:20.597 回答