如何使用vb6在记录集中查找重复项

如何使用vb6在记录集中查找重复项,vb6,Vb6,嗨,我有一个记录集名rcdDNE。我从文本文件中读取rtn、账号、名字、中间名、姓氏、金额,并将其存储到记录集。现在我想将这些值存储到数据库表中。在我的表中,accno是主键。因此,在将其存储到我的表中之前,我想确定我的记录集中是否有重复的accno。如果我有,我想把它写进文本文件 有人能帮我吗 ' Set up rcdDNE structure With rcdDNE.Fields .Append "RTN", adVarChar, 9 .Append "AccountNbr"

嗨,我有一个记录集名rcdDNE。我从文本文件中读取rtn、账号、名字、中间名、姓氏、金额,并将其存储到记录集。现在我想将这些值存储到数据库表中。在我的表中,accno是主键。因此,在将其存储到我的表中之前,我想确定我的记录集中是否有重复的accno。如果我有,我想把它写进文本文件

有人能帮我吗

' Set up rcdDNE structure
With rcdDNE.Fields
    .Append "RTN", adVarChar, 9
    .Append "AccountNbr", adVarChar, 17
    .Append "IndividualName", adVarChar, 22
    .Append "FirstName", adVarChar, 50
    .Append "MiddleName", adVarChar, 1
    .Append "LastName", adVarChar, 50
    .Append "Amount", adCurrency
End With

rcdDNE.Open
intFileNbr = FreeFile(1)
Open strFileName For Input As #intFileNbr Len = 95 ' Open file for input.
Do While Not EOF(intFileNbr)
   Line Input #intFileNbr, strCurrentLine
   If Mid(strCurrentLine, 1, 1) = 6 Then
     strRoutingNbr = Mid(strCurrentLine, 4, 8)
     strAcct = Trim(Mid(strCurrentLine, 13, 17))
     strIndividualName = Trim(Mid(strCurrentLine, 55, 22))
     strAmount = Trim(Mid(strCurrentLine, 30, 10))
     strAmount = Left(strAmount, Len(strAmount) - 1)
     curAmount = CCur(strAmount)

   ' Add new record to temporary recordset
        With rcdDNE
            .AddNew
            .Fields![RTN] = strRoutingNbr
            .Fields![AccountNbr] = strAcct
            .Fields![IndividualName] = strIndividualName
            .Fields![Amount] = curAmount
            .Update
        End With
   End If
Loop
'将记录写入数据库

frmDNELoad.lblStatus.Caption = "Loading data into database......"
Dim lngRecCount As Long
lngRecCount = 0
rcdDNE.MoveFirst

 With cmdCommand
    .ActiveConnection = objConn
    .CommandText = "insert into t_DATA_DneFrc (RTN, AccountNbr, FirstName, MiddleName, LastName, Amount) values ('" & rcdDNE("RTN") & "', '" & rcdDNE("AccountNbr") & "', '" & rcdDNE("FirstName") & "', '" & rcdDNE("MiddleName") & "', '" & rcdDNE("LastName") & "', '" & rcdDNE("Amount") & "')"
    .CommandType = adCmdText
End With

Set rcddnefrc = New ADODB.Recordset
With rcddnefrc
    .ActiveConnection = objConn
    .Source = "SELECT * FROM T_DATA_DNEFRC"
    .CursorType = adOpenDynamic
    .CursorLocation = adUseClient
    .LockType = adLockOptimistic
    .Open
End With

Do Until rcdDNE.EOF
    lngRecCount = lngRecCount + 1
    frmDNELoad.lblStatus.Caption = "Adding record " & lngRecCount & " of " & rcdDNE.RecordCount & " to database."
    frmDNELoad.Refresh
    DoEvents
    Call CommitNew
    rcdDNE.MoveNext
Loop

在从文本文件读取数据的循环中,构建accno列表

每次从文本中读取一行时,首先检查列表是否包含accno,如果不包含,则添加记录,然后将accno添加到列表中


如果列表中已经包含账号,则不要将该行添加到记录集中,并移到下一行。

Meh。重复检查很糟糕。您最好将整个数据集转储到数据库中,然后执行SELECT DISTINCT…into。。。以及创建另一个没有重复项的表。然后,您可以比较两个表中的记录以找到重复的记录


否则,您将不得不提取第一条记录,对照整个数据集检查它,提取第二条记录,等等。这种比较的成本很高

可以解释多一点,或者如果你有任何示例代码,你可以发布。你希望我如何建立acc编号列表。我需要创建另一个记录集还是什么?对不起,我是新的vb6和这个编码。这就是为什么有这么多问题。谢谢你Advance@pbrp:使用Collection或Scripting.Dictionary。使用数组存储帐户号,并检查是否已存储该值。尝试获得类似于C#列表的内容,在其中可以添加新条目,并检查是否已添加条目。因此,当您阅读文本行并获取账号时,请签入此列表/数组(如果存在),如果不存在,请添加新记录,如果存在,请不要添加。您不希望/需要创建另一个记录集。你在写你的复制品,对吗?因此,从记录集的顶部开始,抓取第一条记录,将该记录与其他记录进行比较。如果是重复的,将其写入文件,然后移动到下一条记录。如果不是,请将其插入数据库,然后移动到下一条记录。非常简单。