| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1347 人关注过本帖
标题:查询ACCESS内存溢出
只看楼主 加入收藏
linandceline
Rank: 2
等 级:论坛游民
威 望:2
帖 子:88
专家分:47
注 册:2014-12-19
结帖率:78.95%
收藏
已结贴  问题点数:20 回复次数:16 
查询ACCESS内存溢出
我的目的是通过TEXT的变化自动筛选ACCESS中符合条件的数据并列到LIST中
当数据库中数据较少时没有问题,数据较多时出现内存溢出,真实使用数据约9K行
代码如下,求教解决办法

Private Sub Text2_Change()
Dim m As String
m = Text2.Text
List1.Clear
Text1.Text = ""

Set Conn = CreateObject("ADODB.Connection")
Connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\技术文件信息.mdb"
Conn.Open Connstr
Set Rs = CreateObject("adodb.recordset")
SQL = "Select * From SFILE where 文件代码 like  '%" & m & "%' or 物料编码 like  '%" & m & "%' or 文件名称 like  '%" & m & "%'"
Rs.Open SQL, Conn, 1, 2

Do While Not Rs.EOF
  List1.AddItem Rs("文件代码").Value & "  " & Rs("物料编码").Value & "  " & Rs("文件名称").Value
  Rs.movenext
Loop

End Sub
搜索更多相关主题的帖子: 技术 where 数据库 信息 
2015-04-11 17:01
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:5 
好像listbox控件最大行数限制为32767
2015-04-11 18:32
renxiaoyao36
Rank: 9Rank: 9Rank: 9
来 自:七宝中学
等 级:贵宾
威 望:31
帖 子:347
专家分:1077
注 册:2014-9-18
收藏
得分:5 
不清楚最大限制,但是是个变量就肯定有限制。所以楼上有道理

编程蛋疼的不是枯燥,而是辛辛苦苦编完几百行的代码,运行,“Runtime Error “xxx””。
2015-04-12 18:53
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:5 
可以使用 翻页技术,不需要一次性把数据全部加载到 控件里。

你可以计算一下当前能显示的行数,然后以这个行数去做翻页功能。同时提供 向后跳转多页的功能。
翻页功能,在 ASP 里代码使用的非常多,可以参考一下那边的代码。
代码很类似,可以只看 <%  %> 的部分,外面是HTML用的,属于原样输出。

授人于鱼,不如授人于渔
早已停用QQ了
2015-04-13 09:38
linandceline
Rank: 2
等 级:论坛游民
威 望:2
帖 子:88
专家分:47
注 册:2014-12-19
收藏
得分:0 
回复 2楼 xzlxzlxzl
我主要想知道问题是出在哪里,怎么去解决
如果是限制是你所提的那个数值,那我的实际数值还远远达不到,这又是怎么回事呢?
2015-04-13 10:53
linandceline
Rank: 2
等 级:论坛游民
威 望:2
帖 子:88
专家分:47
注 册:2014-12-19
收藏
得分:0 
回复 4楼 风吹过b
我现在是用了ON ERROR来规避
这样导出来的程序会有什么问题么?
2015-04-13 14:14
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
我现在是用了ON ERROR来规避

这个一般用来是处理 未想到的错误,更容易导致程序不可控。

---------------------------------
大数据量时,都是不建议一次性装入控件。主要原因有:
1、占用内存
2、数据类型超限
3、运算过程漫长

特别是UI需要运算结果时,那这个运算过程漫长更是一个致命的问题。
-------------------------
VB6 是基于类的面向对象的编程语言,所提供的控件,窗体都是一个一个的类。
类里保存大量数据时,需要反复执行类里的相应的函数,而这个数据保存在内存,有二种方式,一种是重新申请内存,复制内存,一种是链表。
VB6可以是使用下标随机访问,所以我猜测可能是使用重新分配内存。在这过程中需要重复大量的申请内存,复制内存操作。
在这过程中,完全有可能因为内存碎片造成无法分配足够大的内存时而造成内存溢出。
=========================
有二种解决办法。
一是 只装入所需的数据,实行分页。
二是 使用自定义方式显示数据,这种情况我们可以直接使用数据库来源进行操作,而不需要再缓存。

授人于鱼,不如授人于渔
早已停用QQ了
2015-04-13 16:27
linandceline
Rank: 2
等 级:论坛游民
威 望:2
帖 子:88
专家分:47
注 册:2014-12-19
收藏
得分:0 
回复 7楼 风吹过b
用了ON ERROR后,查询没出现问题
我之前试过好多次,基本可以判定是在没有符合查询条件的情况时,内存就溢出
2015-04-13 17:39
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:5 
回复 楼主 linandceline
如果定义long型变量,listbox行数超过32k,每行近百个字符也测试过,也没问题。
textbox变化产生查询的时候,实际上从text2输入的只有一个字符,一个字符赋值给m?如果数据9k行,这么多字段,不会只有一位字符表示吧。
...

大开眼界
2015-04-14 10:46
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
如果定义long型变量,listbox行数超过32k,每行近百个字符也测试过,也没问题。


经测试,listbox.listconst 类型是 Integer ,但这仅仅是输出来的类型,在内部应该还是 LONG 类型。没有报错,还可以继续添加。
测试代码:WIN7(X86)+VB6
Private Sub Command1_Click()
Dim i As Long
Dim j As Integer
For i = 1 To 10240              '一次写入10K行
    List1.AddItem i
Next i

Label1.Caption = List1.ListCount    '写完后显示总行数
Debug.Print List1.ListCount

End Sub

测试结果
 10240
 20480
 30720
-24576
-14336
-4096
 6144

明显看到第四个数字就是溢出到符号位了,而第7个数字时,更是溢出了整数范围,明显超出了 2字节 的范围了。

======================
竟然listbox控件支持long行,那就说明问题不应该出在:
Do While Not Rs.EOF
  List1.AddItem Rs("文件代码").Value & "  " & Rs("物料编码").Value & "  " & Rs("文件名称").Value
  Rs.movenext
Loop
这个部分,那就需要去检查
SQL = "Select * From SFILE where 文件代码 like  '%" & m & "%' or 物料编码 like  '%" & m & "%' or 文件名称 like  '%" & m & "%'"
Rs.Open SQL, Conn, 1, 2
这个部分了。
没有数据库,无从测试。

-----------------------
建议楼主,明确告诉内存溢出错误在那一行。或者测试一下查询时是否有内存溢出情况。

这靠这静态代码,没有数据库,不去做动态测试,无从排错。

----------------
JET 或 ACCESS 的限制,百度没找着。

授人于鱼,不如授人于渔
早已停用QQ了
2015-04-14 12:20
快速回复:查询ACCESS内存溢出
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031931 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved