大家好,我在写语句时发现For循环未能执行movenext,请大家帮忙看看,非常感谢。大致代码如下:Option Explicit
Dim adoRst As ADODB.Recordset
Dim adoCon As ADODB.ConnectionPrivate Sub Form_Load()
    Set adoCon = New ADODB.Connection
    adoCon.Open "PROVIDER=MSDASQL;DRIVER={SQL Server};" & "server=11287a6ceda642d; database=test"
    Set adoRst = New ADODB.Recordset
    adoRst.Open "select * from orders$", adoCon, 1, 1    Dim i As Integer
    For i = 1 To 20
      Call loaddata
      adoRst.MoveNext
    Next i
End SubPrivate Sub loaddata()
    Set adoCon = New ADODB.Connection
    adoCon.Open "PROVIDER=MSDASQL;DRIVER={SQL Server};" & "server=11287a6ceda642d; database=test"
    Set adoRst = New ADODB.Recordset
    adoRst.Open "select * from orders$", adoCon, 1, 1
    Text1.Text = adoRst("rec_no")
    Text2.Text = Format(adoRst("o_date"), "yyyy-mm-dd")
    Text3.Text = DateAdd("d", 1, Format(adoRst("o_date"), "yyyy-mm-dd"))   '将订单日期o_date的值加1,赋给 Text3.Text     Set adoCon = New ADODB.Connection
    adoCon.Open "PROVIDER=MSDASQL;DRIVER={SQL Server};" & "server=11287a6ceda642d; database=test"
    adoCon.Execute "update orders$ set make_date= '" & Text3.Text & "'" & " where rec_no= '" & Text1.Text & "'"  '更新数据库test中表orders$的make_date属性字段的值(原值默认为Null) 
End SubPrivate Sub Command1_Click()
    Set adoRst = Nothing
    Unload Me
End Sub代码说明:
(1)由于是刚学VB,所以代码写得可能比较幼稚,还请大家包涵!
(2)在For循环中,我最开始使用的是
    Do While adoRst.EOF=False
      Call loaddata
      adoRst.MoveNext
    Loop
但在调试中发现进入了死循环,琢磨了N久也不知所以然,后来就改成了For循环(数据库test的orders$表中就只有20条记录),虽然没有死机,但在调试中发现似乎没有执行movenext(不过我也不确信,我用F8调试,好像执行了movenext,但在SQL Server数据库中用select语句查询make_date属性字段时,发现就第一条记录的值有变化,其余记录的值仍为默认值Null)。甚望大家不吝赐教,非常感谢!

解决方案 »

  1.   

    逻辑混乱,编写代码前首先要清思路,定好流程,不是想到那儿写到那...
    试着改下:
    Dim adoRst As ADODB.Recordset 
    Dim adoCon As ADODB.Connection Private Sub Form_Load() 
        Set adoCon = New ADODB.Connection 
        adoCon.Open "PROVIDER=MSDASQL;DRIVER={SQL Server};" & "server=11287a6ceda642d; database=test" 
        Set adoRst = New ADODB.Recordset 
        adoRst.Open "select * from orders$", adoCon, 1, 1 
        Call loaddata 
    End Sub Private Sub loaddata() 
        while not adoRst.EOF
            Text1.Text = adoRst("rec_no") 
            Text2.Text = Format(adoRst("o_date"), "yyyy-mm-dd") 
            Text3.Text = DateAdd("d", 1, Format(adoRst("o_date"), "yyyy-mm-dd"))  '将订单日期o_date的值加1,赋给 Text3.Text 
            adoCon.Execute "update orders$ set make_date= '" & Text3.Text & "'" & " where rec_no= '" & Text1.Text & "'"  '更新数据库test中表orders$的make_date属性字段的值(原值默认为Null)
             adoRst.MoveNext 
        wend
    End Sub Private Sub Command1_Click() 
        Set adoRst = Nothing 
        Unload Me 
    End Sub
      

  2.   

    多谢楼上,按照您的方法调试成功了,并且用Do While语句也没有死循环问题了。非常非常感谢!
    只是我还想请问一下,为什么要去除前4行呢(我是初学VB的,所以请别见笑啊,呵呵)?
      

  3.   

    哦 上一条帖子是回复slowgrace的。
    也非常感谢vbman2003 呵呵 因为刚接触编程 所以思维比较混乱 以后会努力的 还望海涵!
      

  4.   


    你声明了公用的connection和recordset,按你的逻辑是窗体加载时连接数据库,并返回一个查询记录集...
    loaddata中的操作都是读取这个记录集的数据,所以只要对这个记录集进行movenext一条条读取数据,并用现有的connection对象进行更新操作就可以了...你不断的重新连接返回同样的记录集,造成错误是必然的,你可以按F8跟踪调试一下,看看是什么样情况...