DELPHI怎么才能把图片写到数据库中,图片是JPG的
多谢大家了
多谢大家了
解决方案 »
- 结构体的通用访问
- [寻找高手解决]窗体类相关的问题
- query 返回 多个结果,怎么汇总 到一个里变量,直接或间接的方法都可以,比方说query结果有只有3行呢?就一列的情况下
- 乱码 DbgridEH导出Excel时中文字会显示乱码,请问有什么解决方法?
- sql表和表数据同步问题,请高手赐教!!!!
- 帮忙看一下这段程序,指针那个地方用错了
- 一个pascal的问题。不要笑
- 求助Delphi怎样向excel里写数据?
- 源码出售,VCL制作,内含Demo演示
- modalresult:=mryes与close关闭窗口有什么区别
- 关于时间格式问题
- ClientDataSet:cannot perform this opreation on an open dataset
........
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; //if
end; //while
finally
ghy.Free
end; //try
end;procedure TF_YGZLJG.SpeedButton1Click(Sender: TObject);
var
MyJPEG : TJPEGImage;
MS: TMemoryStream;
begin
with data.ADOQ_pic_YHZLJG do
begin
close;sql.Clear;
sql.Add('select pic from tab_YGJBXX where YGID='+quotedstr(trim(edit1.Text)));
open;
end;
if data.ADOQ_pic_YHZLJG.RecordCount<>0 then
begin
openpicturedialog1.Execute;
if openpicturedialog1.FileName<>'' then
begin
image1.Picture.LoadFromFile(openpicturedialog1.FileName);
openpicturedialog1.FileName:='';
MyJPEG := TJPEGImage.Create;
try
with MyJPEG do
begin
Assign(Image1.Picture.Graphic);
MS:=TMemoryStream.create;
SaveToStream(MS);
MS.Position:=0;
data.ADOQ_PIC.Edit;
TBlobField(data.ADOQ_pic_YHZLJG.FieldbyName('pic')).LoadFromStream(MS);
data.ADOQ_PIC.Post;
messagebox(getactivewindow(),'图像保存完毕!','保存',mb_ok);
image1.Picture.CleanupInstance;
end;
finally
MyJPEG.Free;
end;
end;
end
else
begin
showmessage('不存在此员工');
end;
end;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Grids, DBGrids, DB, DBTables, DBCtrls, jpeg;type
TForm1 = class(TForm)
DataSource1: TDataSource;
Table1: TTable;
DBGrid1: TDBGrid;
Image1: TImage;
Button1: TButton;
Button2: TButton;
OpenDialog1: TOpenDialog;
Edit1: TEdit;
DBNavigator1: TDBNavigator;
DBImage1: TDBImage;
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);
begin
opendialog1.Execute ;
image1.Picture.LoadFromFile(opendialog1.FileName);
end;procedure TForm1.Button2Click(Sender: TObject);
begin
table1.Insert;
table1.FieldByName('Name').AsString:=edit1.Text ;
table1.FieldByName('Picture_Path').AsString :=opendialog1.FileName ;
table1.FieldByName('Graphic').Assign(image1.Picture);
table1.Post;
end;end.
form1.adoquery1.close;
form1.adoquery1.sql.clear;
form1.adoquery1.sql.add('insert into yourtable values(:p1,:p2)');
form1.adoquery1.parameters.parabyname('p1').values:=ID;
form1.adoquery1.parameters.parabyname('p2').assign(form1.image.bitmap);
try
form1.adoquery1.execsql;
except
end;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, DB, ADODB,jpeg;type
TForm1 = class(TForm)
ADOQuery1: TADOQuery;
ADOQuery2: TADOQuery;
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Image1: TImage;
OpenDialog1: TOpenDialog;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
filename:string;
procedure SetPicture(pos:string; TempQuery: TADOQuery);//存图片
procedure GetPicture(pos:string;TempQuery: TADOQuery);
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.GetPicture(pos:string;TempQuery: TADOQuery);//读取图片
var
MS_JpegStream:TMemoryStream;
begin
try
MS_JpegStream:=TMemoryStream.Create;
with tempQuery do
begin
close;
sql.clear;
//修改这个语句
sql.Add('select picture from table where no=:pos');
Parameters.ParamByName('pos').value:=pos;
Open;
end;
if tempquery.FieldByName('image').isnull then
begin
image1.Picture.Graphic:=nil;
end
else
begin
(tempQuery.FieldByName('image') as tblobfield).savetostream(MS_JpegStream);
image1.Picture.Graphic:=nil;
image1.Picture.Graphic:=TJpegImage.Create;
MS_JpegStream.Position:=0;
image1.Picture.Graphic.LoadFromStream(MS_JpegStream);
end; finally
MS_JpegStream.Free;
end;
end; procedure TForm1.SetPicture(pos:string; TempQuery: TADOQuery);//存图片
var
MS_JpegStream:TMemoryStream;
M_BitMap:TBitMap;
M_Jpeg:TJpegImage;
begin
try
MS_JpegStream:=TMemoryStream.Create;
M_BitMap:=TBitMap.Create;
M_Jpeg:=TJpegImage.Create;
if extractfileext(filename)='.bmp' then //extractfileext查找字符串中相应的值
begin
M_BitMap.LoadFromFile(filename);
M_Jpeg.Compress;
M_Jpeg.Assign(M_BitMap);
end
else if extractfileext(filename)='.jpg' then
begin
M_Jpeg.LoadFromFile(filename);
end;
M_Jpeg.SaveToStream(MS_JpegStream);
with tempQuery do
begin
close;
sql.clear;
//修改这个语句
sql.Add('insert into table2 (no,IMage) values (:pos,:image)');
Parameters.ParamByName('pos').Value:=pos;
Parameters.ParamByName('image').LoadFromStream(MS_JpegStream,ftblob); ExecSQL;
end;
finally
MS_JpegStream.Free;
M_BitMap.Free;
M_Jpeg.Free;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
if openpicturedialog1.Execute then
begin
filename:=openpicturedialog1.FileName;
SetPicture(edit1.text,ADOQuery1);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
getpicture(edit1.text,ADOQuery2);
end;end.
您的代码中的ghy变量这么熟悉呢??呵呵,不光是变量代码都熟悉。呵呵 UP一下
ok!