请问Delphi5.0怎样写代码图片存入数据库。(在线等待十分急,分不够再加)
解决方案 »
- 用delphi来post数据的时候,请问如何带上cookie呢?
- 高分求图像边缘晕影效果....
- 动态控件--按钮
- 一个很菜的问题,路过别忘捡分
- 怎样得到当前被添加记录的ID号?
- 紧急求救,如何在Delphi中实现象VB中的DoEvent功能?
- @@@@@@@@一个超难的问题 动态改变报表字体 QuickRep@@@@@@@@@@@
- 请问在dephi5+sql2000中,如何建一个临时表?
- 一个莫名其妙的错误信息!
- fastreport4.9中,在TfrxRichView绑定的数据显示有问题
- 结交深圳的DELPHI程序员,大家捧场啊
- 我把一篇WORD文档存入了数据库,然后我想通过DEPHI程序把文档下载到本地的机器上。就象INTER网下载文件一样,可不知道才能做到下载I
var
C: TClipboard;
begin
C := TClipboard.Create;
try
if Clipboard.HasFormat(CF_BITMAP) then DBImage1.PasteFromClipboard
else
ShowMessage('Clipboard does not contain a bitmap!');
finally
C.Free;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Table1Bitmap.LoadFromFile(
'c:\delphi\images\splash\16color\construc.bmp');
end;procedure TForm1.Button3Click(Sender: TObject);
var
B: TBitmap;
begin
B := TBitmap.Create;
try
B.LoadFromFile('c:\delphi\images\splash\16color\athena.bmp');
DBImage1.Picture.Assign(B);
finally
B.Free;
end;
end;
///////////////////////////////////////////////////////////
var
st: TStringStream;
begin
st := tstringstream.create('');
bitmap.savetostream(st);
query1.sql.text := 'insert into table Image_field values :bmp';
query1.parambyname('bmp').asblob := st.datastring;
query1.execsql;
st.free;
end;
////////////////////////////////////////////////////////////////////////
unit Unit1; interface {$IFDEF WIN32}
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, DBCtrls, Grids, DBGrids, Db,
DBTables;
{$ELSE}
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, DBTables, DB, Grids, DBGrids, ExtCtrls, StdCtrls;
{$ENDIF} type
TForm1 = class(TForm)
Table1: TTable;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Image1: TImage;
Button1: TButton;
Table1Name: TStringField;
Table1WMF: TBlobField;
OpenDialog1: TOpenDialog;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure DataSource1DataChange(Sender: TObject; Field: TField);
private
{ Private declarations }
FileName : string; {Used to hold a temp file name}
procedure LoadWMFFromDatabase; {loads a WMF from the database}
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject);
begin
{Used for loading metafiles}
OpenDialog1.Filter := 'Metafiles (*.wmf)|*.wmf';
OpenDialog1.Options := [ofHideReadOnly, ofNoChangeDir];
Image1.Stretch := true;
end; procedure TForm1.FormDestroy(Sender: TObject);
begin
{Erase the temp file if it exists}
if FileName <> '' then
DeleteFile(FileName);
end; {This function gets a temporary file name form the system}
function GetTemporaryFileName : string;
{$IFNDEF WIN32}
const MAX_PATH = 144;
{$ENDIF}
var
{$IFDEF WIN32}
lpPathBuffer : PChar;
{$ENDIF}
lpbuffer : PChar;
begin
{Get the file name buffer}
GetMem(lpBuffer, MAX_PATH);
{$IFDEF WIN32}
{Get the temp path buffer}
GetMem(lpPathBuffer, MAX_PATH);
{Get the temp path}
GetTempPath(MAX_PATH, lpPathBuffer);
{Get the temp file name}
GetTempFileName(lpPathBuffer,
'tmp',
0,
lpBuffer);
{Free the temp path buffer}
FreeMem(lpPathBuffer, MAX_PATH);
{$ELSE}
{Get the temp file name}
GetTempFileName(GetTempDrive('C'),
'tmp',
0,
lpBuffer);
{$ENDIF}
{Create a pascal string containg}
{the temp file name and return it}
result := StrPas(lpBuffer);
{Free the file name buffer}
FreeMem(lpBuffer, MAX_PATH);
end; procedure TForm1.LoadWMFFromDatabase;
var
FileStream: TFileStream; {a temp file}
BlobStream: TBlobStream; {the WMF Blob}
begin
Image1.Picture.Metafile.Assign(nil);
{Create a blob stream for the WMF blob}
BlobStream := TBlobStream.Create(Table1WMF, bmRead);
if BlobStream.Size = 0 then begin
BlobStream.Free;
Exit;
end;
{if we have a temp file then erase it}
if FileName <> '' then
DeleteFile(FileName);
{Get a temp file name}
FileName := GetTemporaryFileName;
{Create a temp file stream}
FileStream := TFileStream.Create(FileName,
fmCreate or fmOpenWrite);
{Copy the blob to the temp file}
FileStream.CopyFrom(BlobStream, BlobStream.Size);
{Free the streams}
FileStream.Free;
BlobStream.Free;
{Dispaly the image}
Image1.Picture.Metafile.LoadFromFile(FileName);
end; {Save a wmf file to the database}
procedure TForm1.Button1Click(Sender: TObject);
var
FileStream: TFileStream; {to load the wmf file}
BlobStream: TBlobStream; {to save to the blob}
begin
{Allow the button to repaint}
Application.ProcessMessages;
if OpenDialog1.Execute then begin
{Turn off the button}
Button1.Enabled := false;
{Assign the avi file name to read}
FileStream := TFileStream.Create(OpenDialog1.FileName,
fmOpenRead);
Table1.Edit;
{Create a BlobStream for the field Table1WMF}
BlobStream := TBlobStream.Create(Table1WMF, bmReadWrite);
{Seek to the Begginning of the stream}
BlobStream.Seek(0, soFromBeginning);
{Delete any data that may be there}
BlobStream.Truncate;
{Copy from the FileStream to the BlobStream}
BlobStream.CopyFrom(FileStream, FileStream.Size);
{Free the streams}
FileStream.Free;
BlobStream.Free;
{Post the record}
Table1.Post;
{Load the metafile in to a TImage}
LoadWMFFromDatabase;
{Enable the button}
Button1.Enabled := true;
end;
end; procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
begin
if (Sender as TDataSource).State = dsBrowse then
LoadWMFFromDatabase;
end; end.
...
picfile:string;function BlobContentToString(const filename:string):string;
begin
with Tfilestream.Create(filename,fmopenread) do
try
begin
setlength(Result,size);
read(pointer(Result)^,size);
end;
finally
free;
end;
end;
....OpenPictureDialog1.Execute;
picfile:=OpenPictureDialog1.FileName;...if picfile<>'' then fieldByName('照片').AsString:=blobcontenttostring(picfile);
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Unit2, StdCtrls, ExtCtrls, DBCtrls, Grids, DBGrids, Db, DBTables;type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
DBImage1: TDBImage;
DBNavigator1: TDBNavigator;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Database1: TDatabase;
OpenDialog1: TOpenDialog;
Image1: TImage;
Button4: TButton;
Button5: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Database1BeforeConnect(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
begin
Database1.Open;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
DataModule1.Table1.Close;
Database1.Close;
end;procedure TForm1.FormActivate(Sender: TObject);
begin
DataModule1.Table1.Open;
end;procedure TForm1.Button3Click(Sender: TObject);
var
bmp : TBitMap;
begin
if OpenDialog1.Execute then
begin
bmp := TBitMap.Create;
bmp.LoadFromFile(OpenDialog1.FileName);
Image1.Picture.Bitmap := bmp;
bmp.Free;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
var
MaxNo : Integer;
MStream:TMemoryStream;
begin
With DataModule1.Query1 do
begin
Close;
SQL.Clear;
SQL.Add('select Max(No) from testblob');
if Not Prepared then Prepared := True;
Open;
MaxNo := Fields[0].AsInteger;
end;
MStream := TMemoryStream.Create;
Image1.Picture.Bitmap.SaveToStream(MStream);
ShowMessage(IntToStr(MStream.Size));
MStream.Position := 0;
DataModule1.Table1.Insert;
DataModule1.Table1.FieldByName('No').AsInteger := MaxNo + 1;
//DataModule1.Table1.Fields[1].Assign(Image1.Picture.Bitmap);
//TBlobField(DataModule1.Table1.FieldByName('Image')).LoadFromStream(MStream);
try
DataModule1.Table1.Post;
except
ON E:Exception do
begin
MStream.Free;
Showmessage(E.Message);
Exit;
end;
end;
MStream.Free;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
DataModule1.Table1.Delete;
end;procedure TForm1.Button4Click(Sender: TObject);
var
BlobS : TBlobStream;
begin
Image1.Hide;
//Image1.Picture.Bitmap.FreeImage;
BlobS := TBlobStream.Create(TBlobField(DataModule1.Table1.FieldByName('Image')),bmRead);
Image1.Picture.bitmap.LoadFromStream(BlobS);
Image1.Refresh;
Image1.Show;
BlobS.Free;
end;procedure TForm1.Button5Click(Sender: TObject);
var
MaxNo : Integer;
MStream:TStringStream;
begin
With DataModule1.Query1 do
begin
Close;
SQL.Clear;
SQL.Add('select Max(No) from testblob');
if Not Prepared then Prepared := True;
Open;
MaxNo := Fields[0].AsInteger;
end;
MStream := TStringStream.Create('');
Image1.Picture.Bitmap.SaveToStream(MStream);
ShowMessage(IntToStr(MStream.Size));
MStream.Position := 0;
DataModule1.Query1.Active := False;
DataModule1.Query1.Close;
DataModule1.Query1.SQL.Clear;
DataModule1.Query1.SQL.Add('Insert into testblob values(:No,:Image)');
DataModule1.Query1.ParamByName('No').AsInteger := MaxNo + 1;
DataModule1.Query1.ParamByName('Image').AsBlob := MStream.DataString;
DataModule1.Query1.Prepare;
DataModule1.Query1.ExecSQL;
DataModule1.Table1.Refresh;
end;procedure TForm1.Database1BeforeConnect(Sender: TObject);
begin
DataBase1.Session.SQLHourGlass := False;
end;end.