위에서 언급 한 Delete 문은 임의 액세스 파일에는 적용되지 않습니다. 불행하게도 VB6 무작위 액세스 파일은 파일 삭제 (빈 공간 채우기), 단편화 (사용되지 않은 빈 공간)와 같은 다른 문제의 쥐 둥지로 이어지기 때문에 레코드 삭제에 직접적인 메커니즘을 제공하지 않습니다. 정말로 레코드를 삭제해야하는 경우에만 다른 레코드를 임시 파일에 복사하고 이전 파일을 삭제 한 다음 임시 파일의 이름을 "원래"이름으로 변경하면됩니다. 바로 Microsoft에서 제공합니다.
내가 할 수있는 한 가지 방법은 앞면이 좋지 않다는 것이고, 랜덤 액세스 파일에 "삭제 된"필드를 추가하고 기본값은 0이지만 true, 1 또는 일부로 변경하는 것입니다 레코드가 더 이상 유효하지 않음을 나타 내기 위해 다른 관련 값.
삭제 된 레코드를 다시 사용하기 위해 루틴을 작성할 수도 있지만 파일 의미론에 그다지 익숙하지 않은 경우 SQL과 같은보다 강력한 데이터베이스 환경으로 응용 프로그램을 이동하는 것이 좋습니다. 섬기는 사람.
*이 편집 : * 다음은/삭제 나는 그 above..caveat 설명 "삭제 필드"개념 레코드를 추가하는 방법을 보여줍니다 샘플 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을 어떻게 설정합니까? – Achab
데이터베이스의 레이아웃을 "구조"또는 "기록"하고 필드를 추가합니다. 레코드를 삭제해야하는 경우 GET을 사용하여 해당 레코드의 변수에 레코드를 가져 와서 "Deleted"필드를 1로 설정 한 다음 해당 레코드를 다시 파일에 "PUT"하십시오. 나머지 응용 프로그램에서 레코드를 사용할 때 그 값을 고려해야합니다. –