如何遍历记录集两次?

问题描述:

我正在尝试两次遍历记录集。一次写入所有非零结果,然后再次运行以写入特定列中具有零的所有行,以使所有值为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)

+0

这工作谢谢你。不,订单不会对我有帮助。该表本身是使用asc语句的顺序创建的,但我需要将值设置为底部的零的asc。我不知道有这样做的方法。仅供参考,它需要按照我刚刚解释的顺序进行分层,以便在其显示的软件中正确分层。反正,这对我所做的工作非常有用,谢谢。 (不管有多奇怪,我正在做的是大声笑)。 – Bryan 2012-01-30 20:47:57

你似乎缺少一个关系型数据库的角度来看,这是它没有一个比其他命令你强加:

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

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

我可能是错的,但我不认为我错过了关系数据库的一点,它只是我需要这样做的原因不包括在我的问题中。实质上,我需要在生成的文件中的行从1开始并且向上以及文件末尾的所有零进行排序。它必须是这样才能在程序中正确分层,我正在创建的文件被放入。不幸的是,我无法使用DoCmd.TransferText,因为它会将我的小数截断为2而不是6+,就像它在数据库中一样。 – Bryan 2012-01-30 20:55:27

+0

如果您想查看一个较旧的问题,我在尝试使DoCmd.TransferText命令工作时询问:http://stackoverflow.com/questions/6154812/how-do-i-keep-the-necessary-小数位 - 当使用该docmd-transfertext-com – Bryan 2012-01-30 20:56:11