Bonsoir a tous
voila, depuis maintenant une semaine je n'arrive pas a résoudre ce problème. je me dirige vers vous tous puisque je suis sur que c'est la que je trouverai la solution.
mon problème est le suivant:
je développe une petite application delphi, la base de données est créée avec interbase, j'ai écrit aussi une procédure stockée pour la mise à jour de la table famille article
le code est le suivant :
En ce qui concerne delphi j'ai utilisé dbExpress pour se connecter a la base, et dans le module de données j'ai créer un SQLStoredProc que j'ai appelé psfamille qui fait référence à la procédure stockée créée avec interbase.
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 CREATE PROCEDURE FAM_MAJ( ID_FAM INTEGER, LIB_FAM VARCHAR(20), TVA NUMERIC(9,3)) AS begin if (exists(select id_fam from famille where (id_fam =:id_fam))) then update famille set lib_fam =:lib_fam, tva=:tva where (id_fam = :id_fam); else insert into famille (id_fam,lib_fam,tva ) values(GEN_ID(GEN_FAMILLE_ID,1),:Lib_Fam,:tva); end
Dans l'évènement beforepost du ClientDataSet j'ai mis le code suivant :
Bref dans le code du bouton Enregistrer j'ai écrit le code cdsFamille.post.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 procedure TDM.cdsfamilleBeforePost(DataSet: TDataSet); begin with psfamille do begin params[0].AsInteger:=dm.cdsfamilleID_FAM.AsInteger; params[1].AsString:=dm.cdsfamilleLIB_FAM.AsString; params[2].AsBCD:=dm.cdsfamilleTVA.AsCurrency; ExecProc; end; end;
Normalement je n'ai rien oublié, même les paramètres de la psFamille j'ai vérifié leurs types.
Mon problème est alors que lorsque j'insère un nouveau enregistrement dans la table famille dans le champs TVA j'aurai toujours la valeur 1056,000 quelque soit la valeur que je tape;bizarre!!!! (ce champs est de type NUMERIC(9,3)
malgré ça les autres champs de type varchar contiennent les valeurs saisies sans problème.
pouvez vous m'expliquer ce que je dois faire pour résoudre ce problème et merci beaucoup d'avance.
Partager