D'une requête SQL au VBA

D'une requête SQL au VBA - SQL/NoSQL - Programmation

Marsh Posté le 20-02-2008 à 17:25:30    

Bonjour à tous,
 
À partir d'une requête que je nommerai X, j'ai écrit le code SQL ci-dessous qui me permet de n'afficher que les 4 derniers enregistrements de ma requête en fonction des dernières dates et heures.
 
SELECT TOP 4 [rqt X].Date, [rqt X].Heure
FROM [rqt X]
ORDER BY [rqt X].Date DESC , [rqt X].Heure DESC;
 
J'ai décidé de construire un formulaire à partir de ma requête X et de lui associer un bouton relié à une procédure événementielle et qui sur un clic n'afficherait que les 4 derniers enregistrement comme avec mon code SQL.
 
Mais voilà, j'ai presque honte de le dire, mais je ne sais pas traduire mon code SQL en langage VBA.
 
Je pense que cela doit être très simple mais je ne sais pas quoi écrire dans mon éditeur VBA.
 
Merci d'avance pour le coup de main donné au néophyte que je suis.
 
Fabrice.

Reply

Marsh Posté le 20-02-2008 à 17:25:30   

Reply

Marsh Posté le 20-02-2008 à 20:31:42    

Ce n'est pas "très simple", car d'une part Access est un produit qui existe depuis pas mal d'années, et qui a eu beaucoup d'évolutions, et ce qui fait qu'il y a souvent plusieurs manière de faire quelques chose, et que chaque façon a ses avantageset ses inconvénients, et d'autre part, que Microsoft a toujours été très mauvais pour documenter le VBA, et le faisant peut-être exprès pour faire payer des stages de formation.
 
Voici une des solutions possibles pour faire un select qui renvoie plusieurs enregistrements :


Dim la_date(4), l_heure(4)
SQL_ligne = "SELECT TOP 4 colonne_date, colonne_heure" & _
            " FROM table_temps " & _
            " ORDER BY colonne_date DESC, colonne_heure DESC" & _
            ";"
' MsgBox (SQL_ligne) ' debug
Set rst = CurrentDb.OpenRecordset(SQL_ligne)
For i = 1 To 4
   If (rst.EOF) Then Exit For
   la_date(i) = rst.colonne_date
   l_heure(i) = rst.colonne_heure
Next
rst.Close


Reply

Marsh Posté le 20-02-2008 à 20:53:53    



Dim la_date(4), l_heure(4)
SQL_ligne = "SELECT TOP 4 colonne_date, colonne_heure" & _
            " FROM table_temps " & _
            " ORDER BY colonne_date DESC, colonne_heure DESC" & _
            ";"
' MsgBox (SQL_ligne) ' debug
Set rst = CurrentDb.OpenRecordset(SQL_ligne)
For i = 1 To 4
   If (rst.EOF) Then Exit For
   la_date(i) = rst.colonne_date
   l_heure(i) = rst.colonne_heure
Next
rst.Close


 
Vraiment merci pour votre réponse explicite.
 
Je dois dire que je cherche la réponse à ce problème depuis quelques jours et donc je me suis inscrit sur plusieurs forums mais c'est la première réponse aussi précise que je reçois de quelqu'un qui comprend enfin ma question.
 
J'essaie votre solution cette nuit et je vous tiens au courant.
 
Cordialement, Fabrice.
 

Reply

Marsh Posté le 21-02-2008 à 18:45:13    

Bonsoir,
 
J'ai essayé votre code :
 


Dim la_date(4), l_heure(4)
SQL_ligne = "SELECT TOP 4 colonne_date, colonne_heure" & _
            " FROM table_temps " & _
            " ORDER BY colonne_date DESC, colonne_heure DESC" & _
            ";"
' MsgBox (SQL_ligne) ' debug
Set rst = CurrentDb.OpenRecordset(SQL_ligne)
For i = 1 To 4
   If (rst.EOF) Then Exit For
   la_date(i) = rst.colonne_date
   l_heure(i) = rst.colonne_heure
Next
rst.Close


 
Malheureusement impossible de le faire fonctionner. Je me suis dit qu'il manquait peut-être des déclarations de variable et je l'ai transformé ainsi :
 

Private Sub cmd4Premiers_Click()
Dim la_date(4), l_heure(4)
Dim rst As DAO.Recordset  
Dim strSQL As String  
strSQL = "SELECT TOP 4 [Date], [Heure]" & _  
            " FROM [Ma_table] " & _  
            " ORDER BY [Date] DESC, [Heure]" & _  
            ";"  
' MsgBox (strSQL) ' debug  
Set rst = CurrentDb.OpenRecordset(strSQL)  
For i = 1 To 4  
   If (rst.EOF) Then Exit For  
   la_date(i) = rst. [Date]  
   l_heure(i) = rst. [Heure]  
Next  
rst.Close
End Sub


 
Mais sans plus de résultats.  
 
Voyez-vous le problème ?
 
Cordialement, Fabrice.

Reply

Marsh Posté le 21-02-2008 à 21:01:33    

J'ai trouvé la réponse :
 

Private Sub cmd4Premiers_Click()
Dim StrSql As String
StrSql = " SELECT TOP 4 [Ma_table].Date, [Ma_table].Heure " & _
         " FROM [Ma_table]" & _
         " ORDER BY [Ma_table].Date DESC " & _
         ", [Ma_table].Heure DESC;"
Me.RecordSource = StrSql
End Sub


 
Merci pour votre collaboration, cordialement Fabrice.

Reply

Sujets relatifs:

Leave a Replay

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