Comment stocker des données d'enregistrement dans un champ BLOB dans Delphi

Dans Delphi, un type de données d'enregistrement est un type spécial de type de données défini par l'utilisateur. Un enregistrement est un conteneur pour un mélange de variables liées de divers types, appelées champs, collectées en un seul type.

Dans les applications de base de données, les données sont stockées dans des champs de différents types: entier, chaîne, bit (booléen), etc. Bien que la plupart des données puissent être représentées avec des types de données simples, il existe des situations où vous devez stocker des images, des documents riches ou des données personnalisées types dans une base de données. Dans ce cas, vous utiliserez le type de données BLOB (Binary Large Object) ("memo", "ntext", "image", etc. - le nom du type de données dépend de la base de données avec laquelle vous travaillez).

Enregistrer en tant qu'objet blob

Voici comment boutique (et récupérer) une record (structure) valeur en champ blob dans une base de données.

TUser = record…
Supposons que vous ayez défini votre type d'enregistrement personnalisé comme:

 TUser = dossier compressé
   Nom: chaîne [50];
   CanAsk: booléen;
   NumberOfQuestions: entier;
fin;

"Record.SaveAsBlob"
Pour insérer une nouvelle ligne (enregistrement de base de données) dans une table de base de données avec un champ BLOB nommé "data", utilisez le code suivant:

 var
   Utilisateur: TUser;
   blobF: TBlobField;
   bs: TStream;
commencer
   User.Name: = edName.Text;
   User.NumberOfQuestions: = StrToInt (edNOQ.Text);
   User.CanAsk: = chkCanAsk.Checked;
   myTable.Insert;
   blobF: = myTable.FieldByName ('data') as TBlobField;
   bs: = myTable.CreateBlobStream (blobF, bmWrite);
   essayer
     bs.Write (utilisateur, SizeOf (utilisateur));
   enfin
     bs.Free;
   fin;
fin;

Dans le code ci-dessus:

  • "myTable" est le nom du composant TDataSet que vous utilisez (TTable, TQuery, ADOTable, TClientDataSet, etc.).
  • Le nom du champ blob est "data".
  • La variable "Utilisateur" (enregistrement TUser) est remplie à l'aide de 2 zones d'édition ("edName" et "edNOQ") et d'une case à cocher ("chkCanAsk")
  • La méthode CreateBlobStream crée un objet TStream pour l'écriture dans le champ blob.

"Record.ReadFromBlob"
Une fois que vous avez sauvegardé les données d'enregistrement (TUser) dans un champ de type blob, voici comment "transformer" les données binaires en valeur TUser:

 var
   Utilisateur: TUser;
   blobF: TBlobField;
   bs: TStream;
commencer
   si myTable.FieldByName ('data'). IsBlob alors
   commencer
     blobF: = DataSet.FieldByName ('data') as TBlobField;
     bs: = myTable.CreateBlobStream (blobF, bmRead);
     essayer
       bs.Read (utilisateur, taille de (TUser));
     enfin
       bs.Free;
     fin;
   fin;
   edName.Text: = User.Name;
   edNOQ.Text: = IntToStr (User.NumberOfQuestions);
   chkCanAsk.Checked: = User.CanAsk;
fin;

Remarque: le code ci-dessus doit aller à l'intérieur du gestionnaire d'événements "OnAfterScroll" de l'ensemble de données myTable.

C'est ça. Assurez-vous de télécharger l'exemple de code Record2Blob.