VB循环写入

xyzmrsir 2016-05-30 05:09:06
If Len(Dir(App.path & "\busdata\" & Trim(rs0.Fields(0)) & "VEHID.txt")) = 0 Then              '如果不存在该文件,则创建并写入
Dim strTemp3 As String
Dim i3 As Integer
Open App.path & "\busdata\" & Trim(rs0.Fields(0)) & "VEHID.txt" For Output As #3
rs3.MoveFirst
While Not rs3.EOF
strTemp3 = rs3.Fields(0)
Dim rs4 As New ADODB.Recordset
rs4.Open "select ... ", cn, adOpenKeyset, adLockOptimistic
If rs4.Fields(0) < 1800 Then Print #3, strTemp3
Set rs4 = Nothing '记录集不能在打开的状态下再打开,要在open之前先close关闭它
rs3.MoveNext
Wend
Close #3
End If

因为筛选的数量量很大,我想要实现每循环一次,满足条件的话,就写入到txt

为什么该段代码不能实现,每循环一次,就将满足条件的结果,写入txt一次?(单步运行,遇到满足条件的结果,该次循环结束后,我打开txt查看,txt并没有更新)
...全文
201 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
of123 2016-06-06
  • 打赏
  • 举报
回复
为了提供性能,文件操作,只有 Close 时才会进行磁盘写入,中间过程的读写都是在扩展内存中。当然,文件很大时,中间也会有扩展内存的磁盘交换。 对于性能优先的工程,应避免频繁的磁盘操作。
ZHRXJR 2016-06-06
  • 打赏
  • 举报
回复
不知道你的 rs4 在程序中的作用!
我实际操作了一下,下面的代码是成功的,如图:,我录入txt的文件,这里无法给你,给你一个略图,这个图是截取了一部分。下面是代码:
Private Sub Command1_Click()
Dim cn As New ADODB.Connection, rs3 As New ADODB.Recordset, strTemp3 As String
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\考试题.mdb;Persist Security Info=False"
cn.Open
Open App.Path & "\VEHID.txt" For Append As #3
'这里使用Append 方式打开比较好,可以不需要上面的: '如果不存在该文件,则创建并写入,可以自动创建文件,并且是给文件末尾写入内容
rs3.Open "Select * From 题库", cn, 3, 2
Do While Not rs3.EOF
strTemp3 = rs3.Fields(0)
Write #3, strTemp3 '顺序文件中应该是:写入指令 Write,读取指令 Input
rs3.MoveNext
Loop
Close #3 '写入后必须关闭文件
MsgBox "操作成功!"
End Sub
ZHRXJR 2016-06-05
  • 打赏
  • 举报
回复
没有仔细看,下面这个语句应该放在循环中 Open App.Path & "\busdata\" & Trim(rs0.Fields(0)) & "VEHID.txt" For Append As #3 或 Close #3 '写入后必须关闭文件 放在循环外
赵4老师 2016-05-31
  • 打赏
  • 举报
回复
建议楼主学习T-SQL存储过程。
xyzmrsir 2016-05-31
  • 打赏
  • 举报
回复
引用 2 楼 u013249970 的回复:
 Dim strTemp3 As String
        Dim i3 As Integer
        'Open App.Path & "\busdata\" & Trim(rs0.Fields(0)) & "VEHID.txt" For Output As #3
        Open App.Path & "\busdata\" & Trim(rs0.Fields(0)) & "VEHID.txt" For Append As #3
        '这里使用Append 方式打开比较好,可以不需要上面的: '如果不存在该文件,则创建并写入,可以自动创建文件,并且是给文件末尾写入内容
        rs3.MoveFirst
        While Not rs3.EOF
            strTemp3 = rs3.Fields(0)
            Dim rs4 As New ADODB.Recordset
            rs4.Open "select ... ", cn, adOpenKeyset, adLockOptimistic
            'If rs4.Fields(0) < 1800 Then Print #3, strTemp3
            If rs4.Fields(0) < 1800 Then Write #3, strTemp3    '顺序文件中应该是:写入指令  Write,读取指令 Input
            Close #3   '写入后必须关闭文件
            Set rs4 = Nothing      '记录集不能在打开的状态下再打开,要在open之前先close关闭它
            rs3.MoveNext
        Wend
        Close #3
这样修改应该可以了吧。
谢谢! 循环中 Close #3 '写入后必须关闭文件 这句有问题吧?
xyzmrsir 2016-05-31
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
建议楼主学习T-SQL存储过程。
好的,多谢指导! 能否请就此问题帮忙修改下代码?非常感谢!
ZHRXJR 2016-05-31
  • 打赏
  • 举报
回复
 Dim strTemp3 As String
        Dim i3 As Integer
        'Open App.Path & "\busdata\" & Trim(rs0.Fields(0)) & "VEHID.txt" For Output As #3
        Open App.Path & "\busdata\" & Trim(rs0.Fields(0)) & "VEHID.txt" For Append As #3
        '这里使用Append 方式打开比较好,可以不需要上面的: '如果不存在该文件,则创建并写入,可以自动创建文件,并且是给文件末尾写入内容
        rs3.MoveFirst
        While Not rs3.EOF
            strTemp3 = rs3.Fields(0)
            Dim rs4 As New ADODB.Recordset
            rs4.Open "select ... ", cn, adOpenKeyset, adLockOptimistic
            'If rs4.Fields(0) < 1800 Then Print #3, strTemp3
            If rs4.Fields(0) < 1800 Then Write #3, strTemp3    '顺序文件中应该是:写入指令  Write,读取指令 Input
            Close #3   '写入后必须关闭文件
            Set rs4 = Nothing      '记录集不能在打开的状态下再打开,要在open之前先close关闭它
            rs3.MoveNext
        Wend
        Close #3
这样修改应该可以了吧。

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