2015-03-13 94 views
0

這是對以前未回答的問題的重新評價。Visual Basic刪除算法不起作用

我有一個記錄和一個記錄集合的文件。我想從該文件中刪除一條記錄。該算法應該將記錄從文件中刪除,標記要刪除的記錄,將記錄重新保存到文件中,然後將所有記錄APART從標記爲刪除的記錄複製到成爲主文件的新臨時文件中。

出了什麼問題:出於某種原因,除了沒有正確的字段之外,算法仍會複製標記爲刪除的記錄。它將字段留空,但由於某種原因仍然將其粘貼在新文件中。

我將單步執行代碼,並觀察代碼只有在有四條記錄時才運行FilePut方法三次(顯示四條記錄中只有三條被複制到新文件,另一條被刪除爲預期),但是當文件加載到報告中時,它仍然包含空白記錄。這沒有意義,沒有人能解決我的問題!

Dim n As Integer = 1 
Dim TempDir As String = CurDir() & "\Temp.dat" 
RecordNumber = Trim(Val(Mid(lstResultReport.Text, 1, 3))) 
FileGet(4, ResultRecord, RecordNumber) 

ResultRecord.TournamentName = "DELETE" 
FilePut(4, ResultRecord, RecordNumber) 
FileClose(4) 
FileOpen(4, ResultsFilePath, OpenMode.Random, , , Len(ResultRecord)) 
FileOpen(5, TempDir, OpenMode.Random, , , Len(ResultRecord)) 

For n = 1 To LOF(4)/Len(ResultRecord) 
    FileGet(4, ResultRecord, n) 
    If Trim(ResultRecord.TournamentName) <> "DELETE" Then 
     FilePut(5, ResultRecord, n) 
    End If 
Next 
FileClose(4) 
FileClose(5) 


Kill(ResultsFilePath) 
FileCopy(TempDir, ResultsFilePath) 
Kill(TempDir) 
FileOpen(4, ResultsFilePath, OpenMode.Random, , , Len(ResultRecord)) 

UPDATE有趣的是,當我去刪除該文件中的最後一條記錄的算法工作。

+1

嗯...萬歲VB6。 *嘆*這是2015年,喲。 – 2015-03-13 12:31:36

+0

我的水晶球說你覆蓋了現有的文件。但它仍然有一個你沒有覆蓋的舊記錄。您必須先刪除Temp.dat。 – 2015-03-13 12:38:24

+0

你是說當我打開/創建temp.dat文件?即Dim TempDir As String = CurDir()&「\ Temp.dat」',然後'FileOpen(5,TempDir,OpenMode.Random,,Len(ResultRecord))? ' 因爲我試過,但它沒有解決我的問題 – TurgidWizard 2015-03-13 12:56:08

回答

0

我的意思:

dim newPosition as integer ' !!! 
newPosition = 1   ' !!! 
For n = 1 To LOF(4)/Len(ResultRecord) 
    FileGet(4, ResultRecord, n) 
    If Trim(ResultRecord.TournamentName) <> "DELETE" Then 
     FilePut(5, ResultRecord, newPostion) 
     newPostion = newPosition + 1 ' !!! 
    End If 
Next 
+0

我得到你對不起,花了我很久,但我退出了。這是偉大的,我代表這樣一個愚蠢的錯誤,這是很容易忽略的東西,我猜想,因爲我展示的那些也不能解決它! – TurgidWizard 2015-03-14 17:27:00