|
Option Explicit
Type MyData ID As Integer Name As String * 15 Password As String * 15 End Type ' Do not change this. Type RAFRecord RecordNumber As Integer End Type Global UActive As Integer Global UFile As String Global ULength As Integer Global RFile As String Global RLength As Integer 'Set this in RAFStartup to the 'maximum number. 10000 is good. Global MaxRecords As Integer Public Sub RAFClear() Dim RChannel As Integer Dim i As Integer Dim TempRAF As RAFRecord TempRAF.RecordNumber = -1 RChannel = FreeFile Open RFile For Random As RChannel Len = RLength For i = 1 To MaxRecords Put RChannel, i, TempRAF Next i Close RChannel End Sub Public Sub RAFStartup() Dim UChannel As Integer Dim RChannel As Integer Dim TempRAF As RAFRecord Dim TempMyData As MyData UFile = App.Path & "\Users.dat" RFile = App.Path & "\UPointer.dat" 'UFile = "C:\Users.dat" 'RFile = "C:\UPointer.dat" ULength = Len(TempMyData) RLength = Len(TempRAF) UChannel = FreeFile Open UFile For Random As UChannel Len = ULength Close UChannel RChannel = FreeFile Open RFile For Random As RChannel Len = RLength Close RChannel UActive = (FileLen(UFile) / ULength) + 1 MaxRecords = 10000 Form1.Text1.Text = UActive End Sub ' The parameters will need to be changed ' when you change your MyData type. Public Function RAFAdd(ID As Integer, AddName As String, _ AddPassword As String) As Boolean Dim UChannel As Integer Dim RChannel As Integer Dim TempRAF As RAFRecord Dim NewRAF As RAFRecord Dim TempMyData As MyData Dim RecordPosition As Integer Dim HashPos As Integer Dim Done As Boolean Dim Success As Boolean Dim StartPos As Integer 'Add your parameters to the TempMyData here. TempMyData.ID = ID TempMyData.Name = AddName TempMyData.Password = AddPassword RecordPosition = UActive NewRAF.RecordNumber = RecordPosition UChannel = FreeFile Open UFile For Random As UChannel Len = ULength Put UChannel, RecordPosition, TempMyData Close UChannel HashPos = (ID Mod MaxRecords) + 1 StartPos = HashPos Success = True Done = False RChannel = FreeFile Open RFile For Random As RChannel Len = RLength Do While Done = False Get RChannel, HashPos, TempRAF If TempRAF.RecordNumber = -1 Then Done = True Else If HashPos = MaxRecords Then HashPos = 1 Else HashPos = HashPos + 1 End If If HashPos = StartPos Then Done = True Success = False End If End If Loop Close RChannel If Success Then RChannel = FreeFile Open RFile For Random As RChannel Len = RLength Put RChannel, HashPos, NewRAF Close RChannel UActive = UActive + 1 RAFAdd = True Else RAFAdd = False End If End Function Public Function RAFSearch(ID As Integer) As MyData Dim UChannel As Integer Dim RChannel As Integer Dim TempRAF As RAFRecord Dim TempMyData As MyData Dim RecordPosition As Integer Dim HashPos As Integer Dim Done As Boolean Dim Success As Boolean Dim StartPos As Integer HashPos = (ID Mod MaxRecords) + 1 StartPos = HashPos Success = True Done = False RChannel = FreeFile Open RFile For Random As RChannel Len = RLength UChannel = FreeFile Open UFile For Random As UChannel Len = ULength Do While Done = False Get RChannel, HashPos, TempRAF If TempRAF.RecordNumber <> -1 Then Get UChannel, TempRAF.RecordNumber, TempMyData End If If TempMyData.ID = ID Then Done = True Else If HashPos = MaxRecords Then HashPos = 1 Else HashPos = HashPos + 1 End If If HashPos = StartPos Then Done = True Success = False End If End If Loop Close RChannel Close UChannel If Not Success Then TempMyData.ID = -1 End If RAFSearch = TempMyData End Function |