一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

delphi的萬能數(shù)據(jù)庫操作

 jackchina 2024-02-19 發(fā)布于天津

好多人都抱怨delphi沒有提供一個可以把任意數(shù)據(jù)放入數(shù)據(jù)庫的控件,雖然說用代碼實現(xiàn)也不難,但是有控件會更方便,這次我終于還是抽出空來做了這么個控件,以后就可以直接拖放了。它支持把任意數(shù)據(jù)類型寫入數(shù)據(jù)庫,也可以從數(shù)據(jù)庫讀出到流,或是直接保存為文件。另外,我加了一些對常用圖像的處理,保存 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; 
{保存到數(shù)據(jù)庫} 
function SaveToDatabase(AFileName: string): boolean; 
{追加到數(shù)據(jù)庫} 
function AppendToDatabase(AFileName: string): boolean; 
{從數(shù)據(jù)庫讀出到流} 
function LoadToStream(var AStream: TStream): boolean; 
{從數(shù)據(jù)庫讀出到文件} 
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. 
---------------------
作者:清風古韻
來源:CSDN
原文:https://blog.csdn.net/ttpage/article/details/9161695
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接!

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    亚洲欧洲精品一区二区三区| 日韩精品视频免费观看| 国产日韩久久精品一区| 国产成人精品国产亚洲欧洲| 日韩欧美一区二区黄色 | 成人午夜在线视频观看| 欧美色欧美亚洲日在线| 精品日韩国产高清毛片| av在线免费播放一区二区| 欧美尤物在线观看西比尔| 嫩草国产福利视频一区二区| 精品日韩av一区二区三区| 国产传媒精品视频一区| 国产女高清在线看免费观看| 日韩一区欧美二区国产| 欧美视频在线观看一区| 日木乱偷人妻中文字幕在线| 日韩特级黄片免费在线观看| 久久99午夜福利视频| 亚洲一区二区亚洲日本| 日本理论片午夜在线观看| 日韩人妻有码一区二区| 精品欧美一区二区三久久| 中文字幕日韩精品人一妻| 日韩精品综合福利在线观看| 99久久精品国产日本| 亚洲伦片免费偷拍一区| 99香蕉精品视频国产版| 亚洲欧美日韩色图七区| 成年人黄片大全在线观看| 亚洲超碰成人天堂涩涩| 欧美一区二区黑人在线| 91后入中出内射在线| 亚洲精品美女三级完整版视频| 五月激情五月天综合网| 国产一区一一一区麻豆| 国产精品亚洲综合天堂夜夜| 东京热电东京热一区二区三区| 色婷婷丁香激情五月天| 国产欧美日韩精品成人专区| 亚洲专区一区中文字幕|