Tout d'abord avec le AnsiReplaceStr, il pourrait avoir une erreur (pas obligatoirement de type float)
Imagine que
Valeur1 = '
tout simplement, ton programme planterais (sauf si tu utilises Quotedstr(valeur1) qui te le remplacerait par ''''
Et puis
Add(' where '+FindChamp1+'= '+quotedstr(valeur1));
est mieux que
Add(' where '+FindChamp1+'='''+AnsiReplaceStr(Valeur1,'''','''''')+'''');
Ensuite, ta variable "AliasRetourneChamp" ne te sert a rien, utilise directement "RetourneChamp" ca revient au meme
Au lieu de mettre
result:=FieldByName(RetourneChamp).text
utilise
result:=FieldByName(RetourneChamp).asstring
Je ne pense pas qu'il est necessaire de limité ton 0,333333, c'est déjà géré dans le SQL (je peux me tromper) mais effectivement, il y a une erreur de conversion comme ci "FindChamp1" est de type DOUBLE et que le comparait à un string.
Voici ton code aleger.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| function FindChamp(CDS : TSimpleDataSet ; FindChamp1 : string ; Valeur1 : string ; RetourneChamp : string ;
FindChamp2 : string = '' ; Valeur2 : string = '') : string;
begin
with usersession.DMPrimeur.QryDataFetch do
begin
Active:=False;
Close;
with SQL do
begin
Clear;
Add('select '+RetourneChamp+' from PR0050');
Add(' where '+FindChamp1+' = '+quotedstr(Valeur1));
if FindChamp2 <> '' then
Add(' and '+FindChamp2+' = '+quotedstr(Valeur2));
end;
Open;
if (RecordCount < 1) then
result := '' else
try
result:=FieldByName(RetourneChamp).asstring;
except
result:='';
end;
Close;
end;
end; |
En définitif, vérifie que FindChamp1 et FinChamp2 sont bien de type STRING (VARCHAR).
Partager