Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : SQL Server/Delphi, Erreur conversion CHAR en DATETIME [ Base de données / SQL Server ] (mengele)

jeudi 12 juin 2008 à 11:45:10 | SQL Server/Delphi, Erreur conversion CHAR en DATETIME

mengele



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)

1   10    <NULL>  
2   32   <NULL>  
3    <NULL>   01/07/2003
4    41   <NULL>  
5    43   05/06/1991

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 :
                  MonQuery.Close;
                  MonQuery.Open;
                  MonQuery.fieldByName('LaDate').asString := '03/02/1995';
                  MonQuery.Post;
                  MonQuery.ApplyUpdates;

ça me met une erreur sql server (la the fameuse erreur, assez célèbre) :

"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 deux commandes pour forcer les paramètres, à savoir :
    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 :

    Update MaTable
    Set LaDate = '03/02/1995'
    Where ID=2;

...allez savoir pourquoi ?

L'erreur se reprodui 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êem 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, y a-t-il des beaux gosses de sql server qui savent où ça 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))





jeudi 12 juin 2008 à 12:11:14 | Re : SQL Server/Delphi, Erreur conversion CHAR en DATETIME

mengele

Réponse acceptée !


Vu que ça passe par une TQuery en mettant directement "update..., set..., where...", je pense que le pb doit se situer au niveau de l'Administrateur BDE.

Il doit certaineemnt interpréter la requête avant de l'envoyer au serveur de sql server.
Et là il doit faire des choses pas très jolies...

Faudrait pouvoir tracer ce qu'il fait...

Des pistes ?

Merci :D


jeudi 12 juin 2008 à 13:52:42 | Re : SQL Server/Delphi, Erreur conversion CHAR en DATETIME

cantador

Membre Club
Bonjour mengele,

essaie :

MonQuery.fieldByName('LaDate').asDateTime := StrToDateTime('03/02/1995');


cantador

jeudi 12 juin 2008 à 18:57:23 | Re : SQL Server/Delphi, Erreur conversion CHAR en DATETIME

mengele



Merci pour ta réponse,
en fait, j'ai le même problème et ce peu importe que j'update le champ datetime ou pas

ça, ça marche :
                  MonQuery.Close;
                  MonQuery.Open;
                  MonQuery.Edit;
                  MonQuery.Post;
                  MonQuery.ApplyUpdates;
ça, ça ne marche pas non plus :
                  MonQuery.Close;
                  MonQuery.Open;
                  MonQuery.Edit;
                  MonQuery.fieldByName('Champ').asInteger := 12;
                  MonQuery.Post;
                  MonQuery.ApplyUpdates;


à partir du moment où j'EDIT ou j'INSERT dans un tquery ou une ttable contenant un ou plusieurs champs DATETIME, peu importe quel champ je mets à jour (NULL autorisés), ça me détecte des DATETIME et ça part en vrille avec ce message d'erreur.

D'autres sugestions ?

Merci :D

jeudi 12 juin 2008 à 20:49:42 | Re : SQL Server/Delphi, Erreur conversion CHAR en DATETIME

cantador

Membre Club

MonQuery.ApplyUpdates;
ne sert pas à grand chose puisque tu ne commites pas derrière
tu pourrais tenter un
MonQuery.Refresh;

Mais çà sent le bug dans sqlserver.

pour l'instant je ne vois rien de plus à part tout désinstaller et réinstaller, fermer les firewall et les anti-virus..

ah si un dernier point, lorque tu fais une édition
es-tu bien calé sur le bon enregistrement ?
sinon il faut faire un locate..

Moi j'utilise Firebird et je n'ai pour l'instant aucun problème..et en plus c'est OpenSource.

tiens moi au courant

cantador


vendredi 13 juin 2008 à 09:46:01 | Re : SQL Server/Delphi, Erreur conversion CHAR en DATETIME

mengele

Bonjour, merci pour ta réponse.

Le loctate ne résout rien, car je suis bien positionné sur la table.

La preuve, je peux accéder aux valeurs de l'enregistrement sans problème, avec par exemple un :
showmessage(MonQuery.fieldbyname('LaDate').asString);

Ca plante sur le MonQuery.ApplyUpdates;

ça, ça passe comme une lettre à la poste :
  MonQuery.Close;
MonQuery.Open;
MonQuery.Edit;
MonQuery.fieldByName('Champ').asInteger := 12;
MonQuery.Post;

Donc le problème vient au niveau de la communication avec sql server.

PS : ça marche niquel quand j'exécute mon appli depuis un autre PC connecté
à la même base sql server sur laquelle je me connecte.

ça viendrait de mon firewall vous croyez ?

En tout cas, sachez que j'avais déjà eu ce pb, alors j'ai migré ma base sql server sur un autre
PC, et là ça a marché, et puis un beau jour, ça a nouveau recrasher (sans rien toucher).



