古怪问题,各路高手请进!

ksmark 2005-11-02 09:07:51
问题1:使用“Microsoft FlexGrid Control 6.0”控件,从数据库里面读入数据,居然在读到14000行时出现“实时错误'30006',不能为FlexGrid分配内存。”
问题2:从数据库中导出,在我机器windowsxp home版或windows2000server导出没有问题。但在windows2000professional机器上导不出来,一下子就关闭程序了。做了陷阱,也捕捉不到。不知道问题出在哪里?请高手看看。还有在某些盗版的XP下面导出的时候,出现错误报告,然后自动关闭程序了。
On Error GoTo SaveToExcel
Dim mrc As ADODB.Recordset
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim MsgText As String
Dim filename As String
Dim i As Long
Dim intCount As Long

If flagTedit Then
CommonDialog1.Filter = "excel(*.xls)|*.xls"
CommonDialog1.ShowSave
If CommonDialog1.filename = "" Then
Exit Sub
End If
filename = CommonDialog1.filename
Else
MsgBox "您还没打开传票一览窗口!", vbOKOnly + vbExclamation, "警告"
Exit Sub
End If

Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlApp.Worksheets(1)

If flagTedit Then
'显示进度窗口
frmPercent.iPerc = frmJGZPChuanPiaoShow.msgList2.Rows
For intCount = 0 To frmJGZPChuanPiaoShow.msgList2.Rows - 1
frmPercent.Show
frmPercent.lblPercent = CStr(Round(((intCount + 1) / frmJGZPChuanPiaoShow.msgList2.Rows) * 100)) & "%"
frmPercent.lblPercent.Refresh
frmPercent.PrgBar.Value = intCount + 1
For i = 1 To 24
xlSheet.Cells(intCount + 1, i).Value = frmJGZPChuanPiaoShow.msgList2.TextMatrix(intCount, i)
Next i
DoEvents
Next intCount
Unload frmPercent
'xlSheet.Range(xlSheet.Cells(1, 1), xlSheet.Cells((intCount), (i - 1))).Select
xlSheet.Columns.AutoFit
xlSheet.SaveAs filename
xlSheet.Application.Quit
Set xlBook = Nothing
Set xlSheet = Nothing
Else
MsgBox "传票一览表中没有记录,请重试!", vbOKOnly + vbExclamation, "警告"

End If
...全文
256 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
fishmans 2005-12-08
  • 打赏
  • 举报
回复
不要用那么高版本的,用5.0或8.0就可以了
ksmark 2005-12-07
  • 打赏
  • 举报
回复
引用的是:Microsoft Excel 11.0 Object Library
fishmans 2005-11-03
  • 打赏
  • 举报
回复
看你引用的excel是什么版本的吧
ksmark 2005-11-03
  • 打赏
  • 举报
回复
虽然能够导出了,但是我不知道为什么要装office2003。难道是我的系统里面是office2003的原因吗?
ksmark 2005-11-03
  • 打赏
  • 举报
回复
问题已经解决,但是我也帮客户端都装上了office2003。跟我现在机器上的一样的。
很奇怪。不知道为什么。
ksmark 2005-11-03
  • 打赏
  • 举报
回复
To: northwolves
可是我的数据已经从数据库导入到mshflexgrid控件中了。这样做是因为,第一,我想不占用服务器资源所以才在客户端设计那个导出功能的。第二,我想让他们在mshflexgrid控件中看到他们输入的数据,如果发现错得可以及时的修改。

如果老是从服务器上导出数据,那岂不是服务器要很慢?
ksmark 2005-11-02
  • 打赏
  • 举报
回复
第一个问题,我已经把我的连接时间设置到360了。代码为:cnn.ConnectionTimeout = 360但是还会出现上述问题。郁闷....
northwolves 2005-11-02
  • 打赏
  • 举报
回复
第二个问题建议使用ADO将数据集直接从数据源传输到 Excel,可以参看微软支持:

http://support.microsoft.com/default.aspx?scid=kb;zh-cn;295646
bobdog1215 2005-11-02
  • 打赏
  • 举报
回复
cnn.commandtimeout
ksmark 2005-11-02
  • 打赏
  • 举报
回复
在那里设置数据库的连接时间?
上官云峰 2005-11-02
  • 打赏
  • 举报
回复
1、可能是数据太大,影响连接时间,你将数据库连接时间也就是timeout设置大点

2、估计是你的进度条的问题,我的程序在2000下就没有问题,你看看我的程序
Private Sub Command1_Click()

On Error GoTo ErrHandler

Dim strsql As String
Dim strsql_db As String
Dim j As Integer

If Text1.Text = "" Then
MsgBox "请输入导入年份!", 48, "信息"
Exit Sub
End If

strsql = "select * from jhtz_table "
Set rs = ExecuteSQL(strsql, msgtext)

With CommonDialog1
.DialogTitle = "从Excel导出" & Text1.Text & "数据"
.FileName = "*.xls"
.Filter = "(Excel)*.xls|*.xls"
.CancelError = True
.ShowOpen
End With

strcnn = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=false;Data Source=" & CommonDialog1.FileName & ";Extended Properties='Excel 8.0;HDR=Yes'"
Set cnn = New ADODB.Connection
cnn.Open strcnn
strsql_db = "select * from [sheet1$]"
cnn.Execute strsql_db
Set rs_db = New ADODB.Recordset
rs_db.Open strsql_db, cnn, adOpenKeyset, adLockOptimistic

For j = 1 To rs_db.RecordCount

rs.AddNew
rs.Fields("jh_dwbm") = rs_db.Fields(0)
rs.Fields("jh_xh") = rs_db.Fields(1)
rs.Fields("jh_sbmc") = rs_db.Fields(2)
rs.Fields("jh_gg") = rs_db.Fields(3)
rs.Fields("jh_dw") = rs_db.Fields(4)
rs.Update
rs_db.MoveNext
Next j
MsgBox "导入成功,共有" & rs_db.RecordCount & "条记录!", 48, "信息"
Exit Sub
ErrHandler:
'用户按了“取消”按钮
MsgBox "用户取消从Excel导出数据操作!", 48, "提示"
Exit Sub
End Sub
ksmark 2005-11-02
  • 打赏
  • 举报
回复
第二个问题仍然存在,请高手指点。谢谢啦!
ksmark 2005-11-02
  • 打赏
  • 举报
回复
第一个问题已经解决了,我把“Microsoft FlexGrid Control 6.0”控件改为了“MSHFlexgrid”控件,就没有问题了。但是楼上说的分页,我还是不懂,请楼上指教。
northwolves 2005-11-02
  • 打赏
  • 举报
回复
建议分页显示
fishmans 2005-11-02
  • 打赏
  • 举报
回复
你换个vsflexgrid试试
操作基本一样,代码几乎不用改
'=====================================
看你显示1.4W行还有点意犹未尽
换控件也只是治标不治本,最好还是减少数据量或者分页显示
ksmark 2005-11-02
  • 打赏
  • 举报
回复
To:fishmans
请问换那个呢?请指点!
fishmans 2005-11-02
  • 打赏
  • 举报
回复
别找了,msflexgrid是有BUG的
显示不了那么多行,换别的或减少点数据量
ksmark 2005-11-02
  • 打赏
  • 举报
回复
To: cuilei197979(风)
不是进度条的问题,我已经测试过了。我把有进度条的几句删掉,还是导出时候关掉程序。

7,763

社区成员

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

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