[delphiデータベース同期] Delphiのユニバーサルデータベース操作

  Delphiはデータベースに任意のデータを入れることができるコントロールを提供しないと多くの人が文句を言います。コードでそれを実装することは難しいことではありませんが、コントロールを持っている方が便利です。今回、このようなコントロールを作成するために時間をかけました。直接ドラッグアンドドロップできます。データベースへの任意のデータ型の書き込みをサポートします。また、データベースから読み込んでストリーミングしたり、直接ファイルとして保存したりすることもできます。さらに、よく使用される画像の処理を追加しました。jpgまたはgif形式で画像を保存すると、非常に便利で、画像に直接表示できます。

  ユニットRaDBOLE;

  インターフェース

  使用する

  SysUtils、Classes、DB、DBTables、JPEG、ExtCtrls、GIFCtrl;

  タイプ

  TImageType =(itBMP、itJPG、itGIF、itOther);

  オブジェクトのTOnSaveData = procedure(Sender:TObject);

  オブジェクトのTOnLoadData = procedure(Sender:TObject);

  オブジェクトのTOnShowImage = procedure(Sender:TObject; ImageType:TImageType);

  タイプ

  TRaDBOLE = class(TComponent)

  民間

  fDataSet:TDataSource;

  fDataField:文字列;

  fImage:TImage;

  fGifImage:TRxGIFAnimator;

  fOnSaveData:TOnSaveData;

  fOnLoadData:TOnLoadData;

  fOnShowImage: TOnShowImage;

  保護された

  公衆

  コンストラクターCreate(AOwner:TComponent); オーバーライド;

  {データベースに保存}

  function SaveToDatabase(AFileName:string):boolean;

  {データベースに追加}

  function AppendToDatabase(AFileName:string):boolean;

  {データベースからストリームに読み込む}

  function LoadToStream(var AStream:TStream):ブール値。

  {データベースからファイルに読み取る}

  function LoadToFile(AFileName:string):boolean;

  {写真を読む}

  プロシージャGetImage;

  公開された

  プロパティDataSet:TDataSource読み取りfDataSet書き込みfDataSet;

  プロパティDataField:文字列読み取りfDataField書き込みfDataField;

  プロパティImage:TImage読み取りfImage書き込みfImage;

  プロパティGifImage:TRxGIFAnimator読み取りfGifImage書き込みfGifImage;

  プロパティOnSaveData:TOnSaveData読み取りfOnSaveData書き込みfOnSaveData;

  プロパティOnLoadData:TOnLoadData読み取りfOnLoadData書き込みfOnLoadData;

  プロパティOnShowImage:TOnShowImage読み取りfOnShowImage書き込みfOnShowImage;

  終わり;

  手順登録;

  実装

  手順登録;

  ベギン

  RegisterComponents( 'Rarnu Components'、[TRaDBOLE]);

  終わり;

  {TRADBOLE}

  関数TRaDBOLE.AppendToDatabase(AFileName:string):ブール値;

  ました

  mm:tmemorystream;

  ベギン

  結果:=真;

  mm:= tmemorystream.Create;

  mm.LoadFromFile(AFileName);

  mm.Position:= 0;

  試す

  fDataSet.DataSet.Append;

  tblobfield(fDataSet.DataSet.FieldByName(fDataField))。LoadFromStream(mm);

  fDataSet.DataSet.Post;

  を除いて

  結果:= False;

  終わり;

  mm.Free;

  もしAssigned(OnSaveData)なら

  OnSaveData(Self);

  終わり;

  コンストラクタTRaDBOLE.Create(AOwner:TComponent);

  ベギン

  継承されたCreate(AOwner);

  fDataSet:= nil;

  fDataField:= '';

  fImage:= nil;

  終わり;

  プロシージャTRaDBOLE.GetImage;

  ました

  ww:tmemorystream;

  JPEG:TJPEGImage;

  IT:TImageType;

  ベギン

  fImage = nilの場合は終了します。

  ww:= tmemorystream.Create;

  tblobfield(fDataSet.DataSet.FieldByName(fDataField))。SaveToStream(ww);

  試す

  fImage.Picture.Assign(fDataSet.DataSet.FieldByName(fDataField));

  IT:= itBMP;

  を除いて

  試す

  JPEG:= TJPEGImage.Create;

  JPEG.Assign(fDataSet.DataSet.FieldByName(fDataField));

  fImage.Picture.Assign(JPEG);

  IT:= itJPG;

  を除いて

  試す

  fGifImage = nilの場合は終了します。

  fGifImage.Image.Assign(fDataSet.DataSet.FieldByName(fDataField));

  IT:= itGIF;

  を除いて

  IT:= itOther;

  終わり;

  終わり;

  終わり;

  //fImage.Picture.Graphic.LoadFromStream(ww);

  ww。無料;

  もしAssigned(OnShowImage)なら

  OnShowImage(Self、IT);

  終わり;

  function TRaDBOLE.LoadToFile(AFileName:string):boolean;

  ました

  tt:tmemorystream;

  ベギン

  結果:=真;

  tt:= tmemorystream.Create;

  試す

  tblobfield(fDataSet.DataSet.FieldByName(fDataField))。SaveToStream(tt);

  tt.Position:= 0;

  tt.SaveToFile(AFileName);

  を除いて

  結果:= False;

  終わり;

  tt。無料;

  Assigned(OnLoadData)の場合

  OnLoadData(Self);

  終わり;

  関数TRaDBOLE.LoadToStream(var AStream:TStream):ブール値;

  ました

  tt:tmemorystream;

  ベギン

  結果:=真;

  tt:= tmemorystream.Create;

  試す

  tblobfield(fDataSet.DataSet.FieldByName(fDataField))。SaveToStream(tt);

  tt.Position:= 0;

  AStream:= tt;

  を除いて

  結果:= False;

  終わり;

  tt。無料;

  Assigned(OnLoadData)の場合

  OnLoadData(Self);

  終わり;

  関数TRaDBOLE.SaveToDatabase(AFileName:string):ブール値;

  ました

  mm:tmemorystream;

  ベギン

  結果:=真;

  mm:= tmemorystream.Create;

  mm.LoadFromFile(AFileName);

  mm.Position:= 0;

  試す

  fDataSet.Edit;

  tblobfield(fDataSet.DataSet.FieldByName(fDataField))。LoadFromStream(mm);

  fDataSet.DataSet.Post;

  を除いて

  結果:= False;

  終わり;

  mm.Free;

  もしAssigned(OnSaveData)なら

  OnSaveData(Self);

  終わり;

  終わり。

  ---------------------

  著者:風の韻

  出典:CSDN

  オリジナル:https://blog.csdn.net/ttpage/article/details/9161695

  著作権表示:この記事は元のブロガー記事です。転載する際は、ブログ投稿へのリンクを添付してください。

 データベース同期ソフトウェア

おすすめ

転載: www.cnblogs.com/sqlserver-mysql/p/12759851.html