Bonjour,
je me casse la tête depuis des jours avec ça :
dans sql server 7 j'ai une simple table "MaTable" avec trois champs : une clé primaire "ID" (Int), un champ libre "Champ" (Int) et une date "LaDate" (DATETIME).
contenu de "MaTable" : (ID, Champ, LaDate)
La table est associée à un TQuery "MonQuery" (select * from MaTable where ID=2), lui-même lié à un TUpdateSQL, tous deux bien configurés (cachedupdates=true,etc...) et lorsque je tente un :1 10 <NULL>
2 32 <NULL>
3 <NULL> 01/07/2003
4 41 <NULL>
5 43 05/06/1991
ça me met une erreur sql server (la the fameuse erreur assez célèbre) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 MonQuery.Close; MonQuery.Open; MonQuery.Edit; MonQuery.fieldByName('LaDate').asString := '03/02/1995'; MonQuery.Post; MonQuery.ApplyUpdates; //ça crashe ici
"La conversion d'un type de données CHAR en type DATETIME a donné une valeur hors des limites des valeurs de date et d'heure" (Msg. 242, Niveau 16)
Après des heures passées sur google, le problème viendrait de la config de la BD dans SQL Server, où le format des dates ne serait pas au bon format.
mais j'ai vérifié que je suis bien en configuration langue Française, avec le format "dmy"
Pour le plaisir j'ai retapé les commandes pour forcer les paramètres, à savoir :
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 set dateformat dmy; go set language français; go
...mais c'est toujours pareil.
Ce qui m'étonne c'est que la requête suivante (depuis sql server directement, ou depuis un tquery, en Close, Open) s'exécute sans aucune erreur et affecte bien la valeur dans la table :
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Update MaTable Set LaDate = '03/02/1995' Where ID=2;
...allez savoir pourquoi ?
L'erreur se reproduit si je mets évidemment '03/21/1995' (à l'anglaise mdy).
Donc ça veut dire que mon dmy est bien configuré.
et même en rajoutant "set format dmy;" dans la TQuery, ça ne règle en rien le problème.
Si quelqu'un a déjà pu contourner ou régler ce problème (qui se reproduit à l'identique avec un TTable, et/ou en modif directe des champs dans un DBGrid plutôt que le fieldbyname) ?
PS : Je n'ai pas ce problème avec sql server 2005, pour la même BD montée depuis sql7 vers sql2005 (et donc la même table). Pourtant j'ai vérifié avoir les mêmes paramètres dans les tables de config de la BD "master".
Là aussi, s'il y a des beaux gosses de sql server qui savent ce qui coincerait ?
Merci beaucoup
(PS: oui, cette table ne sert à rien, c'est juste un exemple pour illustrer mon pb, qui est général pour toute autre table contenant N champs DATETIME (N>0))
Partager