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

Datenbankabfrage nach Datum per SQL aus VBA

Forumthread: Datenbankabfrage nach Datum per SQL aus VBA

Datenbankabfrage nach Datum per SQL aus VBA
31.07.2007 08:52:19
Riediger
Hallo Leute,
ich habe bei meiner Excel-Version ein seltsames Phänomen, das mich verzweifeln lässt.
Ich möchte aus einer Datenbank Datensätze nach einem Datum auslesen. Dabei akzeptiert Excel allerdings nur entweder die Abfrage nach Jahr und Monat, oder Jahr und Tag...usw nur nicht die Abfrage nach Jahr, Monat und Tag? Ich kappiers einfach nicht - könnt Ihr mir bitte helfen ?
Hier ein Auszug aus meinem Code
Sub Auswertung()
Dim seltag1, seljahr1, selmonat1 As Integer
dsn = UCase(UserForm1.TextBox1.Value)
von_datum = UserForm1.TextBox2.Value
seltag1 = Day(UserForm1.TextBox2.Value)
selmonat1 = Month(UserForm1.TextBox2.Value)
seljahr1 = Year(UserForm1.TextBox2.Value)
......
Sheets("Abfrage2").Select
With ActiveSheet.QueryTables.Add(Connection:=Datenbankname, Destination:= _
Range("A1"))
.CommandText = Array("SELECT bab_typ,bab_nr,te,tr,rueckm_menge,weeks(fruehest_start)KW, " & _
"fruehest_start,status,year(fruehest_start) from bab_afo " & _
"where (year(fruehest_start) >= " & seljahr1 & ") and (month(fruehest_start) >= " & selmonat1 & " )and (day(fruehest_start) >= " & seltag1 & " ) and bab_typ=20 and status <> 99 order by KW ")
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = True
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With
Das Problem liegt in der Where Klausel, die Fehlermeldung lautet: Laufzeitfehler 13 - Typen unverträglich
Vielen Dank schon mal vorab für Eure Mühen

Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datenbankabfrage nach Datum per SQL aus VBA
31.07.2007 09:03:00
Armin
Hallo Riediger,
der Fehler kommt nicht von Excel sondern vom ODBC, ich würde sagen der Fehler liegt im Select des Datenbankzugriffes. Nicht jeder Select von SQL funktioniert sauber im ODBC. Versuche zunächst einen ODBC zugriff Manuel. Wenn der funktioniert, kannst Du diesen Select dann nutzen.
Gruß Armin

Anzeige
AW: Datenbankabfrage nach Datum per SQL aus VBA
31.07.2007 09:31:00
Riediger
Hallo Armin,
vielen Dank schonmal für Deinen Lösungsversuch. Ich habe das SQL manuell mal laufen lassen und die Datumswerte mit ' ' eingegeben. Das hat als reine SQL-Abfrage mit der Software Interactive SQL von Adaptive Server Anywhere prima funktioniert, aber wenn ich diese Abfrage dann unter VBA ausführe und die Datumswerte manuell eingebe, dann funktionierts nicht mehr (D.h. nur mit Jahr und Monat oder nur mit Monat und Tag schon, nur mehr als zwei Abfragen gleichzeitig packt er nicht). Wie kann ich das sonst noch irgendwie hinbekommen?

Anzeige
AW: Datenbankabfrage nach Datum per SQL aus VBA
31.07.2007 09:42:41
Renee
Hi Riediger,
Stell mal den SQL, der funktioniert in Klarschrift (nicht VBA) hier rein.
Greetz Renee

AW: Datenbankabfrage nach Datum per SQL aus VBA
31.07.2007 09:58:00
Luschi
Hallo ,
bei der Sql-Abfrage muß der gesamte Sql-String stimmig sein. Die folgende Passage ist es wohl nicht:
weeks(fruehest_start)KW
Das müßte wohl lauten: weeks(fruehest_start) KW (also mit 1 Leerzeichen als Lücke)
oder weeks(fruehest_start) As KW, denn Du willst doch, daß der Rechenausdruck die Spaltenüberschrift "KW" erhält.
Zudem würde ich statt "ODBC" "ADODB" nehmen. Wenn man schon den Abfrage-String per Vba zusammensetzt, dann kann man auf neuere Abfrage-Methoden umsteigen.
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Datenbankabfrage nach Datum per SQL aus VBA
31.07.2007 10:11:00
Riediger
Hallo Luschi,
auch Dir vielen Dank für den Lösungsversuch, aber auch das hat leider nicht funktioniert. Ich bin Neuling bei der Abfrage von Datenbanken per vba/sql, daher ist mein Code vielleicht etwas umständlich, aber irgendwie funktionieren müsste es doch eigentlich trotzdem ?

