请问,如何用语句向sql server中插入很大很大的一张图片。 (205分)

  • 主题发起人 主题发起人 东问西答
  • 开始时间 开始时间

东问西答

Unregistered / Unconfirmed
GUEST, unregistred user!
请问,如何用语句向sql server中插入很大很大的一张图片。
sql server2000的帮助中说需要分块存储。请教,如何分块存储呢?[:)]
请多指教。我只有205分,全给你了。
 
你说的图片有多大?分块存储应该就是将图片划分成几份,然后每个字段存一份吧?比如说
一张大图片,你将其平均分成四份,上下左右各又成了一份图片,再用普通的保存图片的方法
保存进数据库.取出时,再将其四份取出来,再还原拼成一副大图片即可.要用到的函数,只一
个,BitBlt就够了.
相关格式,下面是一部分,你还是找帮助吧,或搜索一下,这儿应该有许多相关内容.
The BitBlt function performs a bit-block transfer of the color data corresponding to a rectangle of pixels from the specified source device context into a destination device context.
BOOL BitBlt(
HDC hdcDest, // handle to destination device context
int nXDest, // x-coordinate of destination rectangle's upper-left corner
int nYDest, // y-coordinate of destination rectangle's upper-left corner
int nWidth, // width of destination rectangle
int nHeight, // height of destination rectangle
HDC hdcSrc, // handle to source device context
int nXSrc, // x-coordinate of source rectangle's upper-left corner
int nYSrc, // y-coordinate of source rectangle's upper-left corner
DWORD dwRop // raster operation code
);
 
我也想知道这个问题怎么解决,谢谢不吝赐教![:)]
 
不是这个意思,是把一张大的图片存储到一个字段,请教,如何写sql语句。
或使用什么方法能够存进去。
 
用SQL语句来写二进制数据
原理上是可以实现的
但一般不这样用
insert into t1 (img) values (0x123456789abcdef)
 
可是使用sql语句,无法突破8k的限制啊!
还请高手多多指点
 
impossible!
 
我以前答过.你用BDE,有个限制,在BDE中设定BLOB SIZE为1024,一次也就最大只能保存1024K
的内容,所以我才叫你用分割的方法来保存图片,这比分割内存流要好.还有,如果你用ADO的
控件来保存资料,就没有这个限制.正好你的数据库是SQL SERVER,支持也应该比较好,那你就
用ADO控件来做吧.没问题的.你何苦一定要用SQL来实现呢?用SQL插入图片麻烦呀.我对SQL
SERVER不熟悉,应该有其它的方法用SQL保存进去吧,比如说指定了路径后,SQL SERVER自己去
找到该图片保存进去.
用ADO控件就很简单,加一个ADOConnection,ADOTable或ADOQuery,直接连接上数据库就可以
用了.
 
我都存过800多k的图片,用ADO连接没有什么要强调的,用BDE连接将
BLOB SIZE和BLOBS TO CACHE 改大就行了.
 
你为什么非要存图片,可以在sql中保存图片的路径,在程序中读出路径直接打开图片呀。
 
如果你是用BDE连接的话,在TDatebase中把BLOB SIZE和BLOBS TO CACHE 改大点
你图片有多大,就设置的超过它,一般缺省的为32,也就是32k,如果你设置为4096那就
是4M!用流去添加!具体程序如下:
var
fs:TFileStream;
begin
if OpenDialogs1.Execute then
begin
fs:=TFileStream.Create(OpenDialogs.FileName,fmOpenRead);
Query1.Append;
TBlobField(Query1.FieldByName('picture')).LoadFromStream(fs);
fs.free;
Qurey1.Post;
end;
end;
注意,Query1的CachedUpdates的属性必须为False;RequestLive的属性必须为True;
你也可以用ADO连接!不要用ODBC连接!
我曾用以上程序保存了一个有2.25M的一个.bmp图片,没问题!保证通过!
 
写入字段
(adoquery1.fieldbyname('f1') as tblobfield).loadfromstream(stream);
读取。
(adoquery1.fieldbyname('f1') as tblobfield).savetostream(stream);
如果一个字段放不下,可以将图片读入STREAM后,在用COPYFROM等分割成若干小STREAM。
这些问题DFW上都有现成答案,搜索一下吧。
 
谢谢大家,其实,我也不是一定非要用sql语句进行图片的存储。
我只是好奇,不理解sql server上说的分块存储是什么意思。
好了,就此为止吧。
还有一个问题,请大家指教,我才加入delphibbs,一个问题,我的积分就没有了,
怎么才能有积分呢?
 
谢谢大家了。
除了回答问题,还怎样才能有积分?
因为我很菜!
还有,如何给在线的朋友发消息?
 
除了回答问题,每天系统自动给你5分(当然要做过帐号验证才行)
打开在线富翁,富翁名字前面有个类似于闪电的符号,点下去,然后就可以了发消息了
 
多人接受答案了。
 
后退
顶部