用VB的ADO去查询一个ACCESS的数据表,结果存储在一个表格内。用VB环境调试时,结果显示正常,可是编译后执行,就会提示“内存溢出”的错误,而且错误也捕获不到。这会是什么问题啊?怎么会这样?关键是用VB环境调试时,结果显示正常,可是编译(编译成p-code这个方法也试过)后执行却会出现这样的错误啊! 查询十万条以内的数据还是正常的,可是查询十万条以上(具体的我不知道几条,但我的ACCESS数据表里有三十几万条记录),就会出错。经过我的再次验证,我发现主要问题我用ADO的Recordset的open方法,去打开一个数据库里的数据。就是这句话导致的结果。如下: 
rs.open "select * from mytable where keywords='" & txtKeywords.text & "'",dbconn
因为关联的ACCESS里的mytable这个表有三十几万条的数据,一查询就如上面所说的问题的。我不解的是:为什么在VB调试下可以,在编译后不行。还有,如果Recordset.open这个方法能要开多少条数据?多少条 内不会出错?有没有相关书藉,请高手指点。谢谢!后来经高手指点,查询的是三十几万条数据,这对ACCESS来说,是比较承受不了的吧。我想还是用存储过程来实现,让数据库来处理查询过程,返回结果,减少程序本身的负担。于是我就改用ACCESS的视图来实现,使用方法当然是采用ADO的COMMAND对象,可以参数输入的时候遇到这样一个问题。程序部分代码如下:    prm_Name = "prmCDTitleID" '参数名称
    prm_Type = 3 '参数类型,3表示整数
    prm_Direction = 1 '参数方向,1表示输出
    prm_Size = 2 '参数大小,最大字节数为10
    Dim prm_value1 As String
    prm_value1 = prmValue1  '参数值    Set adoPrimaryPRM = adoPrimaryCMD.CreateParameter(prm_Name, prm_Type, prm_Direction, prm_Size, prm_value1)
    adoPrimaryCMD.Parameters.Append adoPrimaryPRM在这里,我输入的参数为整型,也就是要输入数字。但如果我要查询所有的数据,也就是并不想输入一个特定的整数,想用一个通配符来表示(如果是字符型可以用%来做通配符),一直找不到合理的方法,大家有没有什么方法呢?请高手指点。 另外,我的内存溢出问题采用ACCESS的这种方法后,依旧没有得到解决,也就是在VB环境下可以查询,编译后运行就会产生“内存溢出”的错误,百思不得其解。请高手指点。

解决方案 »

  1.   

    你是不是把MDB給包進去了呀?
    我以前有用過ACCESS的查詢,資料表也不是很多,查詢有做過幾十個,記得在包時就出錯了,但跟你的不一樣,後來我把那些查詢都給刪除,就正常了
    我在想,你的MDB那麽多資料,要包進去,恐怕系統承受不了吧?
      

  2.   

    感谢 daisylh(婁子) 回答我的问题,你说的包进去是什么意思?我在设计的时候,有编译一下进行调试啊。并没有打包就有这样的问题了啊。数据库我认为是没有什么问题的,因为我有专门的处理数据库工具,包括压缩。请大家多多提点建议,谢谢!
      

  3.   


    经过我的再次验证,我发现主要问题我用ADO的Recordset的open方法,去打开一个数据库里的数据。就是这句话导致的结果。如下: 
    rs.open "select * from mytable where keywords='" & txtKeywords.text & "'",dbconn
    因为关联的ACCESS里的mytable这个表有三十几万条的数据,一查询就如上面所说的问题的。
    ********************************************************************************
    加上两个参数试试:
    rs.open "select * from mytable where keywords='" & txtKeywords.text & "'",dbconn _
    , adOpenKeyset, adLockOptimistic
      

  4.   

    ACCESS三十几万不能算多,我这儿有一个每天要用的表有六十多万条数据,查询并不慢。当然除非全部数据查询。