Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Pages: 1
Bonjour Cher tous,
En fait j'ai un problème, j'ai 2 datawindow en sharedata, je voudrais ajouté un champs calculé directement dans la requete SQL (à partir de son Datasource) d'une des datawindow comme ceci:
select
date_col1,
date_col2,
col3,
...
datediff(minute,date_col1, date_col2) as durée
from Paiement
Et ca me donne l'erreur suivante : Select error : Column lists do not match
Puis-je esperer quelque chose de votre part?
D'avance je vous dis merci
Dernière modification par b2oba (19-03-2008 13:49:01)
Hors ligne
Bonjour,
essaye dbparm.staticbind=1
ou alors un cast de ta donnée pour la forcer en numérique : to_number( xxxx )
d'ailleurs j'éviterai un alias avec un accent (durée)
NB : minute est une colonne de la base ?
Hors ligne
Non minute est une constante SQL qui te retourne la différence de deux dates en minute.
Et aussi durée n'as pas d'acces c'est plus tôt duree
Merci pour ton attention.
Hors ligne
b2oba a écrit:
Bonjour Cher tous,
En fait j'ai un problème, j'ai 2 datawindow en sharedata, je voudrais ajouté un champs calculé directement dans la requete SQL (à partir de son Datasource) d'une des datawindow comme ceci:
select
date_col1,
date_col2,
col3,
...
datediff(minute,date_col1, date_col2) as durée
from Paiement
Et ca me donne l'erreur suivante : Select error : Column lists do not match
Pour que ton sharedata marche, il faut impérativement que les deux SELECT de tes datawindows soient identiques (Les clauses FROM et WHERE peuvent être différentes): Il faut donc que dans l'autre datawindow tu rajoutes une pseudo-colonne "durée" dans ton select pour que cela fonctionne (Et comme le dit ErAsORz, évites les accents dans les alias)
Hors ligne
Bonjour,
Un petit rappel de la doc PB :
Usage
The columns must be the same for the DataWindow objects in the primary and secondary DataWindow controls, but the SELECT statements may be different. For example, you could share data between DataWindow objects with these SELECT statements:
SELECT dept_id from dept
SELECT dept_id from dept where dept_id = 200
SELECT dept_id from employee
WHERE clause in secondary has no effect The WHERE clause in the DataWindow object in the secondary DataWindow control has no effect on the number of rows returned. The number of rows returned to both DataWindow controls is determined by the WHERE clause in the primary DataWindow object.
You could also share data with a DataWindow object that has an external data source and columns defined to be like the columns in the primary. To share data between a primary DataWindow and more than one secondary DataWindow control, call ShareData for each secondary DataWindow control.
Hors ligne
Dans le cas présent, la fonction datediff retourne un entier long (le nombre de minutes entre les deux dates)
Donc si dans ta deuxième DW tu ne souhaites pas faire appel à la fonction une deuxième fois, il faut écrire (avec un alias sans accent comme préconiser plus haut)
select date_col1, date_col2, col3, ... 0 as duree from Paiement
et surtout pas
select date_col1, date_col2, col3, ... '' as duree from Paiement
car sinon les types de colonne ne correspondent pas et le share plante joyeusement.
Cela est valable quelque soit la fonction utilisée dans l'une ou l'autre des DW d'un shared. L'erreur que je rencontre le plus c'est lorsqu'une des sources retourne un nombre à décimal et l'autre est initialisée avec 0 donc un entier (dans ce cas le plus simple est de mettre 0.0 ou utiliser les fonctions de conversion du SGBD pour transformer l'entier 0 en décimal)
Hors ligne
Pages: 1