Bonjour à toutes et tous,

Tout ou presque est dans le titre.

J'ai un projet, qui utilise une base Firebird (V4.0.2.2816), Lazarus est en 2.2.6 et j'utilise les composants Zeos pour la connexion.

Dans plusieurs tables, j'ai des champs BLOB Text, dans lesquels je stock des TRichMemo, via une procédure interne. Jusqu'à présent, je n'ai rencontré aucun problème.

Mais, sur une table, lorsque j'ajoute un enregistrement, le Memo n'est pas enregistrer. Le nouvel élément est bien dans la table, mais le mémo est vide.
Si j'édite l'enregistrement et que je tape un Memo, là, il est bien enregistrer ! Le problème ne se produit qu'en ajout.

Les champs de la table (sauf le TRichMemo, bien sur) sont des champs orientés base de données, et le composant table est un ZTable.
Dans une procédure, je fais un Append, et une méthode OnNewRecord initialise les champs.
A l'appui d'un bouton (nommer originellement "btn_valider") je procède à l'enregistrement.
Voici la procédure
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Procedure Tfrm_gest_grpclasses.Btn_validerclick(Sender : Tobject);
Var
  in_cgrIdent : Integer;

Begin
  case mfMode Of
    mfAjout : Begin
      If Not dm_cadd2.FBo_Exist(FSt_CreatSQLTexte(kSQL_Exist, ['cgr_ident', 'TB_CLAGROUPE_CGR', 'cgr_nom='+QuotedStr(edt_cgrnom.Field.AsString)])) Then
      Begin
        in_cgrIdent := dm_cadd2.FIn_GetNextId('GEN_CGR_IDENT');//Récupération de l'identifiant automatique
        tbl_ClaGroupe.FieldByName('cgr_ident').AsInteger := in_cgrIdent;
        Pdbu_RichMemo2BlobField(mmo_cgrdescrip, TBlobField(tbl_ClaGroupe.FieldByName('cgr_descrip')));
        tbl_ClaGroupe.Post;
        P_ModeFen(mfConsultation);
      End
      Else
        Erreur('');
    End;
    mfEdition : Begin
      Pdbu_RichMemo2BlobField(mmo_cgrdescrip, TBlobField(tbl_ClaGroupe.FieldByName('cgr_descrip')));
      tbl_ClaGroupe.Post;
      P_ModeFen(mfConsultation);
    End;
  End;
End;
La procédure PDbu_RichMemo2BlobField
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
Procedure Pdbu_richmemo2blobfield(Prichmemo : Trichmemo; Pblob : Tblobfield);
Begin
	ms_Temp := TMemoryStream.Create;
  Try
    Prichmemo.SaveRichText(ms_Temp);
    ms_Temp.Position := 0;
    Pblob.LoadFromStream(ms_Temp);
	Finally
    ms_Temp.Free;
	End;
End;
Cette procédure fonctionne en ajout pour d'autres table.

Est-ce que ça vous parle ?
Bon, le projet est un perso, c'est pour gérer un JDR de Donjons et Dragons. Mais, j'aimerais bien comprendre le pourquoi du comment.

Merci d'avance
JS