下面是程序,不知哪错了
Private Sub Command1_Click()
Dim cdia() As Single
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strcnn As String
strcnn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Documents and Settings\Administrator\桌面\软件\djgl.mdb;initial catalog=pubs;user id=sa;password=;"
Set cn = New ADODB.Connection
cn.Open strcnn
Set rs = New ADODB.Recordset
Set DataGrid.DataSource = rs
rs.CursorLocation = adUseClient
rs.CursorType = adOpenKeyset
rs.LockType = adLockOptimistic
Set rs = cn.Execute("select * from 刀具直径")
Do While Not rs.EOF()
For i = 1 To rs.RecordCount
cdia(i) = rs!直径
Next i
Print "cdia(" & i & ")" = cdia(i)
Print
Loop
End Sub
Private Sub Command1_Click()
Dim cdia() As Single
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strcnn As String
strcnn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Documents and Settings\Administrator\桌面\软件\djgl.mdb;initial catalog=pubs;user id=sa;password=;"
Set cn = New ADODB.Connection
cn.Open strcnn
Set rs = New ADODB.Recordset
Set DataGrid.DataSource = rs
rs.CursorLocation = adUseClient
rs.CursorType = adOpenKeyset
rs.LockType = adLockOptimistic
Set rs = cn.Execute("select * from 刀具直径")
Do While Not rs.EOF()
For i = 1 To rs.RecordCount
cdia(i) = rs!直径
Next i
Print "cdia(" & i & ")" = cdia(i)
Loop
End Sub
Do While Not rs.EOF()
cdia(i) = rs!直径
Print "cdia(" & i & ") = " cdia(i)
i=i+1
Loop
用cn.execute方法返回的记录集是只读向前的,所以
rs.CursorLocation = adUseClient
rs.CursorType = adOpenKeyset
rs.LockType = adLockOptimistic
这几行代码可以注释掉
Do While Not rs.EOF()
cdia(i) = rs!直径
Print "cdia(" & i & ") = " cdia(i)
i=i+1
Loop
这种方法也不行,和我的没什么区别系统提示这有错误:
cn.Open strcnn
但不知道错在哪
Do While Not rs.EOF()
cdia(i) = rs!直径
Print "cdia(" & i & ") = " cdia(i)
rs.movenext
i=i+1
Loop 不过和你的代码还是有区别的
如果你的代码可以在FOR循环中完成,那么DO循环就没有意义了,是多余的你不能连接数据库,必一下连接字符串,类似如下:"Provider=Microsoft.Jet.OLEDB.4.0; " _
& "Data Source=" & App.Path & "\db1.mdb; " _
& "Persist Security Info=False;Jet OLEDB:Database Password=123"你的下面这二项肯定是不对的:
initial catalog=pubs;user id=sa;password=;"
如果一定要用FOR循环,那么就:
dim RScount as integer
cn.execute sql,RScount
for i=0 to RScount-1
'......
next i
Set cn = New ADODB.Connection
cn.Open strcnn
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.CursorType = adOpenKeyset
rs.LockType = adLockOptimistic
rs.Open ("select * from 刀具直径")
i = 1
Do While Not rs.EOF()
cdia(i) = rs!直径
rs.MoveNext
Print "cdia(" & i & ")="; cdia(i)
i = i + 1
Loop
上面是改过的,可提示说上面红的部分有错误,“连接无法用于执行此操作,在此上下文中它可能已被关闭或无效”
strcnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\djgl.mdb;Persist Security Info=False;Jet OLEDB:Database Password=123"
Set cn = New ADODB.Connection
cn.Open strcnn
debug.print cn.state'看看cn是否连接上(1-连通 0-未通)
if cn.state=0 then msgbox "没连上数据库啊"
Set rs = New ADODB.Recordset
rs.Open "刀具直径",cn,1,1
i = 1
Do While Not rs.EOF()
cdia(i) = rs!直径
rs.MoveNext
Print "cdia(" & i & ")="; cdia(i)
i = i + 1
Loop
cdia(i) = rs!直径--->下标越界(系统提示)这个问题有这么难吗
i = 0
Do While Not rs.EOF()
cdia(i) = rs!直径
rs.MoveNext
Print "cdia(" & i & ")="; cdia(i)
i = i + 1
Loop
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strcnn As String
Dim i As Integer
i = 0 也是同样的错误
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim strcnn As String
Dim i As Integer strcnn = "Provider=Microsoft.Jet.OLEDB.4.0;" _
&"Data Source=" & App.Path & "\djgl.mdb;" _
&"Persist Security Info=False;" _
&"Jet OLEDB:Database Password=123"
Set cn = New ADODB.Connection
cn.Open strcnn Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open ("select * from 刀具直径"),cn, _
adOpenKeyset, adLockOptimistic redim cdia(rs.recordcount)
Do While Not rs.EOF()
cdia(i) = rs!直径
rs.MoveNext
Print "cdia(" & i & ")="; cdia(i)
i = i + 1
Loop
set rs = nothing
set cn = nothing
不过do语句前还是要初始化i=1的