Anzeige
AW: Datenbankabfrage nach Datum per SQL aus VBA
31.07.2007 09:41:00
Renee
Mazwara Riediger,
Das der Fehler an ODBC liegt ist ziemlich unwahrscheinlich, wenn nicht sogar auszuschliessen!
Versuch mal folgendes:
Ersetze .CommandText = Array(....)mit:

.Sql = "SELECT bab_typ,bab_nr,te,tr,rueckm_menge,weeks(fruehest_start) KW, " & _
"  fruehest_start,status,year(fruehest_start) " & _
"FROM bab_afo " & _
"WHERE (year(fruehest_start) >= " & seljahr1 & ")" & _
"  AND (month(fruehest_start) >= " & selmonat1 & " )" & _
"  AND (day(fruehest_start) >= " & seltag1 & " )" & _
"  AND bab_typ=20 AND status  99 " & _
"ORDER by KW "


Wenn ein Fehler auftritt, wie äussert er sich? Gibt es ein Meldung?
Kommen überhaupt Datensätze zurück?
Was ist das für ein Typ von Datenbank?
Wie ist das Datumsformat der Datenbank?
Greetz Renee

Anzeige
AW: Datenbankabfrage nach Datum per SQL aus VBA
31.07.2007 10:05:41
Riediger
Hallo Renee,
vielen Dank für den Tipp. Hat mich leider auch nicht weiter gebracht. Es kommt jetzt Laufzeitfehler 1004 - Syntaxfehler. Wenn ich z.B. die Abfrage nach dem Tag rausnehme, dann funktionierts einwandfrei.
Der Original - Code lautet:
SELECT bab_typ,bab_nr,te,tr,rueckm_menge,weeks(fruehest_start)KW, fruehest_start,status,year(fruehest_start) from bab_afo where (year(fruehest_start) >= '2007')
and (month(fruehest_start) >= '1' ) and (day(fruehest_start) >= '1' ) and bab_typ=20 and status <> 99 order by KW
Es handelt sich um eine Sybase - Datenbank
Wenn alle Stricke reissen, dann lösche ich halt nachträglich aus meiner Tabelle die Zeilen raus, die ich nicht haben will, aber irgendwie ärgern tut's mich schon , dass das nicht funktionieren will

Anzeige
AW: Datenbankabfrage nach Datum per SQL aus VBA
31.07.2007 10:29:00
Renee
Hi Riediger,
Im Unterschied zum funktionierenden, fehlen im VBA-SQL die Hochkommas. Also probier mal:

With ActiveSheet.QueryTables.Add(Connection:=Datenbankname, Destination:= _
Range("A1"))
.CommandText = Array("SELECT bab_typ,bab_nr,te,tr,rueckm_menge,weeks(fruehest_start)KW, " & _
"fruehest_start,status,year(fruehest_start) from bab_afo " & _
"where (year(fruehest_start) >= '" & seljahr1 & "') and (month(fruehest_start) >= '" &  _
selmonat1 & "' )and (day(fruehest_start) >= '" & seltag1 & "' ) and bab_typ=20 and status  99 order by KW ")
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = True
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With


Greetz Renee

Anzeige
AW: Datenbankabfrage nach Datum per SQL aus VBA
31.07.2007 10:53:00
Riediger
Hallo Renee,
das funzt leider auch nicht. Jetzt kommt die Fehlermeldung 'Typen - unverträglich' .
Ich hab mir die unnötigen Datensätze nachträglich gelöscht und frage jetzt eben nur über das Jahr und den Monat ab. Das geht wenigstens. Aber an einer Lösung bin ich natürlich nach wie vor interessiert. Nur mir fällt leider keine Variante mehr ein.
Viele Grüße
Martin

Anzeige
Ich weiß ja nicht, ob sich das inzwischen...
02.08.2007 04:43:53
Luc:-?
...geändert hat, Martin,
aber vor 5 Jahren waren unsere Programmierer der Ansicht, das SyBase-DBs nur sehr schlecht mit MS-Produkten zusammenarbeiten und man es deshalb lassen sollte. Wenn das noch so sein sollte, stehen dir noch etliche Mühen ins Haus. Außerdem hat Sybase einen eigenen SQL-Dialekt. Deine Abfrage fkt aber als direkte DB-Abfrage? Mir ist so als ob da nicht ab und an noch Semikolons zum Befehlsabschluss reingehören. Aber wahrscheinlich verträgt sich der SyBase-Dialekt nicht mit dem MS-SQL-Dialekt. VBA wird vermutlich irgendwas erzeugen, was SyBase nicht versteht.
Gruß Luc :-?
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Datenbankabfrage nach Datum per SQL aus VBA


