Pas de problème (pb), que du PowerBuilder (PB) ^^

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 10-05-2007 15:46:52

cradleofpain  
Membre Geek
Date d'inscription: 09-05-2007
Messages: 99
Pépites: 9
Banque: 9,860,255,032,773

SELECT * FROM avec récupération des données

Salut à tous !

J'ai besoin d'effectuer une requête récupérant un bon paquet de données et je voulais savoir comment faire pour stocker ces données.

J'utilise le code suivant :

Code: pb

  DECLARE curseur DYNAMIC CURSOR FOR SQLSA ;

  PREPARE SQLSA FROM "SELECT * FROM TRUC" ;

  OPEN DYNAMIC curseur ;

  FETCH curseur INTO :result ;

  CLOSE curseur ;

Comment doit être déclaré "result" dans ce cas ?

Sinon, comment faire pour stocker tout ?

Merci d'avance

Hors ligne

 

#2 10-05-2007 15:57:52

cradleofpain  
Membre Geek
Date d'inscription: 09-05-2007
Messages: 99
Pépites: 9
Banque: 9,860,255,032,773

Re: SELECT * FROM avec récupération des données

Je crois que si je fais un SELECT *, il faut que je fasse FETCH curseur INTO :result, :result2, ... ; selon le nombre de colonne récupérées.

Est-ce que je me trompe ?

Hors ligne

 

#3 10-05-2007 15:59:03

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 29-05-2006
Messages: 4658
Pépites: 942
Banque: 2,147,483,647
Site web

Re: SELECT * FROM avec récupération des données

pourquoi tu ne passes pas directement via une datawindow ?
vu que tu peux faire un select titi1,titi2, titi3 from table1 where id_toto = 'blop'


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#4 10-05-2007 16:05:24

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2486
Pépites: 85
Banque: 9,223,372,036,854,776,000

Re: SELECT * FROM avec récupération des données

Bonjour,

Normalement, il te faut définir autant de variables qu'il y a de champs dans ta table "TRUC".

Ce serait peut être plus simple de récupérer tout ça dans une datastore.


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#5 11-05-2007 05:41:07

mreminiac  
Membre Geek
Lieu: Marseille
Date d'inscription: 29-05-2006
Messages: 56
Pépites: 321
Banque: 0

Re: SELECT * FROM avec récupération des données

Bonjour

Si tu veux pas faire de dw ou ds

tu peux faire dans ce style

Code: pb

  String ls_A,ls_B

  SELECT   t.A ,    t.B    INTO :ls_A , :ls_B
     FROM TRUC t
   WHERE  xxxxxxxxxxx
    USING  SQLSA;



suite code PB


[edit] http://pbadonf.fr/forum/img/puntoolbar/smooth/bt_pre.png [ code=pb ]


Migration PB11
Oracle 9I
XP Pro

Hors ligne

 

#6 11-05-2007 07:26:39

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

Re: SELECT * FROM avec récupération des données

mreminiac a écrit:

Code: pb

  String ls_A,ls_B

  SELECT   t.A ,    t.B    INTO :ls_A , :ls_B
     FROM TRUC t
   WHERE  xxxxxxxxxxx
    USING  SQLSA;

Bonjour, ce script ne fonctionnera que si la requête renvoie une seule ligne...


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

Hors ligne

 

#7 11-05-2007 07:32:46

cradleofpain  
Membre Geek
Date d'inscription: 09-05-2007
Messages: 99
Pépites: 9
Banque: 9,860,255,032,773

Re: SELECT * FROM avec récupération des données

Ma requête fait une quarantaine de lignes.

J'aimerais ne pas avoir à utiliser un ds ou dw.

Je suis plutôt pour faire un truc comme a dit mreminiac.

Hors ligne

 

#8 11-05-2007 07:48:13

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 29-05-2006
Messages: 4658
Pépites: 942
Banque: 2,147,483,647
Site web

