当前位置:主页>仓库管理软件> 列表

数据库存储图片的问题!急啊! 找仓库管理软件

进销存软件版1楼: 我要在数据库中存入一张图片,格式是JPG的。
当存入的图片是小于30K的可以存入并保存,但是当存入的图片是大于30K的就不行,提示出错信息是''Invalid BLOB length'' ,好象就是长度太大了。
应该怎么解决这个问题啊?
我用的数据库是SQLServer2000,字段的类型是image。也设定了存储的长度为7000,如下:sp_tableoption N''MyTable'', ''text in row'', ''7000''

2楼: 长度不够,把字段长度改长一点试试 如金蝶财务软件

3楼: 长度为8000不可以吗?

4楼: BED存储图片存在BUG,改成ADO就可以了
如果不行则是类型设置问题
image数据类型是长度是可变类型,采用默认的16就可以,不需要指定长度
以下为SQL SERVER原话
image
可变长度的二进制数据,其最大长度为 2^31 - 1 (2,147,483,647) 个字节。

5楼: SQLServer2000 image类型存储大图片市没问题的,不超过2个G就行,不要给image自定义长度,默认的就可

6楼: 其实最好不要把图片存到数据库,因为用image很快数据库就很大了

还是在数据库中保存图片的存放路径,这样方便又不占地方。

进销存软件版7楼: 楼上说的有点偏了,数据库存图片的路径,图片另外存个地方还是要占地方的。而且总的存储开销不见的少啊(变为路径+图片本身大小+文件分配表开销) ^-^



其实图片存不存到数据库里是根据实际需要决定的,比如说,如果是C/S结构的程序,如果服务器上不安装服务端软件,同时不开共享(或发布)目录,似乎在表中只保存路径是无法在客户端取到图片的。

8楼: 帮顶!

-------------------------------------
站长开发推广同盟 关注网站,关注技术!

海量源代码下载,二次开发绝佳站点

网址: http://www.source520.com
http://www.source520.net

9楼: 应该是不存在任何问题的。
为何要设置长度?应该使用默认值

10楼: unit Unit1;
// 通過TBlobField就可以解決問題了。
interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, DBCtrls, Grids, DBGrids, DB, ADODB, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Button2: TButton;
DBNavigator1: TDBNavigator;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
Stream:TMemoryStream;
Conn:String;
begin
if SaveDialog1.Execute then
begin
Conn:= SaveDialog1.FileName;
Stream:=TMemoryStream.Create;
Stream.Position:=0;
try
TBlobField(ADOTable1.FieldByName(''acc'')).SaveToStream(Stream);
Stream.SaveToFile(Conn);
finally
Stream.Free;
end;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
Stream:TMemoryStream;
begin
if OpenDialog1.Execute then
begin
adotable1.Append;
ADOTable1.FieldByName(''name'').AsString:=OpenDialog1.FileName;
Stream:=TMemoryStream.Create;
Stream.Position:=0;
try
Stream.LoadFromFile(OpenDialog1.FileName);


TBlobField(ADOTable1.FieldByName(''acc'')).LoadFromStream(Stream);
finally
Stream.Free;
end;
end;
end;

end.

11楼: procedure TFormPIC.RzBitBtnPICClick(Sender: TObject);
var
MyJPEG: TJPEGImage;
MS: TMemoryStream;
Image: TImage;
begin
if OpenPictureDialog1.Execute then
begin
Image := TImage.Create(nil);
image.Picture.LoadFromFile(OpenPictureDialog1.FileName);
MyJPEG := TJPEGImage.Create;
try
with MyJPEG do
begin
Assign(Image.Picture.Graphic);
MS := TMemoryStream.create;
SaveToStream(MS);
MS.Position := 0;
//PicFieldName是数据表中的image型字段名称
TBlobField(FormDM.IBDSpic.FieldbyName(''PIC'')).LoadFromStream(MS);
image.Picture.CleanupInstance;
end;
finally
MyJPEG.Free;
Image.Free;
Image := nil;
end;

end;
end;

12楼: 据说SQL存储JPG文件最好用SQL的存储过程!! 如仓库管理软件

13楼: 多人接受答案了。