Merci

vendredi 13 juin 2008 à 11:21:26 | Re : SQL Server/Delphi, Erreur conversion CHAR en DATETIME

cantador

Membre Club
Le loctate ne résout rien..
C'était juste une piste de réfléxion.. car lorsqu'on a un phénomène de ce genre de plus non répétitif..

ça a nouveau recrasher (sans rien toucher).
C'est ce que vous croyez..

mais en fait quelque chose a bougé, c'est certain..
plein d'évènement se produire à votre insu comme :

- une intervention d'une autre personne
- une maj
- un virus
- une macro
- un téléchargement avec exécution
etc.

il faut garder l'oeil ouvert sur tout !

cantador

vendredi 13 juin 2008 à 12:24:44 | Re : SQL Server/Delphi, Erreur conversion CHAR en DATETIME

mengele



ça y est ça marche,
fallait potasser.

En fait, pour ceux qu'auraient ce pb aussi :

ça vient de C:\Program Files\Fichiers communs\Borland Shared\BDE\mssql32.dll

qu'il faut upgrader à une meilleure version :

en passant de la 5.0.1.22 à 5.2.0.2

;)

(en fait, c'est pk j'avais un BDE installé issu de delphi 4)
donc vous tous avec vos delphi 6 et 7, forcément, vous n'avez jamais ce blem

merci,
:D

PS : ce pb n'est présent que sur win2000, winXP

sur win inférieur, le bde n'est pas natif et la dll est propre à windows : sqlsrv32.dll.

Et elle pilote correctement.

salut à tous.

vendredi 13 juin 2008 à 12:53:13 | Re : SQL Server/Delphi, Erreur conversion CHAR en DATETIME

mengele



correction :
nom de la DLL :
C:\Program Files\Fichiers communs\Borland Shared\BDE\sqlmss32.dll


vendredi 13 juin 2008 à 13:50:31 | Re : SQL Server/Delphi, Erreur conversion CHAR en DATETIME

cantador

Membre Club
A noter qu'on peut aussi trouver une installation de la dernière version du BDE.

En tout cas merci l'info et comme quoi avant il faut nécessairement indiquer dans sa question
la configuration de son matériel

cantador


1 2

Cette discussion est classé dans : table, erreur, sql, server, monquery


Répondre à ce message

Sujets en rapport avec ce message

Pertes de données avec Batchmove [ par oluha ] BonjourJ'ai un gros problème avec les batchmoves. Je m'en sers dans mon programme pour transferer une table d'Access vers SQL Server puis d'SQL Server INSERER UNE IMAGE .bmp DANS UNE TABLE SQL Server [ par fonkou ] Bonjour ou BonsoirComment puis-je insérer une image .bmp dans une colonne d'une table SQL Server depuis Delphi ?Je développe sous Delphi 5.0 autour de nom d'objet incorrect [ par moun778 ] bonjourje suis entrain de developper ue application sql server 2000 + delphi5, j'ai bien compris le principe de sql server et les composants ado de de Message d'erreur avec SQL Server et ADOConnection [ par dendoun ] Salut à tout le monde,je connecte ma base de données SQL Server par le ADOConnection, mais je reçois le message d'erreur chaque fois j'excute l'applic Erreur SQL Server : "Fonctionnalité optionnelle non implémentée" [ par badajoz ] J'ai un soucis, une erreur se produit lorsque j'effectue une requete d'insertion:"Fonctionnalité optionnelle non implémenté"Si quelq'un pouvait m'aide base sql server - paradox [ par exyacc ] salut, comment on fait pour faire des requetes ajout qd on a 2 bases de donnees de type differents ? j'ai une table qui se trouve dsune base sql serve delphi et table sysdatabases du sql server [ par thebed ] salut a tous j'ai un probleme j'arrive pas a trouvé une solution, je ve affiché la table sql server "sysdatabases" je croi que le pb est ds le format requête SQL [ par pierrecoulon ] Bonjour à tous,je me retrouve devant un petit message d'erreur que je n'arrive pas à résoudre.j'utilise  ADOQuery, ADOTable, DATASource.voici le code sauvegarde d'image dans une bdd SQL server (ou dans un dossier) [ par Adjax ] slt! suis un nouveau developpeur en delphi/SQL server. je voudrais enregistrer une personne avec sa photo. Est-ce possible, et aussi comment enregistr Suppression table paradox impossible [ par mengele ] Bonjour,j'aimerais savoir comment "libérer" une table paradox (.db) : matable.dbDans mon appli je n'ai qu'un TQuery : MonQuery.Cette table matable.db


Nos sponsors

Sondage...

CalendriCode

Novembre 2008
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,172 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.