Problème Handle avec TQuery + DELETE.

Résolu
scan05 Messages postés 5 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 25 novembre 2004 - 16 nov. 2004 à 17:08
scan05 Messages postés 5 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 25 novembre 2004 - 18 nov. 2004 à 17:33
Salut,

Alors j'ai un piti problème: EnoResultSet "Erreur de la création du handle de curseur" lorsque j'active ma TQuery avec Active à True. Dont voici le Code:

procedure TForm13.BitBtn2Click(Sender: TObject);
var
rep2 : integer;

begin
rep2 := messagebox(form13.handle,'Voulez-vous effacer cette fiche?','Attention...',MB_OKCANCEL);
if rep2 = 1 then
begin
QDelLoc.SQL.Clear;
Label14.Caption := idfiche;
QDelLoc.SQL.Add('DELETE FROM location WHERE id_fiche=''+idfiche+''');
QDelLoc.ExecSQL;
QDelLoc.Active := true;
end;
end;

------------
- "idfiche" est un string et je vérifie si il a la bonne valeur en le mettant dans Label14.

- j'ai une autre TQuery qui fait un SELECT pour joindre la table "fiche" a la table "location" puis "client" afin d'afficher le client par rapport à une référence de fiche entrée. La table "location" est une assotiation.

- puis une autre jointure de la table "article","exemplaire" puis "location", pour afficher les exemplaires et les article correspondant aux exemplaires.

Tout fonctionne nikel! J'ai utilisé jusqu'a présent des Dataset.Delete pour effacer un seul élément, mais la je veux effacer plusieurs élements donc j'utilise le DELETE de SQL mais j'ai donc ce problème de Handel !!!

Merci d'avance pour votre aide!!!!

4 réponses

tjtoz92 Messages postés 8 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 30 novembre 2004
17 nov. 2004 à 17:00
je comprend pas pkoi mon dernier message apparait 2 fois mais bon!

Pour te répondre sincerement je ne pense pas que le probleme vienne de l'objet query que tu manipule.
Même s'il ne fait rien tu n'as pas d'erreur donc ce n'est pas un probleme provenant du query.
Ensuite verifie ta requete, car là tu ne DELETE RIEN!!!! Si tu veux supprimer une fiche avec son ID N'oubli pas de faire un DELETE * From....

Mais il serait plus propre de proceder autrement:

procedure TForm13.BitBtn2Click(Sender: TObject);
var
rep2 : integer,;
Querystring:string;

begin
rep2 := messagebox(form13.handle,'Voulez-vous effacer cette fiche?','Attention...',MB_OKCANCEL);
if rep2 = 1 then
begin
QDelLoc.SQL.Clear;
Label14.Caption := idfiche;
Querystring:=('DELETE* FROM location Where id_fiche=%s')
QDelLoc.sql.text:=Format(Querystring,[QuotedStr(idfiche)]);
QDelLoc.ExecSQL;
end;
end;

Verifie bien que ton id_fiche est bien de type string, sinon tu fait la mm chose sauf qu'à la place du %s tu fais %d
bonne chance!!!
3
tjtoz92 Messages postés 8 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 30 novembre 2004
17 nov. 2004 à 09:55
c'est parfaitement logique, puisque tu execute en fait 2 fois ta requete
avec ton exec et avec ton active.
Essai plutot:

procedure TForm13.BitBtn2Click(Sender: TObject);
var
rep2 : integer;

begin
rep2 := messagebox(form13.handle,'Voulez-vous effacer cette fiche?','Attention...',MB_OKCANCEL);
if rep2 = 1 then
begin
QDelLoc.SQL.Clear;
Label14.Caption := idfiche;
QDelLoc.SQL.Add('DELETE .....');
QDelLoc.SQL.Add('FROM location);
QDelLoc.SQL.Add('WHERE id_fiche=''+idfiche+''');
QDelLoc.ExecSQL;

end;
end;
0
scan05 Messages postés 5 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 25 novembre 2004
17 nov. 2004 à 10:31
Merci Tjtoz92 pour ta réponse, mais dans l'énérgie du désespoir j'avai ajouté le:

QDelLoc.Active := True;

car en effet le code sans le active (celui que tu m'as conseilé) ne fait RIEN... aucune occurence est effacée, aucun plantage... RIEN !
Alors je me demande, vue que je veux faire un "DELETE FROM" sur des tables (déja une pour commencer) qui sont concernés par deux jointures, je me dis peut etre qu'il faudrait voir plutot au niveau d'un parametre des TQuery des jointures....
J'ai essayé de faire des Refresh des TQuery mais rien....

Merci pour votre aide !

PS: je précise que idfiche est une var globale et qu'elle fonctionne! ;)
0
scan05 Messages postés 5 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 25 novembre 2004
18 nov. 2004 à 17:33
Merci bcp pour l'aide!!!

En effet le problème vennait du faite que ma requette etait basée sur un parametre String et que telle que je l'ecrivais elle etais mal intérprété, alors que sur un Integer ca marchait nikel.....

merci merci !!!
0
Rejoignez-nous