delphi的万能数据库操作  
官方Delphi 学习QQ群: 682628230(三千人)
频道

delphi的万能数据库操作


好多人都抱怨delphi没有提供一个可以把任意数据放入数据库的控件,虽然说用代码实现也不难,但是有控件会更方便,这次我终于还是抽出空来做了这么个控件,以后就可以直接拖放了。它支持把任意数据类型写入数据库,也可以从数据库读出到流,或是直接保存为文件。另外,我加了一些对常用图像的处理,保存 jpg或是gif格式的图像很方便,并且可以直接显示到image上。



unit RaDBOLE;

interface

uses
SysUtils, Classes, DB, DBTables, JPEG, ExtCtrls, GIFCtrl;

type
TImageType = (itBMP, itJPG, itGIF, itOther);
TOnSaveData = procedure(Sender: TObject) of object;
TOnLoadData = procedure(Sender: TObject) of object;
TOnShowImage = procedure(Sender: TObject; ImageType: TImageType) of object;

type
TRaDBOLE = class(TComponent)
private
fDataSet: TDataSource;
fDataField: string;
fImage: TImage;
fGifImage: TRxGIFAnimator;
fOnSaveData: TOnSaveData;
fOnLoadData: TOnLoadData;
fOnShowImage: TOnShowImage;
protected

public
constructor Create(AOwner: TComponent); override;
{保存到数据库}
function SaveToDatabase(AFileName: string): boolean;
{追加到数据库}
function AppendToDatabase(AFileName: string): boolean;
{从数据库读出到流}
function LoadToStream(var AStream: TStream): boolean;
{从数据库读出到文件}
function LoadToFile(AFileName: string): boolean;
{读取图片}
procedure GetImage;
published
property DataSet: TDataSource read fDataSet write fDataSet;
property DataField: string read fDataField write fDataField;
property Image: TImage read fImage write fImage;
property GifImage: TRxGIFAnimator read fGifImage write fGifImage;
property OnSaveData: TOnSaveData read fOnSaveData write fOnSaveData;
property OnLoadData: TOnLoadData read fOnLoadData write fOnLoadData;
property OnShowImage: TOnShowImage read fOnShowImage write fOnShowImage;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Rarnu Components', [TRaDBOLE]);
end;

{ TRaDBOLE }

function TRaDBOLE.AppendToDatabase(AFileName: string): boolean;
var
mm: tmemorystream;
begin
result := True;
mm := tmemorystream.Create;
mm.LoadFromFile(AFileName);
mm.Position := 0;
try
fDataSet.DataSet.Append;
tblobfield(fDataSet.DataSet.FieldByName(fDataField)).LoadFromStream(mm);
fDataSet.DataSet.Post;
except
result := False;
end;
mm.Free;
if Assigned(OnSaveData) then
OnSaveData(Self);
end;

constructor TRaDBOLE.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
fDataSet := nil;
fDataField := '';
fImage := nil;
end;

procedure TRaDBOLE.GetImage;
var
ww: tmemorystream;
JPEG: TJPEGImage;
IT: TImageType;
begin
if fImage = nil then Exit;
ww := tmemorystream.Create;
tblobfield(fDataSet.DataSet.FieldByName(fDataField)).SaveToStream(ww);
try
fImage.Picture.Assign(fDataSet.DataSet.FieldByName(fDataField));
IT := itBMP;
except
try
JPEG := TJPEGImage.Create;
JPEG.Assign(fDataSet.DataSet.FieldByName(fDataField));
fImage.Picture.Assign(JPEG);
IT := itJPG;
except
try
if fGifImage = nil then Exit;
fGifImage.Image.Assign(fDataSet.DataSet.FieldByName(fDataField));
IT := itGIF;
except
IT := itOther;
end;
end;
end;
//fImage.Picture.Graphic.LoadFromStream(ww);
ww.Free;
if Assigned(OnShowImage) then
OnShowImage(Self, IT);
end;

function TRaDBOLE.LoadToFile(AFileName: string): boolean;
var
tt: tmemorystream;
begin
result := True;
tt := tmemorystream.Create;
try
tblobfield(fDataSet.DataSet.FieldByName(fDataField)).SaveToStream(tt);
tt.Position := 0;
tt.SaveToFile(AFileName);
except
result := False;
end;
tt.Free;
if Assigned(OnLoadData) then
OnLoadData(Self);
end;

function TRaDBOLE.LoadToStream(var AStream: TStream): boolean;
var
tt: tmemorystream;
begin
result := True;
tt := tmemorystream.Create;
try
tblobfield(fDataSet.DataSet.FieldByName(fDataField)).SaveToStream(tt);
tt.Position := 0;
AStream := tt;
except
result := False;
end;
tt.Free;
if Assigned(OnLoadData) then
OnLoadData(Self);
end;

function TRaDBOLE.SaveToDatabase(AFileName: string): boolean;
var
mm: tmemorystream;
begin
result := True;
mm := tmemorystream.Create;
mm.LoadFromFile(AFileName);
mm.Position := 0;
try
fDataSet.Edit;
tblobfield(fDataSet.DataSet.FieldByName(fDataField)).LoadFromStream(mm);
fDataSet.DataSet.Post;
except
result := False;
end;
mm.Free;
if Assigned(OnSaveData) then
OnSaveData(Self);
end;

end.
推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.14811301231384 seconds