09-22-2010 09:25 AM
Bonjour,
j'utilise sous Labwindows le SQL Toolkit.
Je fais une requete sur une table avec DBActivateSQL, et quelque fois, lorsque je passe à l'enregistrement suivant avec DBFetchNext, j'ai le message suivant :
Automation error code -21473352566 En dehors de la plage actuelle.
Je ne comprends pas pourquoi j'obtiens cette erreur, et je ne sais pas où chercher pour résoudre le problème.
Merci pour votre aide,
Cordialement,
Benjamin
09-22-2010 09:51 AM
Sorry, in english it's better ...
So I'm programming with Labwindows and SQL Toolkit. Sometimes, I have a problem with a query when I execute the function DBFetchNext, I have the error message : "Automation error code -21473352566 En dehors de la plage actuelle."
I have no idea where the problem comes from, and I don't know where found help to resolve this problem.
Thanks a lot.
Benjamin
09-22-2010 11:58 AM - edited 09-22-2010 11:58 AM
Bonjour,
Si vous utilisez la fonction (DBFetchNext) alors que il n’a pas d’autres enregistrements retourné par la requête tu aura ce type de message d'erreur pour cela il faut recupérer le nombre des enregistrement avant de lancer cette fonction et reboucler au bien tu dois boucler de la manière suivante ;
……
while ((resCode = DBFetchNext (hstmt)) == DB_SUCCESS)
{
……
}
si tu veux tu peux mettre votre code ici ca peut etre plus pratique pour nous aider à diagnostiquer votre problème.
Cordialement.
Tawfik
09-23-2010 04:19 AM
Bonjour,
J'utilise bien une boucle comme celle ci. Cependant, j'obtiens ce message d'erreur alors qu'il reste des enregistrements dans la requête.
Mon code est celui ci :
//Connexion à la base ghdbc = DBConnect (dsnName); if (ghdbc <=0) { errorString = DBErrorMessage (); MessagePopup(ERREUR, MESS_ERREUR_CONNECTION_BDD); return -2; } //Recherche de l'index du dernier enregistrement sprintf(strQueryLastRecord,"SELECT MAX(Num_INDEX) FROM Alarmes"); hstmt = DBActivateSQL(ghdbc, strQueryLastRecord); resCode = DBBindColInt (hstmt, 1, &iIndMax, &sNumStatus); resCode = DBFetchNext(hstmt); resCode = DBDeactivateSQL(hstmt); DBDisconnect(ghdbc); sprintf(strQuery,"SELECT * FROM (SELECT * FROM Alarmes a WHERE a.Num_INDEX BETWEEN %i AND %i) b",max(0,iIndMax-10000), iIndMax); ghdbc_ra = DBConnect (dsnName); if (ghdbc_ra <=0) { errorString = DBErrorMessage (); MessagePopup(ERREUR, MESS_ERREUR_CONNECTION_BDD); return -2; } hstmt_ra = DBActivateSQL(ghdbc_ra, strQuery); resCode = DBBindColChar (hstmt_ra, 2, 15, strType, &sNumStatus, ""); resCode = DBBindColChar (hstmt_ra, 3, 15, Etat, &sNumStatus, ""); resCode = DBBindColChar (hstmt_ra, 4, 90, Message, &sNumStatus, ""); resCode = DBBindColChar (hstmt_ra, 5, 90, Message2, &sNumStatus, ""); resCode = DBBindColChar (hstmt_ra, 6, 20, Date, &sNumStatus, "dd/mm/yyyy hh:mm:ss"); resCode = DBBindColInt (hstmt_ra, 7, ImageRef, &sNumStatus); resCode = DBBindColInt (hstmt_ra, 8, Turb,&sNumStatus); resCode = DBFetchNext(hstmt_ra); while (resCode == 0 && compt < MAX_ALARMES_AFFICHEE) { ....... resCode = DBFetchNext(hstmt_ra); compt++; }
Merci pour votre aide
09-23-2010 05:43 AM
Bonjour,
j'ai modifié votre source,tu peux l'essayer et voir si ca marche ?
//Connexion à la base ghdbc = DBConnect (dsnName); if (ghdbc <=0) { errorString = DBErrorMessage (); MessagePopup(ERREUR, MESS_ERREUR_CONNECTION_BDD); return -2; } //Recherche de l'index du dernier enregistrement sprintf(strQueryLastRecord,"SELECT MAX(Num_INDEX) FROM Alarmes"); hstmt = DBActivateSQL(ghdbc, strQueryLastRecord); resCode = DBBindColInt (hstmt, 1, &iIndMax, &sNumStatus); resCode = DBFetchNext(hstmt); resCode = DBDeactivateSQL(hstmt); DBDisconnect(ghdbc); sprintf(strQuery,"SELECT * FROM (SELECT * FROM Alarmes a WHERE a.Num_INDEX BETWEEN %i AND %i) b",max(0,iIndMax-10000), iIndMax); ghdbc_ra = DBConnect (dsnName); if (ghdbc_ra <=0) { errorString = DBErrorMessage (); MessagePopup(ERREUR, MESS_ERREUR_CONNECTION_BDD); return -2; } hstmt_ra = DBActivateSQL(ghdbc_ra, strQuery); resCode = DBBindColChar (hstmt_ra, 2, 15, strType, &sNumStatus, ""); resCode = DBBindColChar (hstmt_ra, 3, 15, Etat, &sNumStatus, ""); resCode = DBBindColChar (hstmt_ra, 4, 90, Message, &sNumStatus, ""); resCode = DBBindColChar (hstmt_ra, 5, 90, Message2, &sNumStatus, ""); resCode = DBBindColChar (hstmt_ra, 6, 20, Date, &sNumStatus, "dd/mm/yyyy hh:mm:ss"); resCode = DBBindColInt (hstmt_ra, 7, ImageRef, &sNumStatus); resCode = DBBindColInt (hstmt_ra, 8, Turb,&sNumStatus); //resCode = DBFetchNext(hstmt_ra); compt = 0; while ( (DBFetchNext(hstmt_ra) == 0) && (compt < MAX_ALARMES_AFFICHEE)) { ....... resCode = DBFetchNext(hstmt_ra); compt++; }
Cordialement.
Tawfik