Muchas personas se quejan de que Delphi no proporciona un control que pueda poner datos arbitrarios en la base de datos. Aunque no es difícil implementarlo con código, es más conveniente tener un control. Esta vez finalmente me tomé el tiempo para hacer ese control. Puedes arrastrar y soltar directamente. Admite la escritura de cualquier tipo de datos en la base de datos, también se puede leer desde la base de datos para transmitir o guardar directamente como un archivo. Además, agregué algo de procesamiento de imágenes de uso común, guardar imágenes en formato jpg o gif es muy conveniente y se puede mostrar directamente en la imagen.
unidad RaDBOLE;
interfaz
usos
SysUtils, Clases, DB, DBTables, JPEG, ExtCtrls, GIFCtrl;
tipo
TImageType = (itBMP, itJPG, itGIF, itOther);
TOnSaveData = procedimiento (remitente: TObject) del objeto;
TOnLoadData = procedimiento (remitente: TObject) del objeto;
TOnShowImage = procedimiento (remitente: TObject; ImageType: TImageType) del objeto;
tipo
TRaDBOLE = clase (TComponent)
privado
fDataSet: TDataSource;
fDataField: string;
fImage: TImage;
fGifImage: TRxGIFAnimator;
fOnSaveData: TOnSaveData;
fOnLoadData: TOnLoadData;
fOnShowImage: TOnShowImage;
protegido
público
constructor Create (AOwner: TComponent); anular;
{Guardar en la base de datos}
función SaveToDatabase (AFileName: string): boolean;
{Agregar a la base de datos}
función AppendToDatabase (AFileName: string): boolean;
{Leer desde la base de datos para transmitir}
función LoadToStream (var AStream: TStream): boolean;
{Leer de la base de datos al archivo}
función LoadToFile (AFileName: string): boolean;
{Leer foto}
procedimiento GetImage;
publicado
propiedad DataSet: TDataSource leer fDataSet escribir fDataSet;
propiedad DataField: cadena de lectura fDataField escribir fDataField;
Imagen de la propiedad: TImage read fImage write fImage;
propiedad GifImage: TRxGIFAnimator lee fGifImage escribe fGifImage;
propiedad OnSaveData: TOnSaveData lee fOnSaveData escribe fOnSaveData;
propiedad OnLoadData: TOnLoadData lee fOnLoadData escribe fOnLoadData;
propiedad OnShowImage: TOnShowImage leer fOnShowImage escribir fOnShowImage;
fin;
procedimiento de registro;
implementación
procedimiento de registro;
empezar
RegisterComponents ('Componentes de Rarnu', [TRaDBOLE]);
fin;
{TRaDBOLE}
función TRaDBOLE.AppendToDatabase (AFileName: string): boolean;
era
mm: tmemorystream;
empezar
resultado: = verdadero;
mm: = tmemorystream.Create;
mm.LoadFromFile (AFileName);
mm.Posición: = 0;
tratar
fDataSet.DataSet.Append;
tblobfield (fDataSet.DataSet.FieldByName (fDataField)). LoadFromStream (mm);
fDataSet.DataSet.Post;
excepto
resultado: = falso;
fin;
mm libre;
si asignado (OnSaveData) entonces
OnSaveData (Self);
fin;
constructor TRaDBOLE.Create (AOwner: TComponent);
empezar
Crear heredado (AOwner);
fDataSet: = nil;
fDataField: = '';
fImage: = nil;
fin;
procedimiento TRaDBOLE.GetImage;
era
ww: tmemorystream;
JPEG: TJPEGImage;
IT: TImageType;
empezar
si fImage = nil entonces Salir;
ww: = tmemorystream.Create;
tblobfield (fDataSet.DataSet.FieldByName (fDataField)). SaveToStream (ww);
tratar
fImage.Picture.Assign (fDataSet.DataSet.FieldByName (fDataField));
IT: = itBMP;
excepto
tratar
JPEG: = TJPEGImage.Create;
JPEG.Assign (fDataSet.DataSet.FieldByName (fDataField));
fImage.Picture.Assign (JPEG);
IT: = itJPG;
excepto
tratar
si fGifImage = nil entonces Salir;
fGifImage.Image.Assign (fDataSet.DataSet.FieldByName (fDataField));
IT: = itGIF;
excepto
IT: = itOther;
fin;
fin;
fin;
//fImage.Picture.Graphic.LoadFromStream(ww);
ww.Free;
si asignado (OnShowImage) entonces
OnShowImage (Self, IT);
fin;
función TRaDBOLE.LoadToFile (AFileName: string): boolean;
era
tt: tmemorystream;
empezar
resultado: = verdadero;
tt: = tmemorystream.Create;
tratar
tblobfield (fDataSet.DataSet.FieldByName (fDataField)). SaveToStream (tt);
posición tt: = 0;
tt.SaveToFile (AFileName);
excepto
resultado: = falso;
fin;
tt.Free;
si asignado (OnLoadData) entonces
OnLoadData (Self);
fin;
función TRaDBOLE.LoadToStream (var AStream: TStream): boolean;
era
tt: tmemorystream;
empezar
resultado: = verdadero;
tt: = tmemorystream.Create;
tratar
tblobfield (fDataSet.DataSet.FieldByName (fDataField)). SaveToStream (tt);
posición tt: = 0;
AStream: = tt;
excepto
resultado: = falso;
fin;
tt.Free;
si asignado (OnLoadData) entonces
OnLoadData (Self);
fin;
función TRaDBOLE.SaveToDatabase (AFileName: string): boolean;
era
mm: tmemorystream;
empezar
resultado: = verdadero;
mm: = tmemorystream.Create;
mm.LoadFromFile (AFileName);
mm.Posición: = 0;
tratar
fDataSet.Edit;
tblobfield (fDataSet.DataSet.FieldByName (fDataField)). LoadFromStream (mm);
fDataSet.DataSet.Post;
excepto
resultado: = falso;
fin;
mm libre;
si asignado (OnSaveData) entonces
OnSaveData (Self);
fin;
fin.
---------------------
Autor: brisa de la rima
Fuente: CSDN
Original: https://blog.csdn.net/ttpage/article/details/9161695
Declaración de derechos de autor: Este artículo es un artículo original de blogger, adjunte un enlace a la publicación del blog al volver a imprimir.