OVH Cloud OVH Cloud

VBA. Lancer une requête

1 réponse
Avatar
HD
Bonjour,

Je me connecte à une base de donnée et je lance une requête "ReqTps" via ce
script :

With ActiveSheet.QueryTables.Add(Connection:=Array( _
"OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User
ID=Admin;Data Source=\\srv02\tig.mdb;Mode=Share Deny Writ" _
, _
"e;Extended Properties="""";Jet OLEDB:System database="""";Jet
OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine"
_
, _
" Type=5;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial
Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New" _
, _
" Database Password="""";Jet OLEDB:Create System Database=False;Jet
OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Com" _
, _
"pact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet
OLEDB:SFP=False" _
), Destination:=Sheets(TempFeuil).Range("A1"))
.CommandType = xlCmdTable
.CommandText = Array("ReqTps")
.Name = "tig"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.SourceDataFile = dBFic
.Refresh BackgroundQuery:=False
End With

Mais m'est-il possible de lancer dorectement une requête que j'aurais mise
dans le script... Sans faire appel à une requête se trouvant sur la base ?

Merci d'avance pour votre aide.
--
@+
HD

1 réponse

Avatar
MichDenis
Bonjour HD,

Attention, choisir une des 2 connections qui convient à ton environnement.
Renseigner les variables convenablement

'----------------------------------------------------
Sub ExecuterUneRequete()

'Charger la référence suivante :
'Microsoft Activex Data objects 2.6 librairy

Dim Con As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim Com As New ADODB.Command
Dim BaseAccess As String, A As Integer
Dim BaseAccessSecurity As String
Dim Rg As Range

BaseAccess = "C:excelAccessComptoir.mdb"
BaseAccessSecurity = "C:excelAccessMySystem.mdw"

'Pour une connection "conventionnelle" à access
con.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & BaseAccess & ";"

'Pour établir une connexion si tu as une
'base système -> pour la sécurité
'con.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & BaseAccess & ";" & _
"Jet OLEDB:System Database=" & BaseAccessSecurity & _
",myUsername", "myPassword"

Com.ActiveConnection = con
Com.CommandType = adCmdStoredProc

'"ReqDenis2Paramètres"= Nom de ta requête
Com.CommandText = "ReqDenis2Paramètres"
Set Rst = Com.Execute

If Rst.BOF = True And Rst.EOF = True Then
MsgBox "Aucun enregistrement trouvé."
Else
'Détermine où seront copiées les enregistrements
With Worksheets(1) ' À déterminer nom feuille
Set Rg = .Range("A1")
End With
'Copie les en-têtes des champs du recordset
'en première ligne
For a = 0 To Rst.Fields.Count - 1
Rg.Offset(0, a).Value = Rst.Fields(a).Name
Next
'Copie tous les enregistrements vers Excel ...
Rg.Offset(1).CopyFromRecordset Rst
End If
'Libère l'espace mémoire utilisé
Set Rg = Nothing
Rst.Close: con.Close
Set Com = Nothing
Set Rst = Nothing: Set con = Nothing

End Sub
'----------------------------------------------------


Salutations!




"HD" a écrit dans le message de news: e2WM1$
Bonjour,

Je me connecte à une base de donnée et je lance une requête "ReqTps" via ce
script :

With ActiveSheet.QueryTables.Add(Connection:=Array( _
"OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User
ID­min;Data Source=srv02tig.mdb;Mode=Share Deny Writ" _
, _
"e;Extended Properties="""";Jet OLEDB:System database="""";Jet
OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine"
_
, _
" Type=5;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial
Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New" _
, _
" Database Password="""";Jet OLEDB:Create System Databaseúlse;Jet
OLEDB:Encrypt Databaseúlse;Jet OLEDB:Don't Copy Locale on Com" _
, _
"pactúlse;Jet OLEDB:Compact Without Replica Repairúlse;Jet
OLEDB:SFPúlse" _
), Destination:=Sheets(TempFeuil).Range("A1"))
.CommandType = xlCmdTable
.CommandText = Array("ReqTps")
.Name = "tig"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.SourceDataFile = dBFic
.Refresh BackgroundQuery:úlse
End With

Mais m'est-il possible de lancer dorectement une requête que j'aurais mise
dans le script... Sans faire appel à une requête se trouvant sur la base ?

Merci d'avance pour votre aide.
--
@+
HD