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
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
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;
Cette procédure fonctionne en ajout pour d'autres table.
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;
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
Partager