Schritt-für-Schritt-Anleitung

  1. Datenbankverbindung einrichten: Stelle sicher, dass Du eine Verbindung zu Deiner Datenbank über ODBC oder ADODB eingerichtet hast.

  2. SQL-Abfrage formatieren: Achte darauf, dass Deine SQL-Abfrage korrekt formatiert ist. Ein typischer Befehl könnte so aussehen:

    .Sql = "SELECT bab_typ,bab_nr,te,tr,rueckm_menge,weeks(fruehest_start) AS KW, " & _
    "fruehest_start,status,year(fruehest_start) " & _
    "FROM bab_afo " & _
    "WHERE (year(fruehest_start) >= '" & seljahr1 & "') " & _
    "AND (month(fruehest_start) >= '" & selmonat1 & "') " & _
    "AND (day(fruehest_start) >= '" & seltag1 & "') " & _
    "AND bab_typ=20 AND status <> 99 " & _
    "ORDER by KW"
  3. Abfrage ausführen: Verwende die Methode .Refresh auf Deinem QueryTable-Objekt, um die Abfrage auszuführen und die Ergebnisse in Excel zu laden.

  4. Fehlerbehebung: Bei Auftreten von Laufzeitfehlern, überprüfe die SQL-Syntax sowie die Datentypen der Felder in Deiner Datenbank.


Häufige Fehler und Lösungen

  • Laufzeitfehler 13 - Typen unverträglich: Dieser Fehler tritt häufig auf, wenn die Datentypen in der SQL-Abfrage nicht übereinstimmen. Stelle sicher, dass Du die Datumswerte korrekt in Hochkommas setzt.
  • Laufzeitfehler 1004 - Syntaxfehler: Überprüfe, ob Du alle notwendigen Leerzeichen und Kommas korrekt gesetzt hast. Auch das Fehlen von 'AS' bei Aliasnamen kann diesen Fehler verursachen.
  • Keine Datensätze zurückgegeben: Achte darauf, dass Deine Filterspezifikationen sinnvoll sind. Wenn Du nach einem bestimmten Datum suchst, könnte es sein, dass keine Datensätze diesen Kriterien entsprechen.

Alternative Methoden

  • Direkte Datenbankabfragen: Du kannst auch direkt mit Tools wie SQL Server Management Studio arbeiten, um Deine SQL-Abfragen zu testen, bevor Du sie in VBA implementierst.
  • Verwendung von ADODB: Anstelle von ODBC kannst Du ADODB verwenden, um eine stabilere Verbindung zu Deiner Datenbank herzustellen und komplexere Datenbankabfragen durchzuführen.

Praktische Beispiele

Hier ein einfaches Beispiel für eine SQL-Datenabfrage, die das aktuelle Datum verwenden könnte:

Dim aktuellesDatum As Date
aktuellesDatum = Date - 30 ' 30 Tage in die Vergangenheit

.Sql = "SELECT * FROM bab_afo WHERE fruehest_start >= '" & aktuellesDatum & "'"

Diese Abfrage zieht alle Datensätze, die innerhalb der letzten 30 Tage liegen.


Tipps für Profis

  • Datumsformat anpassen: Achte darauf, dass das Datumsformat in deiner SQL-Abfrage dem SQL Server Datumsformat entspricht. Oftmals ist das Format YYYY-MM-DD.
  • Fehlerprotokollierung: Implementiere eine Fehlerprotokollierung, um die Ursachen von Laufzeitfehlern schneller zu identifizieren. Nutze On Error Resume Next und überprüfe danach den Fehlerstatus.
  • SQL Abfragen optimieren: Nutze Indizes in Deiner Datenbank, um die Geschwindigkeit von SQL Abfragen zu verbessern, insbesondere bei großen Datenmengen.

FAQ: Häufige Fragen

1. Warum funktioniert meine SQL-Abfrage nicht in VBA?
Die häufigsten Probleme sind falsche Datentypen oder falsche Syntax. Achte darauf, dass Datumswerte in Hochkommas gesetzt werden.

2. Wie kann ich SQL-Abfragen in Excel automatisieren?
Du kannst VBA verwenden, um SQL-Abfragen automatisch auszuführen und die Ergebnisse in Excel zu importieren. Stelle sicher, dass Du die richtige Syntax und Verbindung verwendest.

3. Was ist der Unterschied zwischen ODBC und ADODB?
ODBC ist eine allgemeine Schnittstelle für Datenbankzugriffe, während ADODB eine spezifische Microsoft-Technologie ist, die oft eine bessere Performance und mehr Funktionen bietet.

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