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

いくつかのことが起こっているようです.1つ目は、RandomAccessファイルを作成しているため、レコードは同じ長さである必要があるため、構造を次のように設定する必要があります(構造/クラスを投稿していないため、I 2番目の問題がおそらくあなたの問題の原因ではない場合、これは問題になる可能性があると推測しています)。

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

2 つ目は、Integer ( UserFile VariableRecordNumber )の長さを取得するだけで有効ではないということです。構造体に固定サイズを与えることにより、メソッドを使用して開いているファイルの長さを取得し、それをレコード サイズで割って、このようなレコードの量を決定できます。LOF

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

コメントで述べたように、これらの関数は VB6 から取り残されていますが、それらを使用したい理由はわかります。他の方法では情報が不足しているようです。

于 2014-02-04T21:52:20.597 に答える