как найти дубликаты в наборе записей с помощью VB6 - PullRequest
0 голосов
/ 03 декабря 2009

Привет, у меня есть имя набора записей rcdDNE. Я читаю РТН, акк, имя, отчество, фамилию, сумму из текстового файла и сохраняю его в набор записей. Теперь я хочу сохранить эти значения в таблице базы данных. В моей таблице 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

Ответы [ 2 ]

0 голосов
/ 03 декабря 2009

Мех. Дубликат проверки отстой. Возможно, было бы лучше просто сбросить весь набор данных в базу данных, а затем выполнить SELECT DISTINCT ... INTO ... и создать другую таблицу без дубликатов. Затем вы можете сравнить записи в двух таблицах, чтобы найти дубликаты записей.

В противном случае вам придется извлечь первую запись, сравнить ее со своим ВСЕМ набором данных, извлечь вторую запись и т. Д. Высокая стоимость такого сравнения.

0 голосов
/ 03 декабря 2009

В цикле, где читаются данные из текстового файла, строится список аккно.

Каждый раз, когда вы читаете строку из текста, сначала проверьте, содержит ли список accno, если нет, добавьте запись и добавьте accno в список.

Если он уже содержит accno в списке, не добавляйте строку в набор записей и переходите к следующей строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...