Après windows pour les nuls, voici PB pour les bons (ou presque).

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 09-07-2007 10:24:57

cantin_jl  
Membre completement Geek
Lieu: 49120 Chemillé
Date d'inscription: 10-01-2007
Messages: 132
Pépites: 552
Banque: 0
Site web

Try Catch avec SetPicture

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

Code: pb

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


Les inventions qui ne sont pas connues ont toujours plus de censeurs que d'approbateurs

Hors ligne

 

#2 09-07-2007 11:33:48

shahin  
Modérateur
Award: bf
Lieu: val de marne
Date d'inscription: 26-09-2006
Messages: 938
Pépites: 8,675,050,269
Banque: 16,218,225,127,617

Re: Try Catch avec SetPicture

Code: pb

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


never let people work on more than one thing at once.

Hors ligne

 

#3 09-07-2007 13:20:28

cantin_jl  
Membre completement Geek
Lieu: 49120 Chemillé
Date d'inscription: 10-01-2007
Messages: 132
Pépites: 552
Banque: 0
Site web

Re: Try Catch avec SetPicture

shahin a écrit:

Code: pb

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

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.


Les inventions qui ne sont pas connues ont toujours plus de censeurs que d'approbateurs

Hors ligne

 

#4 09-07-2007 13:34:18

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: Try Catch avec SetPicture

Bonjour, dans les newsgroups sybase, on conseille d'enregistrer l'image dans un fichier et de tester le fichier voir ici


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#5 09-07-2007 14:06:03

cantin_jl  
Membre completement Geek
Lieu: 49120 Chemillé
Date d'inscription: 10-01-2007
Messages: 132
Pépites: 552
Banque: 0
Site web

Re: Try Catch avec SetPicture

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.


Les inventions qui ne sont pas connues ont toujours plus de censeurs que d'approbateurs

Hors ligne

 

#6 10-07-2007 08:12:20

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: Try Catch avec SetPicture

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 ?


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#7 10-07-2007 13:59:39

cantin_jl  
Membre completement Geek
Lieu: 49120 Chemillé
Date d'inscription: 10-01-2007
Messages: 132
Pépites: 552
Banque: 0
Site web

Re: Try Catch avec SetPicture

Voici le code que j'ai testé :

Code: pb

  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?


Les inventions qui ne sont pas connues ont toujours plus de censeurs que d'approbateurs

Hors ligne

 

#8 10-07-2007 15:31:04

shahin  
Modérateur
Award: bf
Lieu: val de marne
Date d'inscription: 26-09-2006
Messages: 938
Pépites: 8,675,050,269
Banque: 16,218,225,127,617

Re: Try Catch avec SetPicture

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 ?


never let people work on more than one thing at once.

Hors ligne

 

#9 10-07-2007 15:38:10

Chrnico  
N2I Power
Award: bf
Lieu: Vanves
Date d'inscription: 05-06-2007
Messages: 1206
Pépites: 12,884,901,943
Banque: 9,223,372,036,854,776,000
Site web

Re: Try Catch avec SetPicture

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...."


Tu dois donc tu peux (Kant)

Tu peux donc tu dois (N2i)
www.n2i.fr

Hors ligne

 

#10 11-07-2007 06:31:32

cantin_jl  
Membre completement Geek
Lieu: 49120 Chemillé
Date d'inscription: 10-01-2007
Messages: 132
Pépites: 552
Banque: 0
Site web

Re: Try Catch avec SetPicture

Mais alors comment faire?


Les inventions qui ne sont pas connues ont toujours plus de censeurs que d'approbateurs

Hors ligne

 

#11 11-07-2007 07:24:31

Chrnico  
N2I Power
Award: bf
Lieu: Vanves
Date d'inscription: 05-06-2007
Messages: 1206
Pépites: 12,884,901,943
Banque: 9,223,372,036,854,776,000
Site web

Re: Try Catch avec SetPicture

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...


Tu dois donc tu peux (Kant)

Tu peux donc tu dois (N2i)
www.n2i.fr

Hors ligne

 

#12 11-07-2007 08:12:37

shahin  
Modérateur
Award: bf
Lieu: val de marne
Date d'inscription: 26-09-2006
Messages: 938
Pépites: 8,675,050,269
Banque: 16,218,225,127,617

Re: Try Catch avec SetPicture

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, ...) ?


never let people work on more than one thing at once.

Hors ligne

 

#13 11-07-2007 10:00:33

cantin_jl  
Membre completement Geek
Lieu: 49120 Chemillé
Date d'inscription: 10-01-2007
Messages: 132
Pépites: 552
Banque: 0
Site web

Re: Try Catch avec SetPicture

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


Les inventions qui ne sont pas connues ont toujours plus de censeurs que d'approbateurs

Hors ligne

 

#14 12-07-2007 09:09:18

cantin_jl  
Membre completement Geek
Lieu: 49120 Chemillé
Date d'inscription: 10-01-2007
Messages: 132
Pépites: 552
Banque: 0
Site web

Re: Try Catch avec SetPicture

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.


Les inventions qui ne sont pas connues ont toujours plus de censeurs que d'approbateurs

Hors ligne

 

#15 12-07-2007 09:45:41

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: Try Catch avec SetPicture

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é...


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22