如何遍历记录集两次?
我正在尝试两次遍历记录集。一次写入所有非零结果,然后再次运行以写入特定列中具有零的所有行,以使所有值为0的行位于文件末尾。但是,由于.EOF在第一次运行时触发,所以当我尝试再次运行时仍然为“真”。什么是最好的方式来贯穿它两次?如何遍历记录集两次?
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
要回答你的问题,只是用.MoveFirst
之间你的两个跑步。但@Remou提供了一个很好的观点,你可以通过在你的SQL中加入一个ORDER BY
来避免这种复杂性(+1)
你似乎缺少一个关系型数据库的角度来看,这是它没有一个比其他命令你强加:
sSQL = "SELECT * FROM MyTable ORDER BY MyNumField DESC"
Set QDF = CurrentDB.CreateQueryDef ("DatOut", sSQL)
DoCmd.TransferText acExportDelim,,"DatOut","C:\Docs\Datout.csv"
我可能是错的,但我不认为我错过了关系数据库的一点,它只是我需要这样做的原因不包括在我的问题中。实质上,我需要在生成的文件中的行从1开始并且向上以及文件末尾的所有零进行排序。它必须是这样才能在程序中正确分层,我正在创建的文件被放入。不幸的是,我无法使用DoCmd.TransferText,因为它会将我的小数截断为2而不是6+,就像它在数据库中一样。 – Bryan 2012-01-30 20:55:27
如果您想查看一个较旧的问题,我在尝试使DoCmd.TransferText命令工作时询问:http://stackoverflow.com/questions/6154812/how-do-i-keep-the-necessary-小数位 - 当使用该docmd-transfertext-com – Bryan 2012-01-30 20:56:11
这工作谢谢你。不,订单不会对我有帮助。该表本身是使用asc语句的顺序创建的,但我需要将值设置为底部的零的asc。我不知道有这样做的方法。仅供参考,它需要按照我刚刚解释的顺序进行分层,以便在其显示的软件中正确分层。反正,这对我所做的工作非常有用,谢谢。 (不管有多奇怪,我正在做的是大声笑)。 – Bryan 2012-01-30 20:47:57