Error creating cursor handle

Résolu
bou1024 Messages postés 26 Date d'inscription lundi 16 juin 2003 Statut Membre Dernière intervention 3 janvier 2008 - 10 févr. 2005 à 12:13
Dvdmizo Messages postés 74 Date d'inscription jeudi 6 mars 2003 Statut Membre Dernière intervention 3 mai 2006 - 13 juin 2005 à 17:09
Bonjour,

Lorsque je fais une requête d'insertion sur ma base de données, mon programme me renvoie l'erreur : "Error creating cursor handle". En revanche ma requête a fonctionnée, j'ai bien ma ligne dans la base.

J'utilise Borland C++ Builder v6 et Access

Merci !

5 réponses

Dvdmizo Messages postés 74 Date d'inscription jeudi 6 mars 2003 Statut Membre Dernière intervention 3 mai 2006
10 févr. 2005 à 12:26
salut,



met nous un bout de code histoire de voir comment tu fais ....

mais je pense avoir une petite idée de ton problème.

tu dois probablement utiliser les composants BDE (genre TQuery) et faire :



Query1->Open() ;



pour effectuer un "Select" il faut en effet utiliser :



Query1->Open() ;



car le composant TQuery en profite pour allouer la mémoire necessaire
pour recevoir le resultat de ta requete, or pour effectuer une requete
de modification (Insert, Update, Delete) il faut utiliser :



Query1->ExecSQL() ;


car aucun "résultat" de requete n'est renvoyé (d'où le message d'erreur
lorsqu'il essaye de créer un handle de curseur vers le resultat)



j'espère t'avoir aidé.


DvdMizo
3
bou1024 Messages postés 26 Date d'inscription lundi 16 juin 2003 Statut Membre Dernière intervention 3 janvier 2008
10 févr. 2005 à 12:32
Merci beaucoup, c'est exactement ça !
0
blackraven96 Messages postés 2 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 9 juin 2005
9 juin 2005 à 10:29
tu peux me montrer ton code source pour que je puisse voir comment on fait pour executer une requete SQL car je n'y arrive pas . merci.
0
Dvdmizo Messages postés 74 Date d'inscription jeudi 6 mars 2003 Statut Membre Dernière intervention 3 mai 2006
13 juin 2005 à 17:07
on va prendre un exemple simple, si tu as une table qui s'appelle 'Contact' avec 3 champs :



- Nom (chaine)

- Prenom (chaine)

- Age (entier)


il faut :

un composant TQuery avec comme nom Query1 (par exemple)

ta requete va se présenter comme ça :



void fonction_quelconque_qui_fait_la_requete(void)

{

AnsiString Nom, Prenom ;

int Age ;

Query1->Close() ; // on s'assure que la connexion est fermée

Query1->SQL->Clear() ; // on s'assure que la requete est bien vide

Query1->SQL->Add("Select * from Contact") ; // on ajoute une requete qui







// va selectionner tous les







// enregistrements de la table



if(Query1->RecordCount) // si on a des résultats

{

Query1->First() ;
// on se place sur le premier enregistrement du
résultat


while(!Query1->EOF) // tant qu'on a pas atteint la fin
des résultats

{

Nom =
Query1->FieldByName("Nom")->AsString ; // On récupère le nom

Prenom =
Query1->FieldByName("Prenom")->AsString ; // On récupère le prénom

Age =
Query1->FieldByName("Age")->AsInteger ; // On récupère l'age



// .....

// on fait ce qu'on veut avec les valeurs de cet enregistrement

//......




Query1->Next() ; // on passe à l'enregistrement suivant

}

}

}



voilà en gros l'idée, j'espère que tu y trouveras ton bonheur ;)


DvdMizo
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Dvdmizo Messages postés 74 Date d'inscription jeudi 6 mars 2003 Statut Membre Dernière intervention 3 mai 2006
13 juin 2005 à 17:09
pfff alors moi je suis trop fort j'ai oublié le plus important !!!

honte à moi lol

désolé, je reposte



void fonction_quelconque_qui_fait_la_requete(void)

{

AnsiString Nom, Prenom ;

int Age ;

Query1->Close() ; // on s'assure que la connexion est fermée

Query1->SQL->Clear() ; // on s'assure que la requete est bien vide

Query1->SQL->Add("Select * from Contact") ; // on ajoute une requete qui







// va selectionner tous les







// enregistrements de la table



Query1->Open() ; // on execute la requete



if(Query1->RecordCount) // si on a des résultats

{

Query1->First() ;
// on se place sur le premier enregistrement du
résultat

while(!Query1->EOF) // tant qu'on a pas atteint la fin des résultats

{

Nom =
Query1->FieldByName("Nom")->AsString ; // On récupère le nom

Prenom =
Query1->FieldByName("Prenom")->AsString ; // On récupère le prénom

Age =
Query1->FieldByName("Age")->AsInteger ; // On récupère l'age



// .....

// on fait ce qu'on veut avec les valeurs de cet enregistrement

//......




Query1->Next() ; // on passe à l'enregistrement suivant

}

}

}


DvdMizo
0
Rejoignez-nous