Re: SELECT * FROM avec récupération des données

cradleofpain a écrit:

Ma requête fait une quarantaine de lignes.

J'aimerais ne pas avoir à utiliser un ds ou dw.

Je suis plutôt pour faire un truc comme a dit mreminiac.

40taine de lignes de quoi ?
elle doit ramener 40 lignes ou il y a tellement de colonnes dans ton select que ta requete finale tient sur 40 lignes ?


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#9 11-05-2007 07:52:12

cradleofpain  
Membre Geek
Date d'inscription: 09-05-2007
Messages: 99
Pépites: 9
Banque: 9,860,255,032,773

Re: SELECT * FROM avec récupération des données

En fait, il y a SELECT plein de trucs FROM (SELECT d'autres trucs avec des CASE FROM ...)

Et tout ça fait un paquet de ligne juste pour la requête.

Mais là j'ai testé et ça passe si on met chaque champs dans une variable différente.

Hors ligne

 

#10 11-05-2007 09:56:32

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 29-05-2006
Messages: 4658
Pépites: 942
Banque: 2,147,483,647
Site web

Re: SELECT * FROM avec récupération des données

sinon,
voila une solution vite faite...

Code: pb

string  ls_presentation, ls_syntax, ls_erreur, ls_sql

ls_sql = "select * from truc"
ls_presentation   = "style(type=grid)"  
ls_syntax = SQLCA.SyntaxFromSQL(ls_sql,ls_presentation, ls_erreur)
  
dw_liste.Create( ls_syntax, ls_erreur)

dw_liste.settransobject(sqlca)
dw_liste.retrieve()


il faut que tu ajoutes une datawindow vide dans ta fenetre... ici, dw_liste est vide.
ca doit bien marcher avec une datastore...


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#11 11-05-2007 13:13:58

cradleofpain  
Membre Geek
Date d'inscription: 09-05-2007
Messages: 99
Pépites: 9
Banque: 9,860,255,032,773

Re: SELECT * FROM avec récupération des données

Beh moi ça passe avec ce que j'ai fait.

Merci quand meme !

Hors ligne

 

#12 14-05-2007 13:02:16

cradleofpain  
Membre Geek
Date d'inscription: 09-05-2007
Messages: 99
Pépites: 9
Banque: 9,860,255,032,773

Re: SELECT * FROM avec récupération des données

J'ai un autre problème qui se pose.

J'utilise le code suivant :

Code: pb

 DECLARE curseur DYNAMIC CURSOR FOR SQLSA ;

  PREPARE SQLSA FROM "SELECT * FROM TRUC" ;

  OPEN DYNAMIC curseur ;

   if SQLCA.sqlcode <> 0 then
          MessageBox( "Erreur open", SQLCA.sqlerrtext )
   end if

  FETCH curseur INTO :result ;

  CLOSE curseur ;

J'ai 2 requêtes différentes à exécuter dans 2 codes différents.

Seulement voilà : il y a une requête qui passe mais pas l'autre.

La messageBox placée après le OPEN s'affiche mais le SQLCA.sqlerrtext est vide !!!

Help !

Hors ligne

 

#13 14-05-2007 13:04:39

inferni  
Membre Geek
Lieu: Orléans
Date d'inscription: 28-02-2007
Messages: 52
Pépites: 49
Banque: 2,337,704,263,781

Re: SELECT * FROM avec récupération des données

SQLCA ou SQLSA ????

Hors ligne

 

#14 14-05-2007 13:07:38

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2486
Pépites: 85
Banque: 9,223,372,036,854,776,000

Re: SELECT * FROM avec récupération des données

Bonjour,

Merci d'utiliser le mod code=pb pour des questions de lisibilité des scripts (Je corrige pour cette fois).


Sinon, sais-tu que si ta requête ne ramène rien, le SQLCA.sqlcode sera à 100
(NO DATA FOUND)? Je pense que ça doit être ce qui se passe dans ton cas.

Il vaut mieux tester:

Code: pb

if SQLCA.sqlcode < 0 then
  MessageBox( "Erreur open", SQLCA.sqlerrtext )
end if

Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#15 14-05-2007 13:09:14

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2486
Pépites: 85
Banque: 9,223,372,036,854,776,000

Re: SELECT * FROM avec récupération des données

inferni a écrit:

SQLCA ou SQLSA ????

Bonne remarque d'inferni, mais:

The examples assume that the default transaction object (SQLCA) has been assigned valid values and that a successful CONNECT has been executed. Although the examples do not show error checking, you should check the SQLCode after each SQL statement.


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#16 14-05-2007 13:34:14

cradleofpain  
Membre Geek
Date d'inscription: 09-05-2007
Messages: 99
Pépites: 9
Banque: 9,860,255,032,773

Re: SELECT * FROM avec récupération des données

Désolé, je ne sais pas où se trouve la balise code=pb il suffit juste d'utiliser la balise code et d'ajouter soi-même le = pb ?

Sinon je voulais savoir si il existe une taille maxi pour les requête dans un preparestatement ?

Hors ligne

 

#17 14-05-2007 13:39:58

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2486
Pépites: 85
Banque: 9,223,372,036,854,776,000

Re: SELECT * FROM avec récupération des données

cradleofpain a écrit:

Désolé, je ne sais pas où se trouve la balise code=pb il suffit juste d'utiliser la balise code et d'ajouter soi-même le = pb ?

Oui, il suffit de mettre code=pb à la place de code dans la balise d'ouverture:
Voir le topic: mod de coloration syntaxique

cradleofpain a écrit:

Sinon je voulais savoir si il existe une taille maxi pour les requêtes dans un preparestatement ?

Qu'entends-tu par taille maxi: Nombre de lignes de ta requête ou nombre de lignes d'enregistrements retournés par l'exécution de ta requête?


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#18 14-05-2007 13:47:06

cradleofpain  
Membre Geek
Date d'inscription: 09-05-2007
Messages: 99
Pépites: 9
Banque: 9,860,255,032,773

Re: SELECT * FROM avec récupération des données

Taille de la requête

Hors ligne

 

#19 14-05-2007 14:13:04

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2486
Pépites: 85
Banque: 9,223,372,036,854,776,000

Re: SELECT * FROM avec récupération des données

A ma connaissance, il n'y en a pas (mis à part la limite de la taille maximale des scripts PB).
Mais il est vrai que les requêtes via SQLSA ne sont pas ma spécialité....


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#20 14-05-2007 15:17:08

cradleofpain  
Membre Geek
Date d'inscription: 09-05-2007
Messages: 99
Pépites: 9
Banque: 9,860,255,032,773

Re: SELECT * FROM avec récupération des données

Est-ce que l'on est limité en nombre d'encapsulations de select ?

Ma requête fait des SELECT ... FROM (SELECT ... FROM (SELECT ...

Hors ligne

 

#21 15-05-2007 08:15:33

cradleofpain  
Membre Geek
Date d'inscription: 09-05-2007
Messages: 99
Pépites: 9
Banque: 9,860,255,032,773

Re: SELECT * FROM avec récupération des données

J'ai essayé ma requête dans un programme java et elle passe. Le résultat est correct.

Le problème vient donc de powerbuilder.

Est-ce que quelqu'un comprend ce qui m'arrive ???

Hors ligne

 

#22 15-05-2007 08:26:05

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2486
Pépites: 85
Banque: 9,223,372,036,854,776,000

Re: SELECT * FROM avec récupération des données

Ta requête ramène bien une seule ligne, ou plusieurs?


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#23 15-05-2007 08:35:38

cradleofpain  
Membre Geek
Date d'inscription: 09-05-2007
Messages: 99
Pépites: 9
Banque: 9,860,255,032,773

Re: SELECT * FROM avec récupération des données

Plusieurs.

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22