Как перебрать набор записей дважды? - PullRequest
0 голосов
/ 31 января 2012

Я пытаюсь перебрать набор записей дважды.Один раз записать все ненулевые результаты, а затем выполнить второй прогон, чтобы записать все строки с нулем в конкретном столбце, чтобы все эти строки со значением 0 были в конце файла.Однако, так как .EOF был запущен при первом прогоне, он все равно "True", когда я пытаюсь снова прогнать его.Какой лучший способ пройти через это дважды?

   With CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)

        Do Until .EOF
             If .Fields(2) = 0 Then
             Else

                strCSV = ""
                 For x = 0 To .Fields.Count - 1
                       'No Qualifier
                       strCSV = strCSV & strDelimiter & Nz(.Fields(x), vbNullString)

                 Next x

                 'Eliminate Back to back strQualifiers or Qualifiers if changed
                 strCSV = Replace(strCSV, strQualifier & strQualifier, "")

                 strPrint = Mid(strCSV, Len(strDelimiter) + 1)
                 Print #intOpenFile, strPrint
            End If
                 .MoveNext
          Loop

          Do Until .EOF
             If Nz(.Fields(2), vbNullString) = 0 Then

                strCSV = ""
                 For x = 0 To .Fields.Count - 1
                       'No Qualifier
                       strCSV = strCSV & strDelimiter & Nz(.Fields(x), vbNullString)

                 Next x

                 'Eliminate Back to back strQualifiers or Qualifiers if changed
                 strCSV = Replace(strCSV, strQualifier & strQualifier, "")

                 strPrint = Mid(strCSV, Len(strDelimiter) + 1)
                 Print #intOpenFile, strPrint
            End If
                 .MoveNext
          Loop

   End With

Ответы [ 2 ]

2 голосов
/ 31 января 2012

Чтобы ответить на ваш вопрос, просто используйте .MoveFirst между двумя прогонами.Но @Remou отмечает, что вы можете избежать этого, просто добавив ORDER BY в свой SQL (+1)

1 голос
/ 31 января 2012

Вы, похоже, упускаете точку реляционной базы данных, которая заключается в том, что у нее нет другого порядка, кроме того, который вы навязываете:

sSQL = "SELECT * FROM MyTable ORDER BY MyNumField DESC"
Set QDF = CurrentDB.CreateQueryDef ("DatOut", sSQL)

DoCmd.TransferText acExportDelim,,"DatOut","C:\Docs\Datout.csv"
...