Cómo almacenar datos de registro en un campo BLOB en Delphi

En Delphi, un tipo de datos de registro es un tipo especial de tipo de datos definido por el usuario. Un registro es un contenedor para una mezcla de variables relacionadas de diversos tipos, denominadas campos, recopilados en un tipo.

En las aplicaciones de bases de datos, los datos se almacenan en campos de varios tipos: entero, cadena, bit (booleano), etc. Si bien la mayoría de los datos se pueden representar con tipos de datos simples, hay situaciones en las que necesita almacenar imágenes, documentos enriquecidos o datos personalizados. tipos en una base de datos. Si este es el caso, utilizará el tipo de datos BLOB (Objeto grande binario) ("memo", "ntext", "image", etc. - el nombre del tipo de datos depende de la base de datos con la que trabaja).

Grabar como blob

Aquí se explica cómo Tienda (y recuperar) un grabar (estructura) valor en un campo de gotas en una base de datos.

TUser = registro ...
Supongamos que ha definido su tipo de registro personalizado como:

 TUser = registro empaquetado
   Nombre: cadena [50];
   CanAsk: boolean;
   NumberOfQuestions: entero;
final;

"Record.SaveAsBlob"
Para insertar una nueva fila (registro de base de datos) en una tabla de base de datos con un campo BLOB llamado "datos", use el siguiente código:

 var
   Usuario: TUser;
   blobF: TBlobField;
   bs: TStream;
empezar
   User.Name: = edName.Text;
   User.NumberOfQuestions: = StrToInt (edNOQ.Text);
   User.CanAsk: = chkCanAsk.Checked;
   myTable.Insert;
   blobF: = myTable.FieldByName ('data') como TBlobField;
   bs: = myTable.CreateBlobStream (blobF, bmWrite);
   tratar
     bs.Write (Usuario, SizeOf (Usuario));
   finalmente
     bs.Free;
   final;
final;

En el código de arriba:

  • "myTable" es el nombre del componente TDataSet que está utilizando (TTable, TQuery, ADOTable, TClientDataSet, etc.).
  • El nombre del campo de blob es "datos".
  • La variable "Usuario" (registro TUser) se llena con 2 cuadros de edición ("edName" y "edNOQ") y una casilla de verificación ("chkCanAsk")
  • El método CreateBlobStream crea un objeto TStream para escribir en el campo de blob.

"Record.ReadFromBlob"
Una vez que haya guardado los datos del registro (TUser) en un campo de tipo blob, a continuación se explica cómo "transformar" los datos binarios en un valor TUser:

 var
   Usuario: TUser;
   blobF: TBlobField;
   bs: TStream;
empezar
   if myTable.FieldByName ('data'). IsBlob entonces
   empezar
     blobF: = DataSet.FieldByName ('datos') como TBlobField;
     bs: = myTable.CreateBlobStream (blobF, bmRead);
     tratar
       bs.Read (usuario, sizeof (TUser));
     finalmente
       bs.Free;
     final;
   final;
   edName.Text: = User.Name;
   edNOQ.Text: = IntToStr (User.NumberOfQuestions);
   chkCanAsk.Checked: = User.CanAsk;
final;

Nota: el código anterior debe ir dentro del controlador de eventos "OnAfterScroll" del conjunto de datos myTable.

Eso es. Asegúrese de descargar el código de ejemplo Record2Blob.