Problème de requête

Résolu
pseudoOM Messages postés 173 Date d'inscription jeudi 3 février 2005 Statut Membre Dernière intervention 30 janvier 2009 - 10 mars 2005 à 09:57
pseudoOM Messages postés 173 Date d'inscription jeudi 3 février 2005 Statut Membre Dernière intervention 30 janvier 2009 - 11 mars 2005 à 09:08
Bonjour à tous ! J'ai un problème que j'aimerais résoudre très rapidement. En fait j'ai fais une ADOQuery qui contient ceci :
UPDATE table
SET nombre=:nbr, retour=:r
WHERE numero=:num

nbr est un integer, retour un booléen, et numero un integer.

Dans mon code j'ai :
Procedure Form1.Button1Click
ADOQuery.close;
ADOQuery.Parameters[0].value:=StrToInt(DBEdit1.Text);
ADOQuery.Parameters[1].value:=DBCheckBox1.Checked;
ADOQuery.Parameters[2].value:=StrToInt(DBText1.Caption);
ADOQuery.ExecSQL;

Retour prend la valeur d'une case à cocher (DBCheckBox). Le problème est le suivant : la requête fonctionne très bien mais une seule fois. Les fois suivantes le message suivant s'affiche : "Type incompatible dans l'expression du critère".
Je ne sais absolument pas à quoi c'est dû et si je ferme le programme et que je le relance cela refonctionne mais encore pour une seule fois !
Alors si quelqu'un à déjà eu le problème ou connait la solution, merci de m'aider

pseudoOM

3 réponses

pseudoOM Messages postés 173 Date d'inscription jeudi 3 février 2005 Statut Membre Dernière intervention 30 janvier 2009 1
11 mars 2005 à 09:06
Merci pour l'aide mais cela ne fonctionne pas ! Il m'envoit un message du genre "Type de données incompatible". Mais pas de panique j'ai trouvé la solution :

Procedure Form1.Button1Click(Sender: TObject);
var
nbr, numero, retour: string;
begin
retour:= BoolToStr(DBCheckBox1.Checked);
nbr:=DBEdit1.EditText;
numero:=DBText1.Caption;
DataModule1.ADOQuery.Close;
with DataModule1.ADOQuery do
begin
with SQL do
begin
Clear;
Add('UPDATE nomdetable');
Add('SET nombre ='+nbr+', rentre='''+retour+'''');
Add('WHERE num='+numero);
end;
ExecSQL;
end;
end;

pseudoOM
3
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 33
10 mars 2005 à 18:11
Remplace :
ADOQuery.Parameters[1].value:=DBCheckBox1.Checked;

par :
ADOQuery.Parameters[1].value:=QuotedStr(BoolToStr(BDBCheckBox1.Checked, True));

Explication :
BoolToStr renvoie une chaine lorsque le second paramètre est True, sinon renvoie 0 ou 1 selon la valeur du premier argument.
Dans la requête, il faut mettre les valeurs booléennes en guillemets. C'est ce que fait la fonction QuotedStr au final.


<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
http://www.croix-rouge.fr/index/partner_campagne.html
0
pseudoOM Messages postés 173 Date d'inscription jeudi 3 février 2005 Statut Membre Dernière intervention 30 janvier 2009 1
11 mars 2005 à 09:08
Encore une petite question qui n'a rien à voir : à quoi servent les points que l'on accumule chaque jour sur le site ?

pseudoOM
0
Rejoignez-nous