数据库如何插入图片?!解决完后立刻给分!(100分)

  • 主题发起人 主题发起人 woyaoying
  • 开始时间 开始时间
W

woyaoying

Unregistered / Unconfirmed
GUEST, unregistred user!
我在数据库里定义了一个image(16)类型的字段。
前台我放了个ole,主要想通过ole导入到数据库里。
请问如何做?
能不能相信介绍如何通过流向数据库插入图片,word等等。还有能不能插入mp3啊??哈哈

前台我是这么写的:
var
s: TStream;
begin
inherited;
if QryM.State in dsEditModes then QryM.Post;

if not OleC.Modified then exit;
if OleC.State <> osEmpty then
begin
with QryM do
try
Open;
Edit;
S := TStream.Create;
S := CreateBlobStream(FieldByName('平面布置详图'),
bmReadWrite);
OleC.SaveToStream(S);
Post;
S.Free;
finally
end;
end;

提示我QryM not in edit or insert mode

解决完后立刻给分!
 
var
PictureName,ExtName:string;
JpegImage:TJpegImage;
begin
inherited;
DM.cdsCM_ClientDataDetail.Edit;
if OpenPictureDialog1.Execute then
begin
PictureName := OpenPictureDialog1.FileName;
ExtName := ExtractFileExt(PictureName);
if UpperCase(ExtName) = '.BMP' then
begin
DBImage1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
end
else if (UpperCase(ExtName)='.JPG') OR (UpperCase(ExtName)='.JEPG') then
begin
Jpegimage := TJpegImage.Create;
try
Jpegimage.LoadFromFile(OpenPictureDialog1.FileName);
DM.cdsCM_ClientDataDetail.Edit;
DBImage1.Picture.Graphic.Assign(Jpegimage);
finally
jpegimage.Free;
end;
end;
end;
end;
 
上面的是存到数据库吗?
 
一句话:
TBlobField(ADODataSet1.FieldByName('FieldName')).LoadFromFile(PictureFile)
 
麻烦楼上的讲清楚好吗?
我比较菜。
TBlobField什么意思?
 
100分没人要吗?
还是问题太简单了。
同志们帮忙顶啊:)
 
将该字段强制转换成 TBlobField 类型!
 
楼上的:
能不能看看我的代码,帮我修改一下,提示Qry not in insert or edit mode
 
在赋值语句的前面加上 Qry.Append;(追加)或Qry.Edit(修改)
      后面加上 Qry.Post;
 
Blob先插入空值,在去修改这个值
 

ADODataSet1.Append;
TBlobField(ADODataSet1.FieldByName('FieldName')).LoadFromFile(PictureFile);
ADODataSet1.Post;


TBlobField(ADODataSet1.FieldByName('FieldName')).SaveToFile(PictureFile);
 
使用类似以下的就可以了。
Stream:=TadoblobStream.Create(qry.fieldbyname('FileBlob') as TBlobField, bmRead);
 
把这个字段改成STRING用于保存图片的路径,然后用LOADFROMFILE提出就可以了(首先放一个TIMAGE)
 
先转成二进制的比较好!
毕竟图片、声音、或连续的动画都是依此进行存储后转流导出的。
 
TBlobField(ADODataSet1.FieldByName('FieldName')).LoadFromFile(PictureFile)
 
上面的所有人能不能把插入2进制文件的原理跟如何使用ado操作详细介绍一下啊。
最好写个demo
 
直接把ole里的数据保存到数据库,然后再读到ole中好像有问题啊!
不一样的ole对象,好像解决的方法还不一样,前两天,我解决了一个
word文件的,同样的方法对jpe文件万不管用。
 
没有高手吗?
帮忙看看代码修改一下啊~~
讲讲也可以啊。
真是急死人了~~~
 
var
s: TAdoBlobStream;
begin
inherited;
if not (QryM.State in dsEditModes) then exit;
if Trim(FileName)='' then exit;
if not OleC.Modified then exit;
if OleC.State <> osEmpty then
begin
with QryM do
try
s := TAdoBlobStream.Create(FieldByName('平面布置详图').DataSet.FieldByName('平面布置详图') as TBlobField,bmReadWrite);
OleC.SaveToStream(s);
Edit;
TBlobField(FieldByName('平面布置详图')).LoadFromStream(s);
S.Free;
Post;
finally;
end;
end;

真是越来越感觉大富翁热心的人少了。
到最后还是自己解决。谢谢你们的启发~~:)

最后一个问题,如果嵌入MP3,你们说好做吗?
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls,jpeg, Db, ADODB;

type
TForm1 = class(TForm)
Btn_Save: TButton;
Btn_View: TButton;
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
Panel1: TPanel;
ViewPic: TImage;
Edit_name: TEdit;
OpenDialog1: TOpenDialog;
Btn_open: TButton;
Btn_next: TButton;
Btn_pre: TButton;
procedure Btn_SaveClick(Sender: TObject);
procedure Btn_ViewClick(Sender: TObject);
procedure Btn_openClick(Sender: TObject);
procedure Btn_nextClick(Sender: TObject);
procedure Btn_preClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Btn_SaveClick(Sender: TObject);
var
MyJPEG : TJPEGImage;
MS: TMemoryStream;
begin
MyJPEG := TJPEGImage.Create;
try
with MyJPEG do
begin
Assign(ViewPic.Picture.Graphic);
MS:=TMemoryStream.create;
SaveToStream(MS);
MS.Position:=0;
ADOTable1.Append;
TBlobField(ADOTable1.FieldbyName('file')).LoadFromStream(MS);
ADOTable1.FieldByName('name').AsString:=Edit_Name.Text;
ADOTable1.Post;
Messagebox(Getactivewindow(),'图像保存完毕!','保存',mb_ok);
end;
finally
MyJPEG.Free;
end;
end;


procedure TForm1.Btn_ViewClick(Sender: TObject);
var
tempstream:TStringStream;
tempjpeg:TJPEGImage;
begin
try
tempstream:=TStringStream.Create(' ');
TBlobField(ADOTable1.FieldByName('file')).SaveToStream(tempstream);
tempstream.Position:=0;
tempjpeg:=TJPEGImage.Create;
tempjpeg.LoadFromStream(tempstream);
ViewPic.Picture.Bitmap.Assign(tempjpeg);
Edit_Name.Text:=ADOTable1.FieldByName('name').AsString;
finally
tempstream.Free;
tempjpeg.Free;
end;
end;

procedure TForm1.Btn_openClick(Sender: TObject);
begin
if opendialog1.Execute then
ViewPic.Picture.LoadFromFile(opendialog1.FileName);
end;

procedure TForm1.Btn_nextClick(Sender: TObject);
begin
if not adotable1.Eof then
begin
Btn_ViewClick(nil);
adotable1.Next;
end;
end;

procedure TForm1.Btn_preClick(Sender: TObject);
begin
if not adotable1.Bof then
begin
Btn_ViewClick(nil);
adotable1.MoveBy(-1);
end;
end;

end.
用的是access,ViewPIc is Timage
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
770
import
I
后退
顶部