大家好~~我在搜索中也找到很多相关的提目﹐出现率很高的是这个代码
var
Ms:TmemoryStream;
jpg:Tjpegimage;begin
ms:=TmemoryStream.Create;
Jpg.Assign(Image1.Picture.Graphic);
Jpg.SaveToStream(Ms) ;
Ms.Position :=0;
ado.append;
TBlobField(producttable.FieldByName('img')).LoadFromStream(Ms);
producttable.Post;
Ms.Free ;
jpg.free;
end;
我在用的时候﹐怎幺老提示错误﹐说 地址 越位 ms:=TmemoryStream.Create;是这条错误
有没有什幺方法能存BMP﹐也能存jep的。在数据库中﹐size 一般以设多大。
var
Ms:TmemoryStream;
jpg:Tjpegimage;begin
ms:=TmemoryStream.Create;
Jpg.Assign(Image1.Picture.Graphic);
Jpg.SaveToStream(Ms) ;
Ms.Position :=0;
ado.append;
TBlobField(producttable.FieldByName('img')).LoadFromStream(Ms);
producttable.Post;
Ms.Free ;
jpg.free;
end;
我在用的时候﹐怎幺老提示错误﹐说 地址 越位 ms:=TmemoryStream.Create;是这条错误
有没有什幺方法能存BMP﹐也能存jep的。在数据库中﹐size 一般以设多大。
var
MyJPEG : TJPEGImage;
MS: TMemoryStream;
begin
MyJPEG := TJPEGImage.Create;
try
with MyJPEG do
begin
Assign(Image.Picture.Graphic);
MS:=TMemoryStream.create;
SaveToStream(MS);
MS.Position:=0;
Table1.Edit;
TBlobField(Table1.FieldbyName('Image')).LoadFromStream(MS);
Table1.Post;
messagebox(getactivewindow(),'图像保存完毕!','保存',mb_ok);
end;
finally
MyJPEG.Free;
end;
end;
producttable.append;
Ms:TmemoryStream;
jpg:Tfilestream;begin
ms:=TmemoryStream.Create;
Jpg:=tfilestream.create(path+name);
ado.append;
TBlobField(producttable.FieldByName('img')).LoadFromStream(Ms);
producttable.Post;
Ms.Free ;
jpg.free;
end;
PicStream:TMemorystream;begin
PicStream := TMemorystream.Create();
Jpg.Assign(Image1.Picture.Graphic);
Jpg.SaveToStream(Ms) ;
Ms.Position :=0;
PicStream.Position := 0;
try
ADO.append;
TBlobField(producttable.FieldByName('img')).LoadFromStream(Ms);
producttable.Post;
finally
PicStream.Free;
end;
end;
我用你的代碼試了一下﹐為什么會提示我﹐' connot assign a nil to a jpegimage ' 這個錯誤呢﹖我在FROM 上只有一個 TImage 控件﹐是不是還需要別的﹖謝謝﹐請完整一點我從來沒有做過這種類的﹗
顯示在From 上﹐按一下保存﹐再和別的數據一起保存到數據庫里。
這種要怎么做呀﹖﹖
j是不是還有別的方法﹐能不能說出一二﹐謝謝
//图片窗体
unit Unit20;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, ExtDlgs, StdCtrls, ExtCtrls, Jpeg;
type
TForm20 = class(TForm)
Button1: TButton;
Button2: TButton;
OpenPictureDialog1: TOpenPictureDialog;
ADOQuery1: TADOQuery;
ADOQuery1dutycard: TStringField;
ADOQuery1b: TBlobField;
Panel1: TPanel;
Image1: TImage;
procedure Button1Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Image1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form20: TForm20;
implementation
uses Unit2, Unit4;
{$R *.dfm}
function JpegStartsInBlob(PicField:TBlobField):integer;
var
ghy: TADOBlobstream;
buffer:Word;
hx: string;
begin
Result := -1;
ghy := TADOBlobstream.Create(PicField, bmRead);
try
while (Result = -1) and (ghy.Position + 1 < ghy.Size) do
begin
ghy.ReadBuffer(buffer, 1);
hx:=IntToHex(buffer, 2);
if hx = 'FF' then begin
ghy.ReadBuffer(buffer, 1);
hx:=IntToHex(buffer, 2);
if hx = 'D8' then Result := ghy.Position - 2
else if hx = 'FF' then
ghy.Position := ghy.Position-1;
end;
end;
finally
ghy.Free
end;
end;procedure TForm20.FormActivate(Sender: TObject);
var
ghy:TADOBlobstream;
pic:tjpegimage;
begin
if adoquery1.RecordCount>0 then
begin
ghy := TADOBlobstream.Create(Adoquery1b, bmRead);
try
ghy.Seek(JpegStartsInBlob(Adoquery1b),soFromBeginning);
Pic:=TJpegImage.Create;
try
Pic.LoadFromStream(ghy);
Image1.Picture.Graphic:=Pic;
finally
Pic.Free;
end;
finally
ghy.Free
end;
button2.Enabled:=true;
end
else
button2.Enabled:=false;
end;procedure TForm20.FormClose(Sender: TObject; var Action: TCloseAction);
begin
image1.Picture:=nil;
button1.Enabled:=false;
end;procedure TForm20.Image1Click(Sender: TObject);
begin
if openpicturedialog1.Execute then
begin
button1.Enabled:=true;
image1.Picture.LoadFromFile(openpicturedialog1.FileName);
end;
end;procedure TForm20.Button1Click(Sender: TObject);//保存
var
picstream:tadoblobstream;
begin
if adoquery1.RecordCount>0 then
begin
adoquery1.edit;
picstream:=tadoblobstream.Create(tblobfield(adoquery1.fields[1]),bmWrite);
picstream.LoadFromFile(openpicturedialog1.filename);
picstream.Position:=0;
adoquery1.edit;
tblobfield(adoquery1.Fields[1]).loadfromstream(picstream);
adoquery1.post;
button1.Enabled:=false;
button2.Enabled:=true;
end
else
begin
adoquery1.insert;
picstream:=tadoblobstream.Create(tblobfield(adoquery1.fields[1]),bmWrite);
picstream.LoadFromFile(openpicturedialog1.filename);
picstream.Position:=0;
adoquery1.insert;
adoquery1['dutycard']:=form4.DBEdit1.Text;
tblobfield(adoquery1.Fields[1]).loadfromstream(picstream);
adoquery1.post;
button1.Enabled:=false;
button2.Enabled:=true;
end;
end;procedure TForm20.Button2Click(Sender: TObject);//删除
begin
image1.Picture:=nil;
adoquery1.Delete;
button2.Enabled:=false;
end;
end.
type
TForm20 = class(TForm)
Button1: TButton;
Button2: TButton;
OpenPictureDialog1: TOpenPictureDialog;
ADOQuery1: TADOQuery;
ADOQuery1dutycard: TStringField;
ADOQuery1b: TBlobField;
Panel1: TPanel;
Image1: TImage;
procedure Button1Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Image1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);怎么会有
ADOQuery1dutycard: TStringField;
ADOQuery1b: TBlobField;
这两句的,在哪里设置的?