Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour
j'utilise la fonction suivante sous PB10.5 :
p_representation.SetPicture(abl_imageetiquette)
avec abl_imageetiquette de type blob
et p_representation de type picture
Il se trouve que mon blob ne contient pas toujours des données exploitables par la fonction SetPicture. En cas d'erreur cela me plante l'apllication.
Aussi je voudrais utiliser la fonction =Try...Catch
try p_representation.SetPicture(abl_imageetiquette) catch ... messagebox(gs_titre, 'Erreur') end try
Mes questions :
Que mettre à la suite du catch?
Peut-on recupèrer le type d'erreur en clair?
Est-ce la bonne organisation du code?
Merci
Hors ligne
TRY p_representation.SetPicture(abl_imageetiquette) CATCH (runtimeerror EX) MessageBox("Error","Erreur dans l'image....") RETURN -1 END TRY
Pas sur que cela résolve ton problème
Tu devrais plutôt faire :
IF 1 = p_representation.SetPicture(abl_imageetiquette) THEN
ELSE
// ici la partie la plus importante
END IF
Hors ligne
shahin a écrit:
Code: pb
TRY p_representation.SetPicture(abl_imageetiquette) CATCH (runtimeerror EX) MessageBox("Error","Erreur dans l'image....") RETURN -1 END TRYPas sur que cela résolve ton problème
Tu devrais plutôt faire :
IF 1 = p_representation.SetPicture(abl_imageetiquette) THEN
ELSE
// ici la partie la plus importante
END IF
désolé mais dans les deux cas j'ai le message suivant : Not a JPEG File:starts with 0x01 0x00
A la suite de quoi, l'application est terminée.
Hors ligne
Bonjour, dans les newsgroups sybase, on conseille d'enregistrer l'image dans un fichier et de tester le fichier voir ici
Hors ligne
eRaSorZ a écrit:
Bonjour, dans les newsgroups sybase, on conseille d'enregistrer l'image dans un fichier et de tester le fichier voir ici
Après lecture de la newsgroup, il semble que ce ne soit pas une solutiontrès optimisée.
Hors ligne
cantin_jl a écrit:
eRaSorZ a écrit:
Bonjour, dans les newsgroups sybase, on conseille d'enregistrer l'image dans un fichier et de tester le fichier voir ici
Après lecture de la newsgroup, il semble que ce ne soit pas une solutiontrès optimisée.
en attendant mieux, as-tu testé cette solution ? y'a-t-il de longs temps d'attente ?
Hors ligne
Voici le code que j'ai testé :
li_FileNum = FileOpen("C:\temp\blob_" + ls_time + ".wmf", StreamMode!, Write!, LockWrite!, Replace!) ll_ret = FileWriteEx(li_FileNum, abl_imageetiquette) fileclose(li_FileNum) integer li_fnum long ll_bytes blob Emp_Id_Pic li_fnum = FileOpen("C:\temp\blob_" + ls_time + ".wmf", StreamMode!) ll_bytes = FileReadEx(li_fnum, Emp_Id_Pic) fileclose(li_fnum) if li_fnum > 0 then p_representation.SetPicture(abl_imageetiquette) . . .
abl_imageetiquette est un blob
Le fichier créé "C:\temp\blob_...) est lisible vie PaintShop Pro mais l'image est dégradé.
li_fnum est bien supérieur à 0 mais p_representation.SetPicture(abl_imageetiquette) me retourne toujours le message d'erreur comme quoi mon blob n'est pas au format JPEG.
Que faire?
Hors ligne
Length limit FileWrite can write only 32,766 bytes at a time, which includes the string terminator character. If the length of variable exceeds 32,765, FileWrite writes the first 32,765 bytes and returns 32,765.
Bref, il faut faire une chtite boucle
Je ne connais pas la limite de FileWriteEx, (je n'ai que PB9), aussi vérifie que ll_ret corresponde à la taille du fichier
puis vérifie ll_bytes
En cas d'anomalie, ça vient probablement de ton driver de base de données.
Quelle base de données ?
Comment t'y connecte tu ?
Hors ligne
shahin a écrit:
Length limit FileWrite can write only 32,766 bytes at a time, which includes the string terminator character. If the length of variable exceeds 32,765, FileWrite writes the first 32,765 bytes and returns 32,765.
Bref, il faut faire une chtite boucle
Je ne connais pas la limite de FileWriteEx, (je n'ai que PB9), aussi vérifie que ll_ret corresponde à la taille du fichier
puis vérifie ll_bytes
Utiliser FileWriteEx en PB 10 et supérieure ne nécessite pas de boucle.
Extrait de l'aide PB :
"...Use FileWriteEx to handle variables that have more than 32,765 bytes...."
Hors ligne
Pour le problème de format, il me semble (mais je peux me tromper si si !) qu'il existe plusieurs algo de compression JPEG pas tous compatibles entre eux... Essaies avec une image JPEG créée avec Paint...
Il me semble avoir déjà eu ce cas...
Hors ligne
cantin_jl a écrit:
Mais alors comment faire?
Je me répéte : vérifie ll_ret, puis ll_bytes
Le problème peut venir de ta connection à la base de données.
- Quelle base de données
- Comment tu t'y connecte ?
- Quelle versionde PB (exactement jusqu'au build) ?
- Quel OS (3.1, 95, Vista, ...) ?
Hors ligne
shahin a écrit:
cantin_jl a écrit:
Mais alors comment faire?
Je me répéte : vérifie ll_ret, puis ll_bytes
Le problème peut venir de ta connection à la base de données.
- Quelle base de données
- Comment tu t'y connecte ?
- Quelle versionde PB (exactement jusqu'au build) ?
- Quel OS (3.1, 95, Vista, ...) ?
Base de donnée : Oracle V9
Connexion en natif vie le client oracle 8.1.7
Version PB : 10.5 build 4523
Version OS : Window XP professionnel
Hors ligne
cantin_jl a écrit:
shahin a écrit:
cantin_jl a écrit:
Mais alors comment faire?
Je me répéte : vérifie ll_ret, puis ll_bytes
Le problème peut venir de ta connection à la base de données.
- Quelle base de données
- Comment tu t'y connecte ?
- Quelle versionde PB (exactement jusqu'au build) ?
- Quel OS (3.1, 95, Vista, ...) ?Base de donnée : Oracle V9
Connexion en natif vie le client oracle 8.1.7
Version PB : 10.5 build 4523
Version OS : Window XP professionnel
Après bérification, ll_ret et ll_bytes ont des valeurs correctes.
Je ne sais plus quoi faire.
Hors ligne
Salut, je pense qu'en écrivant le blob dans un fichier, il "reste plus" qu'à trouver la bonne API qui te donnera des infos sur le type et la validité...
Hors ligne