Microsoft Excel

Herbers Excel/VBA-Archiv

ODBC Requery

Betrifft: ODBC Requery von: Kaios
Geschrieben am: 06.09.2014 11:35:26

Hallo zusammen,

ich habe eine kleine Frage.

Ich verbinde mich via OLEDB per Excel zu einer SQL Datenbank. Ein Makro frägt Daten ab und verarbeitet diese.
Die SQL Abfrage lasse ich aus Ranges einlesen, die Kriterien der Abfrage ändern sich bei jeder Abfrage, das ist auch mein Problem. Kann ich eine Refreshperiod setzen die jedes mal die SQL Abfrage neu einliest?

Hier mein Code:

varConn = "OLEDB;Provider=MSDAORA.1;Password=0815;User ID=4711;Data Source=0815:1521/0815db"


 strSQL = Range("Z1").Value & vbCrLf & _
        Range("Z2").Value 

             With ActiveSheet.QueryTables.Add(Connection:=varConn, Destination:=Range("A1"))
             .CommandText = strSQL
             .Name = "0815"
             .Refresh BackgroundQuery:=True
             .RefreshPeriod = 1        
         End With
Danke!

Grüße
Kaios

  

Betrifft: AW: ODBC Requery von: fcs
Geschrieben am: 08.09.2014 11:52:50

Hallo Kaios,

eine regelmäßige Aktualisieren der Abfrage inkl. Anpassung des CommandTextes könnte wie folgt per OnTime-Methode funktionieren. Allerdings sollte die Abfrage selber dann keine Automatische Aktualisierung haben.

Beachte auch, dass die sich ständig wiederholende Ontim-Anweisung vor dem Schließen der Datei gestoppt werden muss.

Gruß
Franz

'Code in einem allgemeinen Modul
Option Explicit
Public datNextQuery As Date

Sub StartQuery_Update()
    datNextQuery = Now + TimeSerial(Hour:=0, Minute:=1, Second:=0)
    Application.OnTime Earliest:=datNextQuery, Procedure:="QueryTable_CommandText_neu"
    Call QueryTable_CommandText_neu
End Sub


Sub StopQuery_Update()
    On Error Resume Next
    Application.OnTime Earliest:=datNextQuery, Procedure:="QueryTable_CommandText_neu"
End Sub

Sub QueryTable_CommandText_neu()
  Dim Wks As Worksheet, objQT As QueryTable, strSQL As String
  Set Wks = ThisWorkbook.Worksheets("Tabelle1")
  With Wks
    Set objQT = .QueryTables(1) 'Nr ggf anpasen oder durch Namen in Anführungszeichen ersetzen
'oder wenn Daten als Tabelle/Liste dargestellt werden
    Set objQT = .ListObjects(1).QueryTable 'Nr ggf anpasen oder durch Namen in Anfü _
hrungszeichen ersetzen
    strSQL = .Range("Z1").Value & vbCrLf & .Range("Z2").Value
  End With
  With objQT
      .CommandText = strSQL
      .Refresh False
  End With
End Sub



  

Betrifft: AW: ODBC Requery von: Kaios
Geschrieben am: 08.09.2014 17:53:25

Hallo Franz,

vielen Dank! Damit kann ich was anfangen. Werde mir das Teil entsprechend umbauen.

Grüße

Kaios