Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
Je déclare un blob en variable locale. Ensuite je récupère la valeur d'un blob en BDD, je le mets dans ma variable et en fonction de paramètres je l'écrit ou non dans un fichier. ça fonctionne pour le premier, les autres ne génèrent aucune erreur et ont une taille cohérente mais ne s'écrivent pas dans le fichier malgré le paramètre Append! de FileOpen et une valeur retour cohérente de FileWrite ou FileWriteEx.
J'ai tenté avec les fonctions FileWriteEx et FileWrite, aucune ne passe
Après le fileClose, le fichier est tout petit et n'a pas pris en compte les écritures suivantes
Certainement un indicateur de fin de fichier. Savez-vous comment résoudre ce problème s'il vous plait ? Je dois absolument livrer et ça me bloque ^^
Pour info, il s'agit de fichiers rtf enregistrés en blob dans une base informix. Je travaille sur pb 11.5
Merci beaucoup
//Ouverture du fichier l_iOpenFile = fileOpen(i_sDir+"\"+l_sNomModeleFic, StreamMode!, Write! , Shared!, Append!) if l_iOpenFile < 0 then Messagebox('erreur', 'L~'ouverture du fichier modèle '+l_sNomModeleFic+'a échoué ! ') return -1 end if //Dans la boucle j'écris l_iRc = fileWriteEx(l_iOpenFile, l_blobCourant) if isnull(l_iRc) or l_iRc < 0 then Messagebox('erreur', 'Erreur à l~'écriture du blob dans le fichier') end if //J'ai également tenté en fin de boucle une concaténation dans un blob global, écrit dans un autre fichier ça donne la même chose : l_blobComplet += l_blobCourant //Fermeture du fichier modèle l_iRc = fileClose(l_iOpenFile) if l_iRc < 0 then MessageBox('erreur', 'Le fichier '+ l_sNomModeleFic +'n~'a pas pu être fermé !') end if
ajout de la coloration PB
Dernière modification par stef (30-11-2016 12:02:13)
Hors ligne
Hors ligne
Une solution de contournement ne consisterais pas à ouvrir autant de fichiers qu'il y a de lectures puis a fusionner ces fichiers via un ole Word par exemple ?
Dernière modification par Dadone (30-11-2016 09:00:24)
Hors ligne
OK, merci. Un collègue m'a dit avoir concaténé des blobs avec du contenu word et réussi à afficher le résultat je commence vraiment à en douter.
Sais tu quelle fonction utiliser dans l'OLE word pour fusionner ou extraire le contenu et l'insérer dans le document ouvert avec l'objet OLE stp ? Sans qu'il ne traite que la première insertion à cause du caractère de fin de document ?
Merci beaucoup
Et désolée pour la coloration
Hors ligne
Bonjour,
Comme il s'agit de contenu rtf, tu peux essayer de passer en mode chaine pour voir si le contenu de ce que tu dois sauvegarder est correct :
String ls_content, ls_current ls_current = String(l_blobCourant, EncodingUTF8!) ls_content += ls_current
Ensuite, tu peux essayer de sauvegarder cette chaine, si tout est correct.
Hors ligne
Bon, j'ai réussi à le faire sans passer par un objet OLE. Je passe par un RichTextEdit control :
//J'ai créé un fichier à partir du blob et je passe le chemin du fichier à mon objet RichTextEdit //(code dans une boucle) l_iRc = uo_ttx.rte_ttx.InsertDocument(fileName, false, fileTypeRichText!) if l_iRc < 0 then MessageBox('erreur', 'Erreur à l~'insertion du paragraphe') end if //En fin de boucle, je sauvegarde le contenu du Document de l'objet RichTextEdit l_iRc = uo_ttx.rte_ttx.SaveDocument ( filename , fileTypeRichText! )
Merci d'avoir pris le temps de répondre
Hors ligne
Ah, merci j'avais pas vu ta réponse je teste ça tout de suite ça m'évitera de créer des fichiers
buck a écrit:
Bonjour,
Comme il s'agit de contenu rtf, tu peux essayer de passer en mode chaine pour voir si le contenu de ce que tu dois sauvegarder est correct :Code: pb
String ls_content, ls_current ls_current = String(l_blobCourant, EncodingUTF8!) ls_content += ls_current
Ensuite, tu peux essayer de sauvegarder cette chaine, si tout est correct.
Hors ligne
La conversion en string revient au même qu'avec la concaténation des blobs surement à cause des EOF
Si je ne convertis pas en blob avant d'écrire il perd la mise en forme RTF
Si je convertis à la fin j'ai une erreur cannot sart the converter WPFT532.CNV
Donc merci mais du coup je passe par l'objet RichTextEdit
Hors ligne