请问图片存入数据库的问题 ( 积分: 50 )

  • 主题发起人 主题发起人 piaoping
  • 开始时间 开始时间
P

piaoping

Unregistered / Unconfirmed
GUEST, unregistred user!
我们公司的款式图片库有两万多张,以前是在服务器里面做一个pic共享文件夹,<br>全部放在pic里面,数据库是存的是路径,客户端有三十多台机,特别是打报表时要<br>调用好多张图片,那个慢呀,好难忍受呀!现在我在另一台电脑上安装一个新的sqlserver,<br>试着已经把图片存入数据库中,三万张图片放入sqlserver中的一个tPCStylePicData表中,<br>我设了ID,StyleNO,Pic,Memo,这四个字段其中pic为image类型,图片是用流的方式存入数据库,数据库总共有有400mb左右;用delphi只建了一个新的窗体form1,里面加了几个<br>控件ADOConnection1,adoquery1,DataSource1,还有EditID,EditStyleNO,EditMemo来显<br>示字段内容,又做了一image1用来显示图片,还有button1的click事件是<br>ADOConnection1.Connected&nbsp;:=true;<br>adpquery1.sql:='select&nbsp;*&nbsp;from&nbsp;tPCStylePicData';<br>adoquery1.Active&nbsp;:=true;<br>还有button2的click事件是用来让image1显示图片,这里就不写内容<br>编译后的Project1.exe总共才0.98MB,&nbsp;JJYY说了一大堆不知大家明白了没?<br>我的问题是运行Project1.exe,打开window任务管理器,查看内存情况Project1.exe占9mb<br>sqlservr.exe占12mb,这种情况正常,好了我现在点击button1,这时我查看window任务管理器,好家伙,Project1.exe占三百多mb,sqlservr.exe占四百多mb呀,我想可能是因为这一句<br>adpquery1.sql:='select&nbsp;*&nbsp;from&nbsp;tPCStylePicData';&nbsp;<br>sqlserver把表tPCStylePicData的pic二进制的图片全部调入内存,Project1.exe这个玩艺也把pic二进制的图片全部调入内存,真是太恐怖了,现在我是想请高手帮忙改下语句,比方说让sqlserver一次只调一条数据到内存,我想这样占用内存就没那么高了
 
adpquery1.sql.text:='select&nbsp;*&nbsp;from&nbsp;tPCStylePicData&nbsp;where&nbsp;id='+XX;//XX为ID号<br>adoquery1.Active&nbsp;:=true;
 
如果需要显示全部图片记录,不要把保存图片的字段取出来,在需要显示某张图片时,<br>&nbsp;才取出图片数据。
 
非常感谢yuzk2005,这么快就回贴,adpquery1.sql.text:='select&nbsp;*&nbsp;from&nbsp;tPCStylePicData&nbsp;where&nbsp;id='+XX;//XX为ID号这一句我也想到了,比方说表tPCStylePicData<br>中的第一条记录的ID为1,这样就可以写成adpquery1.sql.text:='select&nbsp;*&nbsp;from&nbsp;tPCStylePicData&nbsp;where&nbsp;id=1';那如果把第一条记录删除了,那么表tPCStylePicData<br>中的第一条记录的ID为2,这样一来上面的句子不就有问题了呀
 
句子没有问题,只是没有记录.<br>如果只调一条数据,肯定要用where条件判断,&nbsp;只是判断条件如何设置
 
后退
顶部