[Delphi + MySQL] Erreur E_FAIL, comment contourner ?

Erreur E_FAIL, comment contourner ? [Delphi + MySQL] - Delphi/Pascal - Programmation

Marsh Posté le 18-03-2005 à 21:25:45    

J'utilise une base MySQL dans une appli Delphi. Je me connecte à ma base via un DSN système, utilisant le pilote ODBC MySQL, et tout fonctionne correctement, à l'exception de la requête suivante :
 

SELECT IdHistorique, InstantDebut, InstantFin, TIMEDIFF(InstantFin, InstantDebut) AS Duree
FROM Historique
ORDER BY InstantDebut


 
Lors que je saisi cette requête dans un client MySQL type Navicat ou MySQL Query Browser, la requête fonctionne très bien et fait ce que je veux. Par contre, lorsqu'elle est exécutée depuis un TADOQuery, j'ai l'erreur suivante :
 
"Un état E_FAIL a été renvoyé par le fournisseur de données ou par un autre service."
 
Cela se produit lorsque je réalise le Open sur l'ADOQuery. De quoi cela vient-il et comment résoudre le problème ?


---------------
Au coeur du swirl - Mon feed
Reply

Marsh Posté le 18-03-2005 à 21:25:45   

Reply

Marsh Posté le 30-04-2005 à 10:52:20    

héhéhéh je m'en suis mordu les doigts de cette erreur ...
 
Le problème que tu viens de soulever est du à un bug dans MyODBC (voir release note).
 
Il se produit quand tu essais de remonter un champ date marqué comme obligatoire (NOT NULL) qui à une valeur 0000-00-00.
 
Le middleware se vautre litteralement dans ce cas. Pour résoudre le problème il faut rendre le champ comme non obligatoire ou sinon donne lui une valeur fantaisiste que tu traiteras dans ton programme (moins joli).
 
Bon courage.

Reply

Marsh Posté le 02-05-2005 à 10:32:23    

J'ai contourné le problème en stockant la valeur de la différence des deux dates directement dans un champs INT représentatnt un nombre de secondes. Je sais, c'est pas très propre de stocker une valeur calculée, mais bon, c'est le plus simple qui m'est venu, et au moins ça tourne... :)


---------------
Au coeur du swirl - Mon feed
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed