[Access][ADODB] Petit soucis avec les BOF et EOF

Petit soucis avec les BOF et EOF [Access][ADODB] - SQL/NoSQL - Programmation

Marsh Posté le 18-05-2004 à 16:00:17    

Bonjour,
 
Une petite question pour agrementer votre apres-midi :
 
Voici le code que j'ai tape.

Code :
  1. Dim Conn As New ADODB.Connection
  2.     Dim cnn As New ADODB.Command
  3.     Dim rs As New ADODB.Recordset
  4.     'open connection
  5.    
  6.     Conn.Open "Provider = Microsoft.jet.OLEDB.4.0 ; data source = C:\temp\Lebowski\Hours Project\Projet\TablesLink.mdb"
  7.    
  8.     'record parameters and open recordset
  9.     Set cnn.ActiveConnection = Conn
  10.     cnn.CommandType = adCmdText
  11.     cnn.CommandText = "SELECT employee FROM employee" //une requete au hasard
  12.     Set rs = cnn.Execute
  13.     With rs
  14.         Do Until .EOF
  15.         Affichage.Caption = rs.GetString
  16.         .MoveNext
  17.         Loop
  18.     End With


Des que je l'execute, rien ne se passe (alors que j'aimerais bien avoir la liste des employers).
Si par hasard j'enleve le bloc :

Code :
  1. With rs
  2.         Do Until .EOF
  3.         Affichage.Caption = rs.GetString
  4.         .MoveNext
  5.         Loop
  6.     End With


Il m'affiche une erreur 3021 (Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record).
'oila, 'oila, si quelqu'un peut m'expliquer (ou a defaut corriger) ce petit bout de code, j'en serai au comble de ma bonne humeur.
 
D'avance, merci beaucoup.
 
Lebowski
 
PS : Romania, Trezeste-te (c'est du roumain...)


Message édité par lebowski le 18-05-2004 à 16:02:22
Reply

Marsh Posté le 18-05-2004 à 16:00:17   

Reply

Marsh Posté le 19-05-2004 à 10:22:24    

Bonjour,
 
Voila, j'obtiens toujours le meme probleme. Apres creation des connexions et definition du recordset, voici ce que j'ai tape pour tenter de recuperer ce qu'il y a dans le recordset :

Code :
  1. 'le recordset est rs
  2.     If rs.EOF Then
  3.         MsgBox "EOF"
  4.     Else
  5.     If rs.BOF Then
  6.         MsgBox "BOF"
  7.     Else
  8.     Do While Not rs.EOF
  9.         MsgBox rs("employee.FIRST_NAME" )
  10.     Loop
  11.     End If
  12.     End If
  13.    
  14.     Affichage.Caption = rs.GetString


Des que ce code est execute, il m'affiche "EOF", et ensuite le meme message d'erreur vu precedemment (ce qui parait assez logiquem compte tenu du message "EOF" ).
Quel en est la raison ? Mon recordset est vide ? Je suis arrive a la fin du recordset et il faut que lui precise d'aller au debut ?
 
Voila quelques interrogations existentielles qui mettent bien a mal ma conscience.
 
Merci d'avance.
 
Lebowski

Reply

Marsh Posté le 23-10-2004 à 00:22:07    

Bonsoir,
 
Le problème est que vous ne pouvez pas accéder à la valeur d'un champ si la recordset est vide ou que le pointeur de recordset a atteint une limite (EOF ou BOF à True).
 
Le problème dans le premier Algo vient de la boucle "Do Until", même si le recordset est vide, il fera un tour de boucle, c'est dans la structure. En revanche dans le second exemple vous tester votre recordset, mais vous accedez à la valeur du champ en ligne 15 et vous obtenez une erreur. Je vous conseille la structure suivante :  
With rs  
    While Not .EOF  
        Affichage.Caption = rs.GetString  
        .MoveNext  
    Wend
End With  
 
Elle offre l'avantage de tester d'abord l'état de la condition (Not .Eof) donc si le recordset est vide, vous n'entrerez pas dans la boucle.
 
Voilà

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed