2015-03-13 97 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