Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA und SQLite, Summierung

VBA und SQLite, Summierung
27.11.2019 16:23:50
Matthias
Hallo zusammen und seid gegrüßt,
Mal wieder habe ich ein kniffliges Problem... zu 99% hab ichs gelöst, jetzt steht der Import von SQLite nach Excel über VBA an. Connection steht, Werte kommen... Jedoch nicht wie gewollt.
Hier der Connection Code:

Dim conn As Object, rst As Object
Dim strSQL As String
Set conn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")
Dim strDatei As String
Dim strPfad As String
strPfad = Environ$("USERPROFILE") & "\Desktop\"
strDatei = strPfad & "novatime.s3db"
conn.Open "DRIVER=SQLite3 ODBC Driver;Database=" & strDatei & ""
strSQL = "SELECT * "
rst.Open strSQL, conn, 1, 1
Sheets("Tabelle1").Range("A1").CopyFromRecordset rst
rst.Close
Set rst = Nothing: Set conn = Nothing
Und hier der SELECT:
 SELECT PersNr, Name, DATUM,
ROUND(SUM(	CASE
WHEN substr(IstStd,1,1) IN ('-') AND substr(IstStd,3,1) IN (',', '.') THEN ((substr(IstStd,4, _
2))/60) * '-1' + (substr(IstStd,2,2))
WHEN substr(IstStd,3,1) IN (',', '.')   THEN (substr(IstStd,4,2))/60 + (substr(IstStd,1,2))
ELSE (substr(IstStd,3,2))/60 + (substr(IstStd,1,2))  END ),2) AS IstStd
FROM ARCHIV_JOURNAL WHERE PersNr ='3234' AND Datum BETWEEN '2019-08-01' AND '2019-08-31' ORDER BY Datum

Im Abfragemanager (SQLite Administrator) klappt die Abfrage wunderbar, hau ich diese in VBA rein, nimmt der alle Zahlen als INT, und summiert dann quasi nur die INTs. Nachkommastellen fehlen, und die Summe ist ergo nicht korrekt.
Hintergrund zu dem SQL-Code: Zeiterfassungsdatenbank, total beknackt in meinen Augen. Arbeitet jemand 7h 30m, werden "7,3" in die DB geschrieben. Mit den substr's splitte ich die nachkommastellen, rechne diese in Industrieminuten um, füge sie mit den Stunden wieder zusammen. Mit dem Case fange ich sachen ab, wie: negative stunden, zweistellige zeiten (10h+). Wie gesagt, die Abfrage funktioniert super, nur eben per VBA nicht.
Was habe ich nicht bedacht?
Über jede Hilfe bin ich sehr Dankbar!
Vielen Dank im Voraus und einen schönen Tag euch!
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA und SQLite, Summierung
27.11.2019 16:30:47
peterk
Hallo
Meine Vermutung: Dein Select liefert die Zahl mit "." als Kommatrennzeichen und "verwirrt" dadurch Excel.
Mein Tip: Definiere in Deinem Makro die Komma/Tausender Trennzeichen kurzfristig um, mach das CopyFromRecordset und setze dann wieder zurück.
AW: VBA und SQLite, Summierung
27.11.2019 16:44:29
Matthias
Hallo peterk,
Erstmal Danke für die Antwort.
mit

With Application
.DecimalSeparator = "."
.ThousandsSeparator = ","
.UseSystemSeparators = False
End With
habe ich leider keinen Erfolg.
Anzeige
AW: VBA und SQLite, Summierung
27.11.2019 16:53:54
peterk
Hallo
Untersuch Dein "rst" im Überwachungsfenster ob dort bereist die Kommastellen verschwunden sind bzw. welches Format dort angezeigt wird.
AW: VBA und SQLite, Summierung
27.11.2019 20:56:06
Luschi
Hallo Matthias,
beim Zugriff auf SQL-DB's verlasse ich mich nicht nur auf AdoDB:
- in der SQL-DB lasse ich eine Abfrage anlegen (myLuschiView)
- auf die der User Änderungsrechte hat
- in Vba wird der SQL-String definiert, wie die DB es braucht
- per ADOX schicke ich diesen String an die Abfrage und ändere damit den SQL-Inhalt der Abfrage
- mit 'Select * From myLuschiView;' wird per AdoDB der RecordSet geholt, usw.
- natürlich muß dabei der DB-Admin mitspielen!
Gruß von Luschi
aus klein-Paris
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

VBA und SQLite: Summierung in Excel


Schritt-für-Schritt-Anleitung

  1. Verbindung zur SQLite-Datenbank herstellen: Nutze den folgenden VBA-Code, um eine Verbindung zu deiner SQLite-Datenbank herzustellen:

    Dim conn As Object, rst As Object
    Dim strSQL As String
    Set conn = CreateObject("ADODB.Connection")
    Set rst = CreateObject("ADODB.Recordset")
    Dim strDatei As String
    Dim strPfad As String
    strPfad = Environ$("USERPROFILE") & "\Desktop\"
    strDatei = strPfad & "novatime.s3db"
    conn.Open "DRIVER=SQLite3 ODBC Driver;Database=" & strDatei & ""
  2. SQL-Abfrage ausführen: Führe deine SQL-Abfrage aus, um die gewünschten Daten zu extrahieren. Hier ein Beispiel für eine Abfrage mit SUM und SUBSTR:

    strSQL = "SELECT PersNr, Name, DATUM, ROUND(SUM(CASE WHEN substr(IstStd,1,1) IN ('-') AND substr(IstStd,3,1) IN (',', '.') THEN ((substr(IstStd,4,2))/60) * '-1' + (substr(IstStd,2,2)) WHEN substr(IstStd,3,1) IN (',', '.') THEN (substr(IstStd,4,2))/60 + (substr(IstStd,1,2)) ELSE (substr(IstStd,3,2))/60 + (substr(IstStd,1,2)) END),2) AS IstStd FROM ARCHIV_JOURNAL WHERE PersNr ='3234' AND Datum BETWEEN '2019-08-01' AND '2019-08-31' ORDER BY Datum"
    rst.Open strSQL, conn, 1, 1
  3. Daten in Excel importieren: Verwende CopyFromRecordset, um die Daten in dein Excel-Arbeitsblatt zu übertragen.

    Sheets("Tabelle1").Range("A1").CopyFromRecordset rst
  4. Verbindung schließen: Vergiss nicht, die Verbindung und den Recordset zu schließen.

    rst.Close
    Set rst = Nothing: Set conn = Nothing

Häufige Fehler und Lösungen

  • Problem mit Dezimaltrennzeichen: Oft kommt es vor, dass Excel die Zahl mit einem Punkt als Dezimaltrennzeichen nicht korrekt interpretiert. Du kannst temporär die Trennzeichen in VBA anpassen:

    With Application
      .DecimalSeparator = "."
      .ThousandsSeparator = ","
      .UseSystemSeparators = False
    End With
  • Kommastellen verschwinden: Überprüfe im Überwachungsfenster, ob die Kommastellen bereits beim Recordset verschwunden sind.


Alternative Methoden

Eine andere Möglichkeit besteht darin, die SQL-Datenbank direkt in Excel zu importieren, ohne VBA zu verwenden. Dies kannst du über die Datenverbindung in Excel tun:

  1. Gehe auf Daten > Daten abrufen > Aus anderen Quellen > Von ODBC.
  2. Wähle deinen SQLite ODBC-Treiber und konfiguriere die Verbindung.
  3. Importiere die Daten direkt in ein Arbeitsblatt.

Praktische Beispiele

Ein praktisches Beispiel für die Verwendung von sqlite substr könnte sein, dass du die Daten für die Zeiterfassung einer Mitarbeiterdatenbank extrahierst und die Stunden summierst. Hierbei ist es wichtig, die korrekte Formatierung der Stunden sicherzustellen, um die Genauigkeit der Berechnung zu gewährleisten.


Tipps für Profis

  • Verwende Views in SQLite: Erstelle eine View in deiner SQLite-Datenbank, um komplexe Abfragen zu kapseln. Dies kann die Performance und Wartbarkeit deines Codes verbessern.

  • Nutze sqlite3 direkt: Bei großen Datenmengen kann es sinnvoll sein, sqlite3 über die Kommandozeile zu verwenden, um die Daten direkt zu exportieren und in Excel zu importieren.


FAQ: Häufige Fragen

1. Wie kann ich eine SQLite-Datei in Excel öffnen?
Du kannst eine Verbindung über ODBC herstellen oder die Datei direkt in Excel importieren, indem du die Datenverbindung einrichtest.

2. Was tun, wenn die Zahlen nicht korrekt summiert werden?
Stelle sicher, dass die Dezimaltrennzeichen in deinem VBA-Code korrekt gesetzt sind und überprüfe die Daten im Recordset.

3. Welche Excel-Version benötige ich?
Die beschriebenen Methoden funktionieren in Excel 2016 und neuer. Stelle sicher, dass du die passende ODBC-Treiber für SQLite installiert hast.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige