LabWindows/CVI

cancel
Showing results for 
Search instead for 
Did you mean: 

Sql Toolkit : Erreur avec DBFetchNext En dehors de la plage actuelle

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

0 Kudos
Message 1 of 5
(3,651 Views)

 

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

 

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

0 Kudos
Message 2 of 5
(3,650 Views)

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

0 Kudos
Message 3 of 5
(3,638 Views)

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

 

0 Kudos
Message 4 of 5
(3,607 Views)

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

0 Kudos
Message 5 of 5
(3,600 Views)