Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
Actuellement en PB9, nous éditons un rapport à partir de données stockées sous MS SQL Server 2000 dont un champ image BLOB. Au moment de la génération du rapport, le programme plante sans message d'erreur, apparemment au bout d'une cinquantaine d'images chargées. Y a-t-il une limitation ? Dans l'exemple concret, nous devrions obtenir une centaine d'images normalement. Nous procédons comme suit :
SELECTBLOB BLB_IMG INTO :lblb_Pic FROM dba.SAV_SERV_IMG (NOLOCK) WHERE CC_STE = :ls_Ste AND CI_BON = :ll_Bon AND CI_ID_SERV = :ll_Id USING SQLCA; IF SQLCA.SQLNRows = 1 AND NOT IsNull(lblb_Pic) THEN p_pic.SetPicture(lblb_Pic) // OBJET DE TYPE picture ll_W = UnitsToPixels(p_pic.Width, XUnitsToPixels!) ll_H = UnitsToPixels(p_pic.Height, YUnitsToPixels!) ll_Idx++ isa_Fich[ll_Idx] = ls_Fich // FONCTION QUI CONVERTIT LE BLOB EN BMP lst_Taille = gf_SavePicture_Print(lblb_Pic, ls_Fich, ll_W, ll_H, 6) tab_1.tabpage_2.dw_2.SetItem(ll_Row, "lv_photo", ls_Fich) // CHAMP DE LA DW AVEC PROPRIETE DisplayAsPicture = True p_pic.PictureName = "Add Watch!" p_pic.PictureName = "" END IF
Dernière modification par sbouvetJD (04-11-2010 12:52:33)
Hors ligne
Salut,
Mince satisfaction : je ne suis pas le seul à me prendre le chou avec des BLOB :-D
Ton test : NOT IsNull( lbl_pic) ne te garantit pas que le BLOB soit vide. Il pourrait être valide mais ne contenir aucun octet. Je te propose donc de rajouter un test : AND LEN(lbl_pic) <> 0
A+
Hors ligne
Salut,
Quel type de connexion (odbc, natiif ) utilise tu ?
Dernière modification par Yanis (03-11-2010 14:27:44)
Hors ligne
Yanis : On passe par le composant natif de connexion (la migration en PB12 nous obligera à pas mal de modifications à ce niveau.
GPF : Merci pour l'astuce du LEN, j'y rajoute et j'y re-teste.
Hors ligne
Bon, apparemment j'ai le même souci, au bout de 58 images remontées, arrêt de l'application sans message d'erreur. Se pourrait-il que le 59e BLOB soit "corrompu", et dans ce cas, comment le contrôler ?
Hors ligne
ça serait bien de savoir quelle ligne fait planter ton programme. Faudrait que tu le traces ou que tu mettes un point d'arrêt.
Hors ligne
Bonjour,
Tu peux essayer de contrôler que ton image est valide en vérifiant que la hauteur et largeur est positive.
Hors ligne
En testant le retour de la fonction [pictureObject].setPicture, j'ai pu isoler le BLOB qui me posait problème. (retour < 0 si problème). C'est donc tout OK.
Hors ligne