Activé la requet SQL avec du VBA
Bonjour à tous
Je souhaiterai mettre une requet SQL (déjà faite et fonctionnelle )dans du VBA afin de pouvoir aller chercher ma base de données en automatique ?
Avez vous des pistes ......
D'avance merci
Bonjour,
Oui, on peux indiquer des pistes. Mais il faudrait d'abord connaitre le support de la base : Access?, Dbase? MySql? Sql-Server? Oracle?
Pierre
Bonjour pierre ,
Merci de prendre le temps de me répondre
le support de base : MYSQL
ci dessous la requet en question
SELECT t.id as id_statut,a.id,t.libelle as statut,DATE_FORMAT(date_cloture,'%d-%m-%Y %H:%i') as DateCloture
,revendeur,u1.Prenom as Declenche_Prenom,u1.Nom as Declenche_Nom,u2.Prenom as Suivi_Prenom,u2.Nom as Suivi_Nom
,a.telephone,l.enseigne,code_orma,telephone_appel,code_orma_modif_clot,telephone_2
FROM att a,att_typecloture t,utilisateurs u1, utilisateurs u2,att_livraison l
WHERE t.id = a.statut
AND a.statut > -1
AND (
( t.id BETWEEN 5 AND 9 ) OR t.id = 12 OR t.id = 13
)
AND u1.UserId = a.declenche_par
AND u2.UserId = a.suivi_par
AND a.id = l.att_id
AND a.date_create BETWEEN '2019-01-01 00:00:00' AND '2019-01-31 23:59:59'
ORDER BY date_cloture DESC
Ok,
Pour une base Mysql, d'abord un script de connexion et de déconnexion (en renseignant utilement les parties "perso" (adresse_serveur, nom_de_la_base, identifiant, mot_de_passe) :
Public Cnx As Object, Rst As Object
Sub Connect_MySql(Optional x As Byte)
Dim Db As String
Set Cnx = CreateObject("ADODB.Connection")
Cnx.Provider = "MSDASQL"
With Sheets("config")
Db = "DRIVER={MySQL ODBC 5.1 Driver};" & _
"SERVER= adresse_serveur;" & _
"DATABASE= nom_de_la_base;" & _
"USER= identifiant;" & _
"PASSWORD= mot_de_passe;" & _
"Option=3"
End With
Cnx.Open Db
Set Rst = CreateObject("ADODB.Recordset")
End Sub
Sub Close_Cnx(Optional x As Byte)
On Error Resume Next
If x > 0 Then Rst.Close
Cnx.Close
Set Cnx = Nothing
Set Rst = Nothing
End Sub
Ensuite pour un SELECT (dont le résultat est ici collé en "Feuil1"), on écrit une procédure du genre :
Sub Lire()
Dim Req As String, T As Variant
On Error GoTo errhdlr
Connect_MySql
Req = "SELECT t.id as id_statut,a.id,t.libelle as statut, " & _
" DATE_FORMAT(date_cloture,'%d-%m-%Y %H:%i') as DateCloture, " & _
" revendeur,u1.Prenom as Declenche_Prenom,u1.Nom as Declenche_Nom, " & _
" u2.Prenom as Suivi_Prenom,u2.Nom as Suivi_Nom,a.telephone, " & _
" l.enseigne,code_orma,telephone_appel,code_orma_modif_clot,telephone_2 " & _
" FROM att a,att_typecloture t,utilisateurs u1, utilisateurs u2,att_livraison l " & _
" WHERE T.ID = a.statut " & _
" AND a.statut > -1 " & _
" AND (( t.id BETWEEN 5 AND 9 ) OR t.id = 12 OR t.id = 13) " & _
" AND u1.UserId = a.declenche_par " & _
" AND u2.UserId = a.suivi_par " & _
" AND a.id = l.att_id " & _
" AND a.date_create BETWEEN '2019-01-01 00:00:00' AND '2019-01-31 23:59:59' " & _
" ORDER BY date_cloture DESC "
Rst.Open Req, Cnx
If Not (Rst.EOF And Rst.BOF) Then
Rst.MoveFirst
T = Rst.GetRows
With Sheets("Feuil1")
.Range("A1").Resize(UBound(T, 2) + 1, UBound(T, 1) + 1) = Application.Transpose(T)
End With
End If
Close_Cnx
Exit Sub
errhdlr:
Close_Cnx
MsgBox "Lire - Erreur " & Err.Number & vbCrLf & Err.Description
End Sub
Pierre