Base de données SQL

[Résolu/Fermé]
Signaler
Messages postés
21
Date d'inscription
mardi 10 décembre 2013
Statut
Membre
Dernière intervention
14 septembre 2017
-
 Mutumbo -
Bonjour a tous,

j'ai crée une suite de macro excel qui me permettent d'extraire des données sur différentes périodes.
Le seul probleme c'est que je ne peux effectuer qu'une seul requete, si j'en execute une autre l'erreur suivante apparait
Erreur d'execution '-2147417848 (80010108)'
Erreur automation
l'objet invoqué c'est deconnecté de ses clients

Voici le code, si quelqu'un a une solution merci
(la partie souligné correspond au bout de code qui bug)


Sub Pression_BàV()
'
' Pression_BàV Macro
'
Raz 'efface les données précédentes
'
' Requete ODBC
Sheets("PressionBaV").Select
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"ODBC;DSN=supervision_l2;", Destination:=Range("PressionBaV!$A$1")).QueryTable

.CommandText = Array( _
"SELECT process_0.fchmitimestamp, process_0.P_BAV, process_0.T_BAV" & Chr(13) & "" _
& Chr(10) & "FROM supervisionl2.process process_0" & Chr(13) & "" _
& Chr(10) & "WHERE (process_0.fchmitimestamp>={ts '" _
& CStr(Format(Date - nb_jour, "yyyy-mm-dd")) & " 00:00:00'})" _
)
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = _
"pression_et_temperature_boite_a_vent"
.Refresh BackgroundQuery:=False
End With

'format
Columns("A").Select 'Je selectionne la colonne A
Selection.NumberFormat = "m/d/yyyy h:mm" 'je change le format de la colonne A en date
Columns("B:C").Select 'Je selectionne les colonnes B a H
Selection.NumberFormat = "General" 'je change le format des colonnes B a H en standard

' Création du graphique
Sheets("Carte-de-controle-BaV").Select
ActiveChart.SetSourceData Source:=Sheets("PressionBaV").Range( _
"pression_et_temperature_boite_a_vent#All")

End Sub


Sub Raz()

'effacement des anciennes donées Pression BàV
Sheets("PressionBaV").Select
Cells.Select
Selection.Delete Shift:=xlUp
Sheets("Parametres").Select

End Sub

Function nb_jour() As Integer
'
' Determiner quel jour on est
'
Dim queljour As String 'Je definit une variable nomé queljour de type string
queljour = Format(Date, "dddd") 'J'assigne a la variable queljour le jour en cours
If queljour = "lundi" Then 'si la variable queljour = lundi alors
nb_jour = 3 'j'attribue 3 à la fonction nb_jour
Else ' sinon
nb_jour = 1 'j'attribue 1 à la fonction nb_jour
End If 'fin de la boucle

End Function
Sub enregistre()
'
'enregistre la periode choisi par l'utilisateur

debut
fin

End Sub

Function debut() As Date
'
'determiner la periode du rapport
'
Dim X As String
X = Sheets("Parametres").Range("E10") & " " & Sheets("Parametres").Range("F10") & " " & Sheets("Parametres").Range("G10")
debut = CDate(X)

End Function

Function fin() As Date
'
'determiner la periode du rapport
'
Dim Y As String
Y = Sheets("Parametres").Range("E12") & " " & Sheets("Parametres").Range("F12") & " " & Sheets("Parametres").Range("G12")
fin = CDate(Y)

End Function

Function filtreinf() As String
'
'determiner le filtre SQL
'
If Feuil6.OptionButton2.Value = True Then
filtreinf = CStr(Format(debut, "yyyy-mm-dd")) 'convertie la date en format texte
Else
filtreinf = CStr(Format(Date - nb_jour, "yyyy-mm-dd")) 'convertie la date en format texte
End If

End Function
Function filtresup() As String
'
'determiner le filtre SQL
'

If Feuil6.OptionButton2.Value = True Then
filtresup = CStr(Format(fin, "yyyy-mm-dd")) 'convertie la date en format texte
Else
filtresup = CStr(Format(Now, "yyyy-mm-dd")) 'convertie la date en format texte
End If

End Function

1 réponse

Salut.

Pour chaque requête tu dois ouvrir un canal qui se ferme après avoir renvoyé le résultat.
Je ne peux pas t'aider davantage.

Personnellement j'utilise ADODB
Pour chaque requête je créé un "New ADODB.Recordset"
suivi d'un Sql_Query.Open pour formuler la requête.