大于32k的图片如何从sql server 中取出?用dbimage按条件显示总有一块是黑的? 我已成功以数据流村图片入数据库,却没有办法将它完整的取出来,仍用数据流么?怎么写呢?真心请教各位!在线等 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你既然已经成功保存了,自然用相反的方式也就能读出来,不过,你用BDE吗?在BDE的设置里面:BlobSize,BlobSize需要设置大一些,否则,所取得的图片等大容量类型数据就会被截断,你的dbimage业就黑了一块了。 我用sql server数据库,已把text in row设成off,存取应该都没问题,只是存图片的函数是assign可他的相反函数是什么?我试了很多种方法都不行,清指点迷路的人 我用SQL保存过图象文件,可以保存超过32K的文件 你的问题很可能和你的数据库缓存设置有关 procedure SavePicture(img:TImage); var JPGImg: TJPEGImage; ADOData: TADOBlobStream; begin JPGImg := TJPEGImage.Create; ADOData := TADOBlobStream.Create(TBlobField(DataModule1.PatientInfoTable.FieldByName('图像1')), bmWrite); try JPGImg.Assign(img.Picture.Bitmap); JpgImg.SaveToStream(ADOData); finally JPgImg.Free; ADOData.Free; end; end; 读取代码如下: procedure LoadPicture(img: TImage); var PicFieldName: string; PicData: TADOBlobStream; Pic: TJPEGImage; begin case img.Tag of 0: PicFieldName := '图像1'; 1: PicFieldName := '图像2'; 2: PicFieldName := '图像3'; 3: PicFieldName := '图像4'; end; if not DataModule1.PatientInfoTable.FieldByName(PicFieldName).isNUll then begin PicData := TADOBlobStream.Create(TBlobField(DataModule1.PatientInfoTable.FieldByName(PicFieldName)), bmRead); //重点在下面 pic := TJPEGImage.Create; try pic.LoadFromStream(PicData); img.Picture.Assign(pic); finally PicData.Free; pic.Free; end; end else img.Picture.Assign (nil); end; 我用如下的代码从一表中取出image字段并存入另一表中相同字段,尽管已有显示结果,可黑块仍未去掉procedure TForm1.Button1Click(Sender: TObject);var Stream1, Stream2 : TBlobStream; i:integer;begin i:=1; query1.Close; query1.SQL.Clear; query1.SQL.Add('select * from dbo.chartinter'); query1.Open; query1.First; while not query1.Eof do begin Stream1:= TBlobStream.Create(tblobfield(query1.fieldbyname('solpicture')), bmRead); table2.Open; Table2.insert; table2.FieldByName('ikey').asstring:=inttostr(i); try image1.Picture.Bitmap.LoadFromStream(stream1);//此处我用来显示一下从table1中取出的图片,结果还有一块是黑的 showmessage('1'); Stream2 := tblobstream.Create(tblobfield(Table2.FieldByName('solpicture')), bmReadWrite); try Stream2.CopyFrom(Stream1, Stream1.Size); finally Stream2.Free; end; finally Stream1.Free; end; Table2.Post; table2.Close; i:=i+1; query1.Next; end; table2.Active:=true;end;数据库缓存设置是否可以自己设置他的大小,怎么设置呢? 我解决了,确是bde的设置,谢谢朋友的帮忙,出门靠朋友说的真对,谢谢大花脸,谢谢海浪,谢谢彩儿 AddIPAddress函数 关于inno setup中的dll注册 向高手请教(有关自定义打印) 请教一个不打印0的问题 如何动态修改DBGrid的列名? delphi与oracle的Clob字段的问题,俱急!!! 设计控件时怎样决定在组件面板上的图标? 程序运行问题。 数据过滤的问题,大家快来帮帮我! 得到当前日期的函数是什么? 如何编码实现在Win2000下的重启关机等操作?(送100分以上) 怎么才能在文本框里输入的数字不进行四舍五入?在线!
你的问题很可能和你的数据库缓存设置有关
var
JPGImg: TJPEGImage;
ADOData: TADOBlobStream;
begin
JPGImg := TJPEGImage.Create;
ADOData :=
TADOBlobStream.Create(TBlobField(DataModule1.PatientInfoTable.FieldByName('图像1')), bmWrite);
try
JPGImg.Assign(img.Picture.Bitmap);
JpgImg.SaveToStream(ADOData);
finally
JPgImg.Free;
ADOData.Free;
end;
end; 读取代码如下:
procedure LoadPicture(img: TImage);
var
PicFieldName: string;
PicData: TADOBlobStream;
Pic: TJPEGImage;
begin
case img.Tag of
0: PicFieldName := '图像1';
1: PicFieldName := '图像2';
2: PicFieldName := '图像3';
3: PicFieldName := '图像4';
end;
if not DataModule1.PatientInfoTable.FieldByName(PicFieldName).isNUll then
begin
PicData :=
TADOBlobStream.Create(TBlobField(DataModule1.PatientInfoTable.FieldByName(PicFieldName)), bmRead);
//重点在下面
pic := TJPEGImage.Create;
try
pic.LoadFromStream(PicData);
img.Picture.Assign(pic);
finally
PicData.Free;
pic.Free;
end;
end
else
img.Picture.Assign (nil);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Stream1, Stream2 : TBlobStream;
i:integer;
begin
i:=1;
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('select * from dbo.chartinter');
query1.Open;
query1.First;
while not query1.Eof do
begin
Stream1:= TBlobStream.Create(tblobfield(query1.fieldbyname('solpicture')), bmRead);
table2.Open;
Table2.insert;
table2.FieldByName('ikey').asstring:=inttostr(i);
try
image1.Picture.Bitmap.LoadFromStream(stream1);//此处我用来显示一下从table1中取出的图片,结果还有一块是黑的
showmessage('1');
Stream2 := tblobstream.Create(tblobfield(Table2.FieldByName('solpicture')), bmReadWrite);
try
Stream2.CopyFrom(Stream1, Stream1.Size);
finally
Stream2.Free;
end;
finally
Stream1.Free;
end;
Table2.Post;
table2.Close;
i:=i+1;
query1.Next;
end;
table2.Active:=true;
end;
数据库缓存设置是否可以自己设置他的大小,怎么设置呢?