200分!郁闷!自卑!请各位大虾解决这个比较常见和常用的问题,数据库和图片等类型的数据。(100分)

  • 主题发起人 主题发起人 brokenbridge
  • 开始时间 开始时间
B

brokenbridge

Unregistered / Unconfirmed
GUEST, unregistred user!
我要做一个这样的数据维护小程序,其中的字段需要包括图片(BMP或JPG)和CAD图象。
我想用OLE控件来显示。
比如说,
我要Append,就可以从通过OLE来进行图片的绘制,然后将OLE编辑的
图片存入到临时文件中,然后从临时文件中写入数据库。
进行数据库的update时,我就从数据库中的那个图片字段读信息写入临时文件,从临时文件
加载到OLE控件中,进行图片的修改,修改完成之后们,保存到临时文件,然后在通过临时文
件写入库中。
对于其他类型的数据如(CAD图)同样进行。
具体的程序写的时候总是出问题!
其实这是很常见的一些问题,用数据库来存储图片和其他一些东西,自己搞不出来很是郁闷,
很自卑,敬请各位大虾救我!!!
 
这个我做过,你用两个流就可以了,一个是SrcStream:TFileStream ,另一个是DesStream:TBlobStream,然后用一个
流对另一个流进行拷贝即可。DesStream.copyfrom(srcstream,srcstream.size)
 
To InsistStar:
我先试一下。
说详细一点啊,老大,
 
老兄,我有一个特简便的方法,不用OLE,也不用流,下面是一段代码,试试吧。
var
bmp1:Tbitmap;
jpg1:Tjpegimage;
begin
if OpenPictureDialog1.Execute then begin
if OpenPictureDialog1.FileName<>'' then begin
bmp1:=Tbitmap.Create;
jpg1:=Tjpegimage.Create;
jpg1.LoadFromFile(OpenPictureDialog1.filename);
bmp1.Assign(jpg1);
DataModule1.query1.edit;
DataModule1.query1.FieldByName('image').assign(bmp1);
DataModule1.query1.Post;
bmp1.free;
end;
end;
 
你用内存流来处理吧,根据不同用不同的显示,JPG,BMP都很简单.CAD没试过,不过你用OLE应该
也能解决.一个方法如下:
function TfrmPartPictureShow.SaveData(PartData: TPartData): Boolean;
var tempStream:TMemoryStream;
begin
try
if PartData.Part_No='' then
begin
ShowMessage('Please input the part_no!');
abort;
end;
tempStream:=TMemoryStream.Create;
tempStream.Clear;
if (dmCAI.qryPart.State in [dsEdit, dsInsert]) then
begin
with dmCAI.qryPart do
begin
FieldByName('Sty_No').AsString:=Cbo_ID.Text;
FieldByName('Cus_No').AsString:=CUSTOMER;
FieldByName('Part_No').AsString:=PartData.Part_No;
FieldByName('Part_Explain').AsString:=PartData.Part_Explain;
TifPic.SaveToStream(tempStream);//这儿是将TIF文件保存到内存流中
TBlobField(FieldByName('PartPic')).LoadFromStream(tempStream);//再Load进BlobFields中.
Post;
end;
end;
finally
tempStream.Free;
end;
end;
上面是TIF图片的方法,JPG同理,BMP更简单.CAD应该也要用内存流来搞定.试试吧.
 
分数我可是发出去了,:)
多人接受答案了!
 
后退
顶部