Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2946 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  D'une requête SQL au VBA

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

D'une requête SQL au VBA

n°1689505
Fabrice762​7
Posté le 20-02-2008 à 17:25:30  profilanswer
 

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.

mood
Publicité
Posté le 20-02-2008 à 17:25:30  profilanswer
 

n°1689683
billgatesa​nonym
Posté le 20-02-2008 à 20:31:42  profilanswer
 

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


n°1689702
Fabrice762​7
Posté le 20-02-2008 à 20:53:53  profilanswer
 



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.
 

n°1690323
Fabrice762​7
Posté le 21-02-2008 à 18:45:13  profilanswer
 

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.

n°1690367
Fabrice762​7
Posté le 21-02-2008 à 21:01:33  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  D'une requête SQL au VBA

 

Sujets relatifs
[VB/VBA/VBS] Excel vba et Windows 64 bit: problème de shell ?Requete simultanee sur 2 tables
Fonction SQL tte simpleTimer VBA < 1s
[Résolu]Sélectionner mes zones de texte avec VBA pour excel[SQL server] Transferer une base SQL sharepoint sur un nouveau serveur
EXCEL VBA - Addition de cellule et de variable ![SQL] Besoin d'aide pour un Update
Problème Requete SQL 
Plus de sujets relatifs à : D'une requête SQL au VBA


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR