大家好,我在写语句时发现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)。甚望大家不吝赐教,非常感谢!
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)。甚望大家不吝赐教,非常感谢!
解决方案 »
- 一个工程调用另外一个工程窗口的问题
- 没用过VB,请问用VC++ 6.0开发出来的标准的Windows DLL导出类可以在VB中直接使用吗?
- XP怎么运行快捷方式?
- 求教,在VB里如何打开EXCEL,使打开的EXCEL的某个菜单不显示。
- 编了一个日期控件,当其父窗体卸载时如何能让父窗体触发QueryUnload事件之前,日期控件变回正确的日期?
- 如何在VB给代码行编注释
- VB默认安装中是不是没有DBGRID 控件,只有一个DATA GRID ,请问怎么装呢?
- 求助!谁有html help workshop的中文使用说明?给我
- datagrid刷新问题
- 各位大虾,求求你们,帮帮忙,(给分,交朋友,谢谢!!!)
- 寻求英文翻译
- 关于vb中webbrowser控件如何提交的问题?
试着改下:
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
只是我还想请问一下,为什么要去除前4行呢(我是初学VB的,所以请别见笑啊,呵呵)?
也非常感谢vbman2003 呵呵 因为刚接触编程 所以思维比较混乱 以后会努力的 还望海涵!
你声明了公用的connection和recordset,按你的逻辑是窗体加载时连接数据库,并返回一个查询记录集...
loaddata中的操作都是读取这个记录集的数据,所以只要对这个记录集进行movenext一条条读取数据,并用现有的connection对象进行更新操作就可以了...你不断的重新连接返回同样的记录集,造成错误是必然的,你可以按F8跟踪调试一下,看看是什么样情况...