Je dirais que le problème se produit lorsque les machines n'ont pas les mêmes paramètres. As-tu vérifier dans toutes les options régionales que les machines sont bien identiques ?
Je dirais que le problème se produit lorsque les machines n'ont pas les mêmes paramètres. As-tu vérifier dans toutes les options régionales que les machines sont bien identiques ?
Bon bon...
Je suis revenu sur ma situation de base.
Des clients et un serveur en MS-sql.
Toujours le même problème sur la majorité des machines.
J'ai décidé de modifier le code :
Donc en gros pour cette query, je n'utilise plus la PS. J'ai juste copier le code SQL de la PS dans Windev. L'unique modification se trouver là : '20120216'. Quand je travaille de cette façon ça fonctionne sur toutes les machines.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 //SI HExécuteRequêteSQL(VerificationGardeJour,"gcnxMaConnexion", ... // hRequêteSansCorrection ,"VerificationGardeJour @PDateFiltre") ALORS // HLitPremier(VerificationGardeJour) // TANTQUE PAS HEnDehors(VerificationGardeJour) // nCheckGarde = 1 // Message(CBM_Garde,VerificationGardeJour.CodePersonnel + " - " + VerificationGardeJour.Mobile ) // HLitSuivant(VerificationGardeJour) // FIN // HAnnuleDéclaration(VerificationGardeJour) //SINON // Erreur(HErreurInfo()) //FIN ReqClient est une Source de Données SI HExécuteRequêteSQL(ReqClient,"gcnxMaConnexion", ... hRequêteSansCorrection ,"SELECT Personnel.CodePersonnel,Personnel.Mobile, Type_Personnel.CodeTypePersonnel, Garde.IDGarde, Garde.DateDebut,Garde.DateFin, Garde.IDPersonnel,Garde.SaisiLe, Garde.SaisiPar,Garde.ModifierLe,Garde.ModifierPar FROM Garde INNER JOIN Personnel ON Personnel.IDPersonnel = Garde.IDPersonnel INNER JOIN Type_Personnel ON Personnel.IDType_Personnel = Type_Personnel.IDType_Personnel WHERE Garde.DateDebut = '20120216' ORDER BY Garde.DateDebut DESC") ALORS HLitPremier(ReqClient) TANTQUE PAS HEnDehors(ReqClient) nCheckGarde = 1 Message(CBM_Garde,ReqClient.CodePersonnel + " - " + ReqClient.Mobile ) HLitSuivant(ReqClient) FIN HAnnuleDéclaration(ReqClient) SINON Erreur(HErreurInfo()) FIN
Néanmoins, ce n'est pas une solution vu que je dois travailler avec des PS et ne jamais avoir de code SQL directement dans l'exe.
J'en perds mon latin...
Oui, j'ai déjà du regarder 4 ou 5 fois. Franchement, je ne vois pas de différence...Je dirais que le problème se produit lorsque les machines n'ont pas les mêmes paramètres. As-tu vérifier dans toutes les options régionales que les machines sont bien identiques ?
Bonjour,
Ta procédure ne fonctionne pas quand la PS attend un paramètre (qu'elle l'utilise ou non ) mais fonctionne quand elle n'en attend pas, c'est bien cela ?
A mon avis regarde du coté du SQLServer, c'est peut être un paramétrage de sécurité pour évité les injections SQL.
Oui, c'est bien ça.
C'est juste étrange que c'est sur des PS qui attendent une date. Ce qui me dérange le plus, c'est qu'il y a des PC où je ne recontre pas le souci.
A la limite que rien ne passe ok mais pas deux sur cinq...
Peux-tu transfomer ton paramètre date en chaine dans l'appel de ta procédure et dans la procédure elle-même reconvertir ta chaine en date ?
Ca n'expliquera pas pourquoi ça ne marche pas mais si ça peut fonctionner...
Je crois que je vais jeter l'éponge pour aujourd'hui...
J'ai modifié ma PS pour qu'on lui passe une string que je reconvertis en datetime. (mouais...)
Ca fonctionne sur certain PC et sur d'autres, j'ai un message d'erreur sur HlitPremier pour quelques PC.
Demain, je mets en place la même configuration en zone de tests. Un SQL-server et X PC.
On verra ce que ça donne avec une autre configuration mais avec une topologie identique.
Bonne rencontre,
Aujourd’hui, je me suis rendu à mon bureau.
J’ai installé mon programme sur l’ensemble de notre parc qui contient du XP (FR,UK) en 32 et 64 bits ainsi que des Seven en 64bits.
J’ai fait pointer l’application sur ma machine de développement où tourne mon server SQL de tests. Tout fonctionne parfaitement sans rencontrer les mêmes problèmes que chez le client.
Pour confirmer le diagnostique, j’ai installé un SQL Server sur un des PC et j’ai fait pointer tous les PC vers lui. Tout ça histoire de l’isoler ma machine de développement de l’équation. L’application s’est comportée comme elle devait.
J’en viens donc à me dire que le souci ne vient pas de l’application que j’ai développé mais bel est bien d’un truc là-bas mais quoi…. C’est une autre histoire…
Après ces quelques commandes, la seul différence notoire entre la version du bureau et celle du client est que le serveur MS-SQL 2008 est en SP2 chez le client. Alors qu’il est toujurs en SP1 chez nous. (Il faudra qu’on effectue la mise à jour).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 SELECT SERVERPROPERTY('ProductLevel') SELECT @@VERSION SELECT SERVERPROPERTY('ProductVersion') SELECT CONVERT(varchar, serverproperty('collation'))
Pensez-vous qu’il y a d’autres choses à vérifier ? Je tourne clairement en rond pour le moment.
Commencer à me dire que je vais changer toutes mes datetime en varchar pour les convertir...c'est quand surtout vu le nombre de PS que j'ai...
Amicalement,
Raphaël.
Et si tu passes en sp2 sur un serveur de test ?
On se dirige quand même vers un pb sql-server, non ?
Hum j'ai l'impression.
J'ai installé le sp2 sur ma machine et sur l'autre sql de test. Tout continue à fonctionner sans soucis.
Tu pourrais peut être vérifier ce que reçoit SQL Server comme requête. Pour cela tu peux utiliser SQL Server Management studio, qui doit sûrement être installé sur le serveur.
A partir de SSMS tu te connecte au serveur SQL et là tu vas dans le menu Outil / SQL Server Profiler.
SQL Server Profiler permets de voir les requêtes reçus par ton serveur SQL.
Cela te permettra de voir au moins si les différents postes envoient des requêtes identiques.
Avant d'exécuter une procédure stockée, peux-tu exécuter la comande suivante :
DBCC USEROPTIONS
Ca va permettre de savoir quelles sont les options définies pour l'utilisateur.
Dans un deuxième temps, essayes aussi de faire cette commande avant le lancement :
SET ANSI_DEFAULTS ON
et après
SET ANSI_DEFAULTS OFF
Partager