[Delphi] comprendre cette erreur ODBC

comprendre cette erreur ODBC [Delphi] - Delphi/Pascal - Programmation

Marsh Posté le 13-10-2002 à 18:09:12    

Bonjour,
 
je recois cette erreur de façon aléatoire, et je voudrais comprendre d'où elle vient ?  
De l'application Delphi, du driver ODBC, du BD Engine ?
 

Code :
  1. ---------------------------
  2. Debugger Exception Notification
  3. ---------------------------
  4. Project asinco.exe raised exception class EDBEngineError with message 'General SQL error.
  5. [Microsoft][Pilote ODBC Microsoft Access]Chaîne de donnée, tronquée à droite (null)'. Process stopped. Use Step or Run to continue.
  6. ---------------------------
  7. OK   Help 
  8. ---------------------------


 
Cela le fait sous Delphi5 ou 6, sous WinXP comme sous Win2000.
Si vous avez besoin de plus d'infos, vous n'avez qu'à demander ;)

Reply

Marsh Posté le 13-10-2002 à 18:09:12   

Reply

Marsh Posté le 13-10-2002 à 18:12:15    

Je dirais que ça vient du BDE, et qu'y a une erreur dans ta requête SQL.
Donc faudrait voir ce que contient ladite requête.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 13-10-2002 à 18:21:40    

ok, je vais tenter d'expliquer ça clairement :
 
En gros la manip c'est l'enregistrement le contenu de plusieurs objets dans une base de données Access (texte pour la plupart)
 
Je part d'objets TMemo, TEdit, TComboBox...  
J'affecte leur valeur à une requête dédiée à l'insertion, qui contient du SQL avec variables :

Code :
  1. INSERT INTO devis (
  2. numdevis, numclient, [Date Devis], objet, [Montant HT], [Taux TVA], [Montant TTC], [Montant HT Eur], [Montant TTC Eur], [Montant TVA Eur], DateAcompte, MontantAcompte, Texte )
  3. VALUES ( :numdevis, :numclient, :DateDevis, :objet, :MontantHT, :TauxTVA, :MontantTTC, :MontantHTEur, :MontantTTCEur, :MontantTVAEur, :DateAccompte, :MontantAccompte, :Texte );


 
le code de l'affectation :  

Code :
  1. QueryEcritureDevis.active := false;
  2.     QueryEcritureDevis.Params[0].AsString := numdevisfacture.text; // numdevis
  3.     QueryEcritureDevis.Params[1].AsString := DBText6.field.asstring; // numclient
  4.     QueryEcritureDevis.Params[2].AsString := edate.text; // DateDevis
  5.     QueryEcritureDevis.Params[3].AsString := objet.lines.text; // objet
  6.     QueryEcritureDevis.Params[4].AsString := montantFHT.text; // MontantHT
  7.     QueryEcritureDevis.Params[5].AsString := TTVA.text; // TauxTVA
  8.     QueryEcritureDevis.Params[6].AsString := montantFTTC.text; // MontantTTC
  9.     QueryEcritureDevis.Params[7].AsString := montantEHT.text; // MontantHTEur
  10.     QueryEcritureDevis.Params[8].AsString := montantETTC.text; // MontantTTCEur
  11.     QueryEcritureDevis.Params[9].AsString := montantETVA; // MontantTVAEur
  12.     QueryEcritureDevis.Params[10].AsDateTime :=  dateAccompte.DateTime; // DateAccompte
  13.     QueryEcritureDevis.Params[11].AsString :=  montantAccompte.Text; // MontantAccompte
  14.     StrPCopy(tempPchar, texteFactDevis.Lines.Text);
  15.     QueryEcritureDevis.Params[12].Asmemo :=  tempPchar; // texte
  16.     QueryEcritureDevis.ExecSQL;


 
Et c'est dans cette dernière partie que ça plante :)


Message édité par altus le 13-10-2002 à 18:23:41
Reply

Marsh Posté le 13-10-2002 à 18:23:19    

en fait je soupçonne les lignes avec le TMemo :

Code :
  1. StrPCopy(tempPchar, texteFactDevis.Lines.Text);
  2. QueryEcritureDevis.Params[12].Asmemo :=  tempPchar; // texte


Message édité par altus le 13-10-2002 à 18:23:29
Reply

Marsh Posté le 13-10-2002 à 18:28:55    

Pour le memo, il est stocké comment dans la BD ?
Ton tempPChar tu l'initialisse comment ?
 
c'est pas plus facile de faire
QueryEcritureDevis.Params[12].AsString := texteFactDevis.Lines.Text
?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 13-10-2002 à 18:33:30    

antp a écrit a écrit :

Pour le memo, il est stocké comment dans la BD ?
Ton tempPChar tu l'initialisse comment ?
 
c'est pas plus facile de faire
QueryEcritureDevis.Params[12].AsString := texteFactDevis.Lines.Text
?
 




 
1. C'est stocké dans une base Access 2000, le type de champs est "Mémo"
 
2.  

Code :
  1. GetMem(tempPchar, 2048);
  2. for i := 0 to 2047 do tempPchar[i] := #0;


 
3. C'est ce que je faisais au début, mais je ne me rappelle plus pourquoi j'ai changé mon code.

Reply

Marsh Posté le 13-10-2002 à 19:45:37    

altus a écrit a écrit :

 
for i := 0 to 2047 do tempPchar[i] := #0;




 
pour ça y a la fonction FillChar :o
 
sinon je sais pas d'où pourrait venir le problème :/


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 13-10-2002 à 19:57:54    

Ouais je me disais aussi que quelqu'un allait faire la remarque :D  
OK FillChar alors :)
 
Sinon pour info j'ai essayé plusieurs façons, d'affecter la valeur du TMemo au TParam de la requête, et j'ai des fois le même message d'erreur :??:
 
Comment est ce que je pourrais contourner le problème ? Utiliser une façon différente d'enregistrer des données dans une base Access ?

Reply

Sujets relatifs:

Leave a Replay

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