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






Salut à tous,
Dans une DataWindow 'dw_selection' , j'ai écris la requête suivante :
SELECT 'O'date_1, 'O'date_2, d.colonne1, d.colonne2, d.colonne3 FROM ma table d WHERE 1 = 1
Avec ma table : une table de la base oracle, elle contient les champs suivant : colonne1, colonne2, colonne3.
Dans ma Datawindow je besoin de deux champs date_1 et date_2, donc pour cela j'ai les ajouter dans ma requête de datawindow sans modifier ma table.
Le problème c'est que quand je fait :
ld_date_du = dw_selection.GetItemDate(1,"date_du") ld_date_au = dw_selection.GetItemDate(1,"date_au")
Il m'affiche le message suivant :
Error : DataWindow columm type does not match GetItem type at line 23 in generer event of object w_xxx
Est ce que je peut pas faire de cette manière ou Quoi ?
merci de me répondre !!!
Dernière modification par mattdamon (24-04-2008 18:20:03)
Hors ligne











Bonjour,
Tout d'abord
C'est plus lisible
Ensuite, il vaut mieux
que tu utilises la requête suivante:
SELECT TO_DATE('01/01/1900','DD/MM/YYYY') as date_1, TO_DATE('01/01/1900','DD/MM/YYYY') as date_2, d.colonne1, d.colonne2, d.colonne3 FROM ma table d WHERE 1 = 1
Enfin, utilises "GetItemDateTime": le type DATE Oracle correspond au type DateTime dans PB
Hors ligne






Si j'ai bien compris ta réponse foon, je doit écrire cette requête derrière ma Datawindow quand je fait datasource non ?
Dernière modification par mattdamon (23-04-2008 16:02:42)
Hors ligne











Tout à fait, dans le datasource de la datawindow.
Le problème est que, quand tu mets la requête :
SELECT 'O'date_1, 'O'date_2, d.colonne1, d.colonne2, d.colonne3 FROM ma table d WHERE 1 = 1
Tes champs date_1 et date_2 sont considérés par PB comme étant de type alphanumérique ORACLE (et donc string en PB).
Ceci est lié à leur valeur initiale '0' (de plus, tu as oublié le "AS" nécessaire à la définition d'un alias).
En mettant TO_DATE(...), PB les considérera comme des datetime.
Hors ligne






Je sais pas pourquoi il accepte la requête suivante :
SELECT 'O' as date_1, 'O'as date_2, d.colonne1, d.colonne2, d.colonne3 FROM ma table d WHERE 1 = 1
Par contre quand j'ajoute la fonction : TO_DATE('01/01/1900','DD/MM/YYYY'), il me dit que : table or view not found : prosedure ' TO_DATE' not found
Hors ligne











Tu es bien sous ORACLE, pour ce qui concerne ta base de données?
Quelle version as-tu?
Tu es connecté en natif ou via ODBC?
Hors ligne






Oui sur ORACLE 10g, et SQLCA.DBMS = 90
Hors ligne











Je viens de faire le test: chez moi, ça marche.
Tu peux faire un export de ta datawindow?
Hors ligne






Voici le code que j'ai écrit et qu'il m'affiche toujours le message d'erreur :
SELECT TO_DATE ('01/01/1900','DD/MM/YYYY') as date_1, TO_DATE('01/01/1900','DD/MM/YYYY') as date_2, 'O' tri_1, 'O' tri_2, d.entite, d.titre, d.compte_titre, d.depositaire, s.num_compte, FROM table1 d, table2 s WHERE 1 = 1
Hors ligne











Il faut enlever l'espace entre "TO_DATE" et la première parenthèse.
De plus, tu as oublié le "AS" pour les pseudo-colonnes tri_1 et tri_2, et tu as laissé une virgule après s.num_compte:
SELECT TO_DATE('01/01/1900','DD/MM/YYYY') AS date_1, TO_DATE('01/01/1900','DD/MM/YYYY') AS date_2, 'O' AS tri_1, 'O' AS tri_2, d.entite, d.titre, d.compte_titre, d.depositaire, s.num_compte FROM table1 d, table2 s WHERE 1 = 1
Hors ligne














foon a écrit:
1) Il faut enlever l'espace entre "TO_DATE" et la première parenthèse.
2) De plus, tu as oublié le "AS" pour les pseudo-colonnes tri_1 et tri_2,
3) et tu as laissé une virgule après s.num_compte:
1) ça devrait marcher avec un espace
2) ça devrait marcher sans le AS
3) effectivement
il te suffirait de lancer d'abord la requête dans un outil SQL pour Oracle (SQL developper, Toad, SQLTools....) pour voir exactement où est l'erreur
NB : amha ce forum n'est pas là pour corriger les scripts SQL
Hors ligne






Je viens de vérifier la fonctions TO_DATE(...) !! pourquoi lorsque je tape cette fonction reste en noir n'est bleu ?
je pose cette question parce que normalement si elle reconnue par PowerBuilder donc ça sera en bleu non ?
Hors ligne











Non, la coloration syntaxique PB ne reconnaît pas les fonctions Oracle
Hors ligne






Salut,
Finalement je doit mettre ce code suivant puis juste un jeu de casting string to date :
SELECT 'O' AS date_1, 'O' AS date_2, 'O' AS tri_1, 'O' AS tri_2, d.entite, d.titre, d.compte_titre, d.depositaire, s.num_compte FROM table1 d, table2 s WHERE 1 = 1
mais un autre problème c'est que date_1 et date_2 ce sont des chaines de caractères ne sont pas des dates en plus que ça la taille et limité par rapport à mon besoin (char(1)).
donc est ce que possible de rendre la taille date_1 et date_2 à 20 caractères ?
Hors ligne











Pour les avoir sur 20 caractères, il suffit de les initialiser avec 20 caractères.
Par exemple:
SELECT '01/01/1900 00:00:000' AS date_1, '01/01/1900 00:00:000' AS date_2, 'O' AS tri_1, 'O' AS tri_2, d.entite, d.titre, d.compte_titre, d.depositaire, s.num_compte FROM table1 d, table2 s WHERE 1 = 1
Mais bon, pour des champs dates, c'est pô propre
Hors ligne






Ah , merci beaucoup foon pour vos réponses vraiment ça marche bien la nouvelle initialisation, je vais voir les restes
Dernière modification par mattdamon (24-04-2008 14:39:21)
Hors ligne






Après avoir saisi les champs date_1 = 01/01/2008 et date_2 = 31/12/2008 dans la datawindow, à l'exécution et en mode déboggage seulement ls_date_du = 01/01/2008 mais l'autre date est null
voici le code que j'ai écrit :
string ls_date_du, ls_date_au ls_date_du = dw_selection.getitemstring( 1,"date_1") ls_date_au = dw_selection.getitemstring( 1,"date_2") ld_date_du = date(ls_date_du) ld_date_au = date(ls_date_au)
Est ce qu'il y a pas des updates à faire ou ..... ?
Hors ligne














foon a écrit:
Mais bon, pour des champs dates, c'est pô propre
c'est du grand n'importe quoi, tu fais date->string->date
ça te rajoute du code dans PB et des risques d'erreur...
pourquoi ne pas faire un to_date comme foon l'a suggéré ou un sysdate :
SELECT sysdate AS date_1, sysdate AS date_2, ...
Hors ligne






ErAsORz, J'ai testé la solution de foon concernant la fonction to_date () mais toujours ça marche pas tel que après avoir taper la requête dans la datasource de la datawindow et quand je fait RETURN pour aller au painter de datawindow il m'affiche le message d'erreur :
table or view not found : prosedure ' TO_DATE' not found
Même chose pour:
SELECT sysdate AS date_1, sysdate AS date_2, ...
Dans ce cas la il dit : column 'sysdate' not found
Hors ligne











Et quand tu testes la requête dans Oracle directement, il n'y a pas de problème?
Hors ligne






J'ai testé la requête sur PL/SQL developer et ça fonctionne bien.
Donc je crois qu'il me faut mieux reconstruire de nouveau ma DataWindow
Hors ligne
J'ai une petite question. Ton PB est bien connecté à ta base (la bonne) ? As-tu vérifié dans dbprofile...
Hors ligne






Très bien Chrnico le pb a été résolu et voila le secret :
dans la phase de développement je connecte sur la base local SQL/Anywhere (base.db sur ma machine) puis je connecte sur la base oracle sur une autre machine.
donc quand j'ai crée un nouveau profile pour connecter directement sur la base oracle sans utilisé sqlAnywhere,, il fonctionne bien sans erreur
Hors ligne