Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Salut à tous, voici mon petit problème :
Je voudrais tester la valeur de retour d'une requête, je m'explique :
je fais un agenda, dedans je gére les RDV. J'ai donc une feuille avec une zone de saisie de la date, et une DW qui affiche les rdv pour la date saisie. Ce que j'aimerais c'est qu'au démarrage de l'appli, une requête vérifie si j'ai des RDV aujourd'hui. Pour cela j'ai une requette avec un controle sur la date du RDV, et j'aimerais que si j'ai un ou plusieurs RDV un message me le dise. Si je fais un select * into rdv_jour from rdv, je pense qu'il ne me renverra qu'une seule valeur, or si j'ai 2 ou + RDV aujourd'hui, je ne les verrais pas. Dois je faire une requête supplémentaire afin d'actualiser la DW ou y a t il possibilité de tout récupérer en une seule fois ?
Merci
Hors ligne
Bonjour,
Evidement, les "select into" servent uniquement à récupérer une ligne et une seule.
Le plus simple est de ne pas utiliser de SQL en ligne
jamais.
Puisque tu as déjà un objet datawindow, utilie le dans un datastore pour récupérer la liste des RDV d'aujourd'hui.
Hors ligne
Salut à toi,
Je te remercie de ta réponse, en fait j'ai fait autrement car je suis dans une feuille MDI et dans cette feuille je n'avais pas de DW. Une petite question, pourquoi dis tu qu'il ne faut jamais utiliser de SQL en ligne ?
Hors ligne
Une datastore, pas une dw.
La datastore est un objet NON VISUEL.
Comme propriété, tu lui associe un objet DW (à ne pas confondre avec un contrôle DW) qui contient la requete SQL.
Et quand je dis jamais de sql en ligne c'est :
1) pour t'apprendre à utiliser les datastore
2) tout ton SQL est au même endroit (dans des objets datawindow)
3) la datastore est plus simple à manipuler que d'avoir à fetcher un curseur comme tu as dû le faire (enfin je suppose)
Update
Sur ce site, va dans "conseils pratiques", puis "L'objet datastore"
http://pbadonf.fr/forum/viewtopic.php?id=53
Dernière modification par shahin (30-10-2006 14:05:30)
Hors ligne
OK je te remercie beaucoup, même si je nage un tit peut mais c'est comme ça qu'on apprend. Merci pour tes réponses vieux, et bonne continuation !
Hors ligne
shahin a écrit:
Une datastore, pas une dw.
La datastore est un objet NON VISUEL.
Comme propriété, tu lui associe un objet DW (à ne pas confondre avec un contrôle DW) qui contient la requete SQL.
Et quand je dis jamais de sql en ligne c'est :
1) pour t'apprendre à utiliser les datastore
2) tout ton SQL est au même endroit (dans des objets datawindow)
3) la datastore est plus simple à manipuler que d'avoir à fetcher un curseur comme tu as dû le faire (enfin je suppose)
Update
Sur ce site, va dans "conseils pratiques", puis "L'objet datastore"
http://pbadonf.fr/forum/viewtopic.php?id=53
Bonjour,
Reste à savoir si effectivement passer par un datastore est plus rapide que passer par un
curseur ...
Si tu as des benchs à ce sujet, n'hésites pas à les poster.
Hors ligne
Bonjour à tous
Pour Infos sous ORACLE
que ca soit une datastore ou une datawindows il est fortement conseillé dans ton les cas de faire un PLAN_TABLE . A mon niveau c'est une règle.
Par contre au niveau performance je ne vois pas de différence entre les deux. Mise à part de bien faire un destroy de la datastore après une utilisation de celle ci.
Bonne Journée
Cordialement
Hors ligne
Doctor Z, désolé je n'ai pas de benchs et aucune idée de ce qui est mieux en terme de performance.
Ma problématique était plus axée facilité de maintenance du code / lisibilité. Dans le cas de doktorquick dont l'appli récupère une poignée de lignes, il n'y aura aucune différence de perf.
mreminiac, oui moi aussi je détruis systématiquement les objets que je créée, mais puisque PB possède un garbage collector, la théorie dit que ce n'est pas nécessaire.
A titre de comparaison voici un squelette de code avec du sqL en ligne. Tres mauvais code (pas de gestion des erreurs)
DECLARE Emp_cur CURSOR FOR SELECT employee.emp_number, employee.emp_name FROM employee WHERE employee.emp_salary > :Sal_var ; OPEN Emp_curs ; do while sqlca.sqlcode <> 100 FETCH Emp_cur INTO :emp_num, :emp_name ; loop CLOSE Emp_cursor ;
Pour écrire du code correct il faut tester sqlca.sqlcode apres chaque ordre SQL :
- declare
- open
- fetch
- close
Dernière modification par shahin (31-10-2006 09:37:40)
Hors ligne