VB中实现导出数据至EXCEL

foreverstar2004 2005-09-21 03:22:04
代码如下:
Private Sub Command1_Click()
Dim txtsql As String
Dim msgtxt As String
Dim i As Integer
Dim myexcel As New Excel.Application
Dim mybook As New Excel.Workbook
Dim mysheet As New Excel.Worksheet
Set mybook = myexcel.Workbooks.Add '添加一个新的BOOK
Set mysheet = mybook.Worksheets.Add '添加一个新的SHEET
myexcel.Visible = True

txtsql = "select * from goods"
Set mrc = executesql(txtsql, msgtxt)
If mrc Is Nothing = False Then
mrc.MoveFirst

For i = 0 To mrc.RecordCount - 1
mysheet.Cells(i + 1).CopyFromRecordset mrc
mrc.MoveNext
Next



End If
End Sub

出现以下错误:实时错误,BOF或EOF中有一个为真,或当前记录已被删除,
将for循环改为while循环也是出现同样的错误

While (mrc.EOF = False)
mysheet.Cells.CopyFromRecordset mrc
mrc.MoveNext
Next


'但我同一个程序里的另一段其它代码如下,就不会产生错误
While (mrc.EOF = False)
If (Trim(mrc.Fields(0))) = Trim(txt_id.Text) Then
MsgBox "该客户编号已经存在!", vbOKOnly + vbExclamation, "警告"
txt_id.Text = ""
txt_id.SetFocus
Exit Sub
Else
mrc.MoveNext
End If
Wend

'为什么啊,2段代码不是同样的道理吗?为什么第一段出错,第2段就没错了,对同一个表操作,表里面有15条记录!
...全文
320 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
faysky2 2005-09-30
  • 打赏
  • 举报
回复
For i = 0 To mrc.RecordCount - 1
mysheet.Cells(i + 1).CopyFromRecordset mrc
mrc.MoveNext
Next
不用循环,也不用移动记录,直接改为:
mysheet.Range("a1").CopyFromRecordset mrc
foreverstar2004 2005-09-26
  • 打赏
  • 举报
回复
怎么没人回我啊,问题依旧存在!
foreverstar2004 2005-09-22
  • 打赏
  • 举报
回复
to myhgyp(也许是这样的,信不信由你) 如果把if mrc is nothing=false then 改成 if not (mrc.bof and mrc.eof) then 的话,如果该表内没有数据,则会出错,我的判断if mrc is nothing=false 是用来判断是否为null,如果不为null才再进行eof的判断,你们都没明白我的意思,思路如下:

(1):先用 if mrc is nothing=false 判断表里是否有数据,如果有则进行 while not mrc.eof的判断,如果没有记录则跳出
(2):如果有记录,则将指针移至首条,然后逐条读出,直到mrc.eof为真则跳出
(3):问题就出在mrc.movenext上面(VB提示该行出错,BOF或EOF为真)
baierye 2005-09-21
  • 打赏
  • 举报
回复
在mrc.MoveFirst前加 if mrc.RecordCount = 0 then exit sub
myhgyp 2005-09-21
  • 打赏
  • 举报
回复
应该不是你所说的地方错误,是mrc.MoveFirst就错了
把If mrc Is Nothing = False Then改成:If not (mrc.bof and mrc.eof) Then试试
而且好像没看到你定义mrc对象?
faysky2 2005-09-21
  • 打赏
  • 举报
回复
If mrc Is Nothing = False Then
mrc.MoveFirst

For i = 0 To mrc.RecordCount - 1
mysheet.Cells(i + 1).CopyFromRecordset mrc
mrc.MoveNext
Next



End If
改为:
If mrc.eof = False Then
mrc.MoveFirst

For i = 0 To mrc.RecordCount - 1
mysheet.Cells(i + 1).CopyFromRecordset mrc
mrc.MoveNext
Next



End If

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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