CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

关于ACCESS备注字段的问题,来者高分!

楼主bdzwc(bdzwc)2002-01-29 12:38:38 在 VB / 基础类 提问

有的说备注字段只能储存64K以下内容,有的说没有限制  
  我试了一下,好象确实64K以下  
  插入一个大图片后VB显示“堆饯溢出”  
  插入小图片就没事  
  那怎么办呢?我又想有文字和大图片,又想用ACCESS,怎么办? 问题点数:120、回复次数:22Top

1 楼dbcontrols(泰山__抛砖引玉)回复于 2002-01-29 12:41:04 得分 20

来者Top

2 楼zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)回复于 2002-01-29 12:42:28 得分 20

虽然我不知道,但是你写了“来者高分”,只有过来凑凑热闹。  
  Top

3 楼hydnoahark(诺亚方舟)回复于 2002-01-29 12:42:42 得分 20

使用OLE   Object类型而不要使用Memo类型Top

4 楼cqq_chen(我是谁)回复于 2002-01-29 12:42:44 得分 20

很好办!图片存放时只放它的路径就可以了。好处是:ACCESS数据库达到1G以后,数据容易出问题,而在数据库中存放太大的图片将直接让数据库变的极为庞大,所以只存好图片的路径是最好的方法之一;不好的是:如果图片被人移动或删除,则发现找不到图片的错误。Top

5 楼zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)回复于 2002-01-29 12:44:39 得分 20

把大图片分割成小图片!  
  这是制作网页的常见办法!Top

6 楼bdzwc(bdzwc)回复于 2002-01-29 12:48:01 得分 0

to   诺亚方舟:  
  使用OLEOBJECT类型很不方便啊,不能直接编辑什么的,很麻烦  
  TO   我是谁:  
  我不知道用户会从哪里插入啊?  
  真的没有办法吗?Top

7 楼dbcontrols(泰山__抛砖引玉)回复于 2002-01-29 12:48:15 得分 0

http://leson.hongnet.com/sql/1/Top

8 楼dbcontrols(泰山__抛砖引玉)回复于 2002-01-29 12:51:25 得分 0

http://media.ccidnet.com/media/cce/353/01401.htmTop

9 楼bdzwc(bdzwc)回复于 2002-01-29 13:10:23 得分 0

大哥,那两个站点我上不去Top

10 楼Richard2001(Richard)回复于 2002-01-29 13:13:06 得分 0

将图片放在ImageList控件中。不放在数据库中。Top

11 楼rushing(勇敢的心)回复于 2002-01-29 13:14:55 得分 0

可以超过64K。几兆都没问题。  
  我以前存过图片。  
  Top

12 楼bdzwc(bdzwc)回复于 2002-01-29 15:29:56 得分 0

真的吗?你怎么办到的?Top

13 楼lihonggen0(李洪根,MS MVP,标准答案来了)回复于 2002-01-29 16:00:16 得分 20

应该能存   64k   以上,请检查你的代码  
  "堆饯溢出"是程序运行时在内存的堆栈中已满,Top

14 楼bdzwc(bdzwc)回复于 2002-01-30 08:54:45 得分 0

HELPTop

15 楼hycapril(四月_健康最重要,赚钱也重要~~~)回复于 2002-01-30 09:57:20 得分 0

我赞成'我是谁'的看法...........Top

16 楼lou_df(ldf)回复于 2002-01-30 10:08:18 得分 0

用TEXT字段保存路径应该是个好办法。比较灵活,还可以修改、更换图像。用数据库保存图像可能保密性比较好。Top

17 楼AdamBear(亚当熊)回复于 2002-01-30 10:27:50 得分 0

“堆饯溢出”,是程序的问题,ACCESS没有64K限制、但自定义类型的变量不能超过64K.  
  还有一些64K限制,下面摘到MSDN:  
  作为变量声明的数组不能使用全部数组空间;只有数组描述符对   64K   的限制起作用。例如,在过程中声明或作为模块级声明,Dim   x(1000000)   As   Byte。然而,如果在记录中声明了一个大的、固定大小的数组,然后将这些记录的示例声明为变量时,就会发生内存溢出。  
   
  至于“堆饯溢出”,MSDN里是这么说的:  
  在运行时过程中的参数和局部变量占用堆栈空间。而模块级变量和静态变量不占堆栈空间,因为它们被分配在窗体或模块的数据段中。任何被调用的   DLL   过程,在执行时都要使用堆栈。  
   
  Visual   Basic   自己也使用堆栈,例如,在计算表达式时保存中间值。  
   
  Visual   Basic全部可用堆栈的大小是每线程一兆字节(1MB)。然而,如果有相邻的闲置内存,堆栈的大小可以超过这个限定。  
   
  我所遇见过的“堆饯溢出”大部分是因为使用了嵌套过程,在VB里开发递归子程序时这是  
  经常会碰到的问题。  
  可行的解决方法是自己做一个CStack的类模块,不要使用VB提供的"栈".  
  代码如下:  
  Option   Explicit  
   
  Public   Enum   EErrorStack  
          eeBaseStack   =   13230           '   CStack  
  End   Enum  
   
  Private   av()   As   Variant  
  Private   Const   cChunk   =   10  
  Private   iLast   As   Long,   iCur   As   Long  
   
  Sub   Push(vArg   As   Variant)  
          iCur   =   iCur   +   1  
          On   Error   GoTo   FailPush  
          If   IsObject(vArg)   Then  
                  Set   av(iCur)   =   vArg  
          Else  
                  av(iCur)   =   vArg  
          End   If  
          Exit   Sub  
  FailPush:  
          iLast   =   iLast   +   cChunk     '   Grow  
          ReDim   Preserve   av(1   To   iLast)   As   Variant  
          Resume                                     '   Try   again  
  End   Sub  
   
  Function   Pop()   As   Variant  
          If   iCur   Then  
                  If   IsObject(av(iCur))   Then  
                          Set   Pop   =   av(iCur)  
                  Else  
                          Pop   =   av(iCur)  
                  End   If  
                  iCur   =   iCur   -   1  
                  If   iCur   <   (iLast   -   cChunk)   Then  
                          iLast   =   iLast   -   cChunk             '   Shrink  
                          ReDim   Preserve   av(1   To   iLast)   As   Variant  
                  End   If  
          End   If  
  End   Function  
   
  Property   Get   Count()   As   Long  
          Count   =   iCur  
  End   Property  
   
  然后把递归过程转换成用栈来模拟,不过这也不是一件简单的事。  
  说多了,自己看看代码上有没有什么问题吧!Top

18 楼AdamBear(亚当熊)回复于 2002-01-30 10:40:34 得分 0

“堆饯溢出”,是程序的问题,ACCESS没有64K限制、但自定义类型的变量不能超过64K.  
  还有一些64K限制,下面摘到MSDN:  
  作为变量声明的数组不能使用全部数组空间;只有数组描述符对   64K   的限制起作用。例如,在过程中声明或作为模块级声明,Dim   x(1000000)   As   Byte。然而,如果在记录中声明了一个大的、固定大小的数组,然后将这些记录的示例声明为变量时,就会发生内存溢出。  
   
  至于“堆饯溢出”,MSDN里是这么说的:  
  在运行时过程中的参数和局部变量占用堆栈空间。而模块级变量和静态变量不占堆栈空间,因为它们被分配在窗体或模块的数据段中。任何被调用的   DLL   过程,在执行时都要使用堆栈。  
   
  Visual   Basic   自己也使用堆栈,例如,在计算表达式时保存中间值。  
   
  Visual   Basic全部可用堆栈的大小是每线程一兆字节(1MB)。然而,如果有相邻的闲置内存,堆栈的大小可以超过这个限定。  
   
  我所遇见过的“堆饯溢出”大部分是因为使用了嵌套过程,在VB里开发递归子程序时这是  
  经常会碰到的问题。  
  可行的解决方法是自己做一个CStack的类模块,不要使用VB提供的"栈".  
  代码如下:  
  Option   Explicit  
   
  Public   Enum   EErrorStack  
          eeBaseStack   =   13230           '   CStack  
  End   Enum  
   
  Private   av()   As   Variant  
  Private   Const   cChunk   =   10  
  Private   iLast   As   Long,   iCur   As   Long  
   
  Sub   Push(vArg   As   Variant)  
          iCur   =   iCur   +   1  
          On   Error   GoTo   FailPush  
          If   IsObject(vArg)   Then  
                  Set   av(iCur)   =   vArg  
          Else  
                  av(iCur)   =   vArg  
          End   If  
          Exit   Sub  
  FailPush:  
          iLast   =   iLast   +   cChunk     '   Grow  
          ReDim   Preserve   av(1   To   iLast)   As   Variant  
          Resume                                     '   Try   again  
  End   Sub  
   
  Function   Pop()   As   Variant  
          If   iCur   Then  
                  If   IsObject(av(iCur))   Then  
                          Set   Pop   =   av(iCur)  
                  Else  
                          Pop   =   av(iCur)  
                  End   If  
                  iCur   =   iCur   -   1  
                  If   iCur   <   (iLast   -   cChunk)   Then  
                          iLast   =   iLast   -   cChunk             '   Shrink  
                          ReDim   Preserve   av(1   To   iLast)   As   Variant  
                  End   If  
          End   If  
  End   Function  
   
  Property   Get   Count()   As   Long  
          Count   =   iCur  
  End   Property  
   
  然后把递归过程转换成用栈来模拟,不过这也不是一件简单的事。  
  说多了,自己看看代码上有没有什么问题吧!Top

19 楼AdamBear(亚当熊)回复于 2002-01-30 10:52:07 得分 0

对不起,不知为什么发了两次。Top

20 楼jamex(1 + 1 = 爱)回复于 2002-01-30 13:23:45 得分 0

1   用Sql   Server  
   
  2.   用路径名Top

21 楼feihong0233(泓)回复于 2002-01-30 13:59:00 得分 0

二进制型不就可以了,  
  为什么要用备注型?Top

22 楼bdzwc(bdzwc)回复于 2002-02-04 17:17:53 得分 0

问题解决,散分Top

相关问题

  • 怎样创建access的备注字段
  • ACCESS备注字段的读取问题
  • ADO+ACCESS:如何把ACCESS中数据类型为"备注"字段的内容分行打印出来?
  • Access的备注字段,用con.execute("insert into ......)提示错误说数据太长不能插入备注字段?
  • 从Access对备注字段读出来要求有分段格式(即以回车为分段)[在线结帖]
  • dephi中怎么在dbgrid中显示access的备注型字段
  • 用什么数据类型接收Access表的备注字段
  • 怎样读取access中的备注字段中的数据
  • 如何update access的备注型字段(急,当天!)
  • dbGrid显示不了Access数据库的备注字段

关键词

  • 字段
  • 数据库
  • 模块
  • 内存
  • access
  • icur
  • 堆栈
  • varg
  • 数组
  • 变量

得分解答快速导航

  • 帖主:bdzwc
  • dbcontrols
  • zyl910
  • hydnoahark
  • cqq_chen
  • zyl910
  • lihonggen0

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo