Live-Forum - Die aktuellen Beiträge
Datum
Titel
07.05.2024 16:36:49
07.05.2024 14:51:38
07.05.2024 13:27:17
Anzeige
Archiv - Navigation
1924to1928
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

ADODB.Recordset SQL Query fehlerhaft

ADODB.Recordset SQL Query fehlerhaft
29.03.2023 16:03:00
Mike

Hallo zusammen,

ich importiere mit nachfolgenden Code Daten aus einer anderen Excel Mappe.
Der Datenimport aller Spalten funktioniert auch wunderbar. Nun möchte ich aber die Quelldaten direkt filtern und nur die Datensätze importieren bei denen in Spalte 1 ein "*KW*" oder besser Buchstaben enthalten sind. Alle Zeilen in denen sich Zahlen in Spalte 1 befinden sollen also gar nicht erst ins Zielblatt übernommen werden.

Nun habe ich mich vorher nie mit SQL Abfragen beschäftigt und kann auch nicht mal sagen ob das überhaupt so wie ich das vorhabe machbar bzw. sinnvoll ist.

Sub LinienBauteileImport()

Dim Connection As New ADODB.Connection
Dim Query As String
Dim rs As New ADODB.Recordset


ThisWorkbook.Sheets("Btl_Import").UsedRange.Clear

Connection.Open "Provider=MSDASQL.1;DSN=Excel Files;DBQ=D:\W2023.xls;HDR=No';"

'Query = "SELECT * From [Btl$]"
Query = "SELECT * From [Btl$] WHERE FIELD1 LIKE '%KW%'"

rs.Open Query, Connection

ThisWorkbook.Sheets("Btl_Import").Range("A1").CopyFromRecordset rs

Connection.Close

End Sub


Der Datenabruf aller Spalten funktioniert hiermit soweit.
Query = "SELECT * From [Btl$]"


In allen Beispielen die ich gefunden habe werden die Spalten mit Namen angesprochen. Sind keine Namen vorhanden erfolgt offensichtlich eine Standardbezeichnung mit FIELD1, FIELD2 etc. Demnach sollte doch nachfolgender Code passen aber ich erhalte eine Meldung das 1 Parameter erwartet aber zu wenig übergeben wurden.
Was habe ich wo vergessen?
Query = "SELECT * From [Btl$] WHERE FIELD1 LIKE '%KW%'"


und wie wäre die Syntax wenn ich generell nach Buchstaben in Spalte 1 filtern möchte?

Danke und Gruß
Mike

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ADODB.Recordset SQL Query fehlerhaft
29.03.2023 20:51:48
Luschi
Hallo Mike,

setze doch in folgender Vba-Zeile 1 Haltepunkt (F9-Taste):
ThisWorkbook.Sheets("Btl_Import").Range("A1").CopyFromRecordset rs
und tippe inach dem Makrostart m Direktbereich-Fenster folgenden Befehl ein:
debug.print rs..Fields(0).Name
und drücke die Enter-Taste - jetzt wird der Feldname der 1. Spalte des Recordsets ausgegeben.
Wenn ich xlsx/xlsm-Dateien per ADODB auslese, sind die Daten in der 1. Zeile im Tabellenblatt immer die Feldnamen des Recordsets; FIELD1, FIELD2 etc erhalte ich beim Auslesen von txt/csv-Dateien.
Die Verwendung des %-Zeichens als Joker statt dem Sternchen ist bei ADODB korrekt, der Unterschrich (_) gilt als Joker für das Fragezeichen.
Warum bei Verwendung von LIKE %KW%' keine Daten geliefert werden, kann man ohne Testbeispiel schwer voraussagen:
- falscher Feldname
- KW gehört nicht zum eigentlichen Zellinhalt, sondern ist durch Zellformatierung erzeugt

Gruß von Luschi
aus klein-Paris


Anzeige
AW: ADODB.Recordset SQL Query fehlerhaft
30.03.2023 10:11:29
Mike
Hallo Luschi,

Danke für deine Antwort.

Du hast recht. Die Zellinhalte werden tatsächlich als Feldnamen genutzt.
Dieser ist leider variabel und besteht ua aus dieversen Sonderzeichen.
Außerdem sind nicht alle Zellen der ersten Zeile gefüllt was glaube ich auch probleme mit sich bringen kann.

Ich meine gelesen zu haben, dass man Feldnamen nachträglich ins rs einfügen kann.
Das sieht für mich zumindest erstmal nach einer eleganteren Möglichkeit aus.

Gruß
Mike


AW: ADODB.Recordset SQL Query fehlerhaft
30.03.2023 12:06:51
Luschi
Hallo Mike,

ich habe früher Daten aus Exceldateien immer mit DAO und/oder ADODB ausgelesen. Heute mache ich das mit Power Query, welches seit Excel 2016 fest integriert ist.
Hier kann man nach dem Einlesen die Spaltenüberschriften runterstufen zu 1. Datensatz. Damit bekommen die Spalten automatisch neue Überschriften der Form Column1, Column2, usw.
- als nächsten PQ-Schritt kann man dann den Filter setzen
- das ist gegenüber ADODB kein Nachteil, denn dieser Zugriff auf Excel besitzt keine
  Server-Funktionalität
- es werden alle Daten zum Zielrechner transportiert und dort erst die Filterfunktion
  'WHERE' ausgewertet
- weil mir das 1 EDV-Abteilungsleiter nicht glauben wollte, haben wir in dieser Firma die
  Netzwerkaktivität bei der Ausführung der ADODB SELECT/WHERE-Anweisung auf große
  Datenmengen gesniffert
- mit dem Ergebnis - gleiche Datenmenge bei SELECT mit und ohne WHERE-Klausel

Man könnte aber auch im auszulesenden Tabellenblatt erst 1 neue 1. Zeile mit neuen Datenüberschriften einfügen - dann per ADODB die Daten auslesen und filtern (da kennt man dann ja die Spaltenüberschriften!)

Gruß von Luschi
aus klein-Paris




Anzeige
AW: ADODB.Recordset SQL Query fehlerhaft
30.03.2023 17:01:19
Yal
Hallo zusammen,

richtig. Das Auswerten eines "Where" Server-seitig setzt voraus, dass ein Rechner da ist, der diese Befehl ausführt. Bei ADODB auf einem Exceldatei gibt es zwar ev. einen Dateiserver, aber ohne Datenbank-Funktionalität.

Was die Zukunftfähigkeit angeht, würde ich auch auf Power Query ansetzen: leicht zu verstehen, leicht einzusetzen, leicht zu übergeben (ein oft vernachlässigte Argument). Ausserdem drängt Microsoft immer mehr in Richtung "web only", wo Makros nicht mehr funktionsfähig sind.

Der -glaube ich- meistgeteilte Link im Forum: https://excelhero.de/power-query/power-query-ganz-einfach-erklaert
(60, ohne die letzte, 40 Minuten Videos. Eine sehr sinnvoll investierte Zeit)

VG
Yal


Anzeige
AW: ADODB.Recordset SQL Query fehlerhaft
31.03.2023 09:19:38
Mike
Hallo Luschi, Hallo Yal

der primäre Grund der mich überhaupt auf die ADODB gebracht hat ist die Problematik beim öffnen der Quelldatei.
Das öffnen der Datei dauert ewig. Genau kann ich es nicht sagen aber ich vermute es hängt mit der darin enthaltenen Menge an bedingten Formatierungen und Fomeln zusammen. Da ich die Quelldatei nicht verändern kann, hatte ich nach einer Möglichkeit gesucht den Inhalt ohne öffnen der Quelldatei auszulesen. Das funktioniert ja auch erstmal wunderbar.

Wie auch immer, in dieser Sache habe ich das primäre Ziel erreicht und die Idee, Daten noch vor dem Import zu filtern, vorerst verworfen. Ich muss die Daten ohnehin zur weiteren Verarbeitung zeilenweise durchlaufen. Ob ich da nun zusätzlich auf enthaltene Buchstabenkombinationen in Spalte 1 prüfe macht unterm Strich auch keinen Unterschied mehr. Vielleicht ist die Lösung mit ADODB in diesem Fall auch generell nicht passend gewesen aber sie erfüllt sehr schnell und problemlos ihren Zweck.

Dem Hinweis von euch beiden sich näher mit Power Query zu befassen werde ich nachgehen.
Danke für eure Hilfe in der Sache.

Gruß
Mike

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige