2012-09-01 4 views
0

Vb6 및 메모장을 사용하여 아주 작은 데이터베이스를 관리하려고합니다. 메모장 파일 (.dat)에 임의의 모든 레코드를 수집합니다. Get 및 Put 명령을 사용하여 저장 한 레코드를 가져오고 최신 레코드를 삽입합니다. 이제 입력 한 레코드를 삭제할 수있는 가능성을 갖기를 원합니다 (어쩌면 최신). Vb6의 임의 파일에서 레코드 삭제

Delete #FileNumber1, LatestRec, MyRec 

이 그것을 얻을 수있는 좋은 기회였다 나는 것을 문질러서. LatestRec은 최신 레코드의 번호입니다 (예 : 5는 5 번째를 의미 함). MyRec이 내 레코드 변수입니다. 제안 사항이 있으십니까?

답변

2

위에서 언급 한 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

레코드에 0과 1을 어떻게 설정합니까? – Achab

+0

데이터베이스의 레이아웃을 "구조"또는 "기록"하고 필드를 추가합니다. 레코드를 삭제해야하는 경우 GET을 사용하여 해당 레코드의 변수에 레코드를 가져 와서 "Deleted"필드를 1로 설정 한 다음 해당 레코드를 다시 파일에 "PUT"하십시오. 나머지 응용 프로그램에서 레코드를 사용할 때 그 값을 고려해야합니다. –