|
Publicité | ||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Inscription : décembre 2008 Messages : 115 ![]() |
Bonne rencontre,
J’utilise MS-SQL en natif et les procédures stockées de MS-SQL. Je ne trouve pas le moyen d’envoyer la valeur NULL. Exemple, j’ai une heure de fin de prestation. On ne sait pas d’avance l’heure de fin donc celle-ci est remplie par après lors d’un update sur la DB. Le problème, c’est que lors de l’INSERT, il me met d’office la valeur 1900-01-01 00:00:00.000 Quand je test ma PS et que je lui passe NULL, c’est ok. Mon souci vient de la possibilité de passer NULL à la PS depuis windev. Si je mets ça sdAjouterPersonnelDossier.PHeureFin = Null, j’obtiens ça : 1900-01-01 00:00:00.000 Ce qui est normal d’après la doc : NULL Entier initialisé à 0. Par exemple, il est possible d'utiliser un paramètre "null" dans une fonction API (fonction API ou AppelDLL32) 0 Une idée pour avoir réellement NULL dans la DB ? Je ne trouve rien à ce niveau dans la doc… D’avance, merci. Raphaël. |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Inscription : mars 2005 Messages : 1 532 ![]() |
Bonjour,
Peut être avec la syntaxe suivante : Code :
sdAjouterPersonnelDossier.PHeureFin..Null = Vrai |
|
|
00
|
|
|
#3 | ||||
|
Nouveau Membre du Club
![]() Inscription : décembre 2008 Messages : 115 ![]() |
Malheureusement dans ce cas, j'obtiens ce message.
Code :
Code :
C'est embattant... |
||||
|
|
00
|
|
|
#4 | ||
|
Nouveau Membre du Club
![]() Inscription : décembre 2008 Messages : 115 ![]() |
Je ne vais quand même pas de voir faire un truc comme ça...
Code :
|
||
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() Inscription : mars 2005 Messages : 1 532 ![]() |
Donnez le vrai code utilisé pour vos tests et le résultat ou erreur obtenus.
C'est difficile de comprendre ce que vous avez réellement fait. |
|
|
00
|
|
|
#6 | ||||||
|
Nouveau Membre du Club
![]() Inscription : décembre 2008 Messages : 115 ![]() |
Etape 1 :
Code :
Résultat : Erreur à la ligne 26 du traitement Sortie de FI_Personnel. <PHeureFin> n'est ni une rubrique ni un paramètre de la requête <sdAjouterPersonnelDossier>. De nouveaux paramètres ne doivent pas être déclarés après la préparation d'une requête. Vérifier également qu'il n'y a pas d'erreur de syntaxe dans le nom de la rubrique ou du paramètre. Etape 2 : Code :
Mon but est d'avoir NULL dans le champ HeureFin de la DB. La PS : Code :
|
||||||
|
|
00
|
|
|
#7 | ||
|
Membre Expert
![]() Inscription : mars 2005 Messages : 1 532 ![]() |
Merci c'est plus clair. L'erreur de l'étape 1 se produit à l'exécution de la requête (l. 19) ou à l'affectation du paramètre (l. 10) ?
Autre test, ça marche bien quand vous forcez le passage de NULL à l'appel de la PS ? Code :
|
||
|
|
00
|
|
|
#8 | ||
|
Nouveau Membre du Club
![]() Inscription : décembre 2008 Messages : 115 ![]() |
L'erreur se produit à l'affectation du paramètre (l. 10) --> sdAjouterPersonnelDossier.PHeureFin..Null = Vrai
Sinon, si je mets directement null dans HExécuteRequêteSQL, j'ai cette erreur. ![]() Le SQL ne trouve donc pas le paramètre qu'il attend ce qui normal. Quand on exécute une PS directement sur le SGBD et qu'il y a un null, on doit faire. Code :
Donc si je mets null comme ça dans la requête envoyé par Windev, il considère qu'il manque un paramètre. |
||
|
|
00
|
|
|
#9 | ||
|
Nouveau Membre du Club
![]() Inscription : décembre 2008 Messages : 115 ![]() |
Si je ne définis pas PHeureFin dans la source de données et que je laisse :
Code :
*soupir* |
||
|
|
00
|
|
|
#10 | |||||
|
Membre Expert
![]() Inscription : mars 2005 Messages : 1 532 ![]() |
Citation:
Et en mixant passage de paramètre via paramètre sur source de données pour tout ce qui non null et passage du NULL dans le "call" : Code :
Edit : il faudrait qu'Hibernatus passe par là, il a une bonne maîtrise de l'interaction AN <-> SQL Server. |
|||||
|
|
00
|
|
|
#11 | ||
|
Nouveau Membre du Club
![]() Inscription : décembre 2008 Messages : 115 ![]() |
J'ai également essayé tout à l'heure. Je n'ai pas de message d'erreur mais j'ai ça dans la db 1900-01-01 00:00:00.000.
Code :
|
||
|
|
00
|
|
|
#12 | ||
|
Membre éclairé
![]() Inscription : août 2010 Messages : 247 ![]() |
Bonjour,
Code :
Notez qu'on ne peut pas écrire sdReq.Param1..Type pour vérifier que ça vaut zéro (type indéfini = Null), donc il y a déjà un problème dans la façon dont WinDev gère ou donne accès aux paramètres de requêtes. C'est un défaut de WinDev et/ou de l'accès natif si ça devient 0. Contactez le support technique. Sinon, si vous pouvez modifier la PS vous pouvez définir une valeur spéciale comme -1 qui remplace le NULL. PS. vmolines : merci, mais en fait je ne connais que l'accès par OLE DB, je n'ai jamais utilisé l'accès natif. |
||
|
|
10
|
|
|
#13 |
|
Nouveau Membre du Club
![]() Inscription : décembre 2008 Messages : 115 ![]() |
Je viens de faire le test...
Effectivement avant l'envoi vers l'accès natif la valeur est bonne. ![]() J'ai sonné au support du Benelux mais ils ne savent pas... Je viens donc d'envoyer un mail au support technique en France. |
|
|
00
|
|
|
#14 | ||
|
Nouveau Membre du Club
![]() Développeur informatique Inscription : avril 2011 Messages : 14 ![]() |
Salut,
Dans ta procédure stockée, déclare le paramètre PHeureFin comme étant optionnel en lui mettant une valeur par défaut, la valeur NULL par exemple. Code :
Comme cela lorsque tu veux que HeureFin soit NULL tu ne passes aucun paramètre @PHeureFin à ta procédure. |
||
|
|
20
|
|
|
#15 |
|
Nouveau Membre du Club
![]() Inscription : décembre 2008 Messages : 115 ![]() |
Bien vu ! Dans ce cas, cette solution me va puisque je peux faire un truc comme ça :
SI TABLE_Personnel.COL_HeureFin[i] = NULL ALORS PS sans paramètre SINON PS avec le paramètre Et j'ai toujours bien qu'une seule PS dans mon SGBD pour le même travail. Par contre, c'est quand même déplaisant que je ne puisse pas passer de NULL directement. Si j'ai une réponse du support, je vous post la réponse. Merci à vous (tous les participants du post) pour votre aide qui m'a été très précieuse. Raphaël. Dernière modification par Raphael1980 ; 19/10/2011 à 16h59. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com