Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1852to1856
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.Connection

ADODB.Connection
02.11.2021 17:47:31
Dom
Hallo Zusammen
in meinem Code führe ich zwei Subs hintereinander aus Sub: CS und Sub: CP.
Für die Connection.Open habe ich eine Public Const DB deklariert.
Meine Frage: Kann ich eine Public Konstante für die Query = "SELECT * FROM [HIER eine Konstante ?] deklarieren ?
und
Kann ich die beiden Subs zusammenfassen ?
''Varibale für den Pfad (hier Pfad ändern)
Public Const DB As String = "C:\Users\d01\OneDrive-T\Cfile\Datenbank.xlsm"

Sub CS()
'Zuerst unter Extras\Verweise\MS ActiveX Data Objects 6.1 Libary aktivieren
'Variablen deklarieren
Dim Connection As New ADODB.Connection
Dim Query As String
Dim rs As New ADODB.Recordset
Dim arr As Variant
'Connection herstellen
Connection.Open "Provider=MSDASQL.1;DSN=Excel Files;DBQ= " & DB & " ;HDR=Yes';"
''Query definieren und ausführen SQL Anweisung
Query = "SELECT * FROM [Tabelle2$] WHERE Process = 'CS'"       Wichtig !!! From[Name des Worksheets der Datenbank Mappe]
rs.Open Query, Connection
'Daten ins Tabellenblatt laden
Worksheets("Auszug").Select
Range("A" & LetzteZeileAdvanced(1) + 1).CopyFromRecordset rs
Cells.EntireColumn.AutoFit
Connection.Close
End Sub

Sub CP()
'Variablen deklarieren
Dim Connection As New ADODB.Connection
Dim Query As String
Dim rs As New ADODB.Recordset
Dim arr As Variant
'Connection herstellen
Connection.Open "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & DB & ";HDR=Yes';"
'Query definieren und ausführen
Query = "SELECT * FROM [Tabelle2$] WHERE Process = 'CP'"
rs.Open Query, Connection
'Daten ins Tabellenblatt laden
Worksheets("Auszug").Select
Range("A" & LetzteZeileAdvanced(1) + 1).value = ("Manage (CP)")
Range("A" & LetzteZeileAdvanced(1) + 1).CopyFromRecordset rs
Cells.EntireColumn.AutoFit
Connection.Close
End Sub
Vielen Dank !

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ADODB.Connection
02.11.2021 19:10:04
ChrisL
Hi
Ja, du kannst...

Query = "SELECT * FROM [Tabelle2$] WHERE Process = '" & Variable & "'"
Kann man als Konstante machen, muss man aber nicht. Ein öffentliche/public Konstante wie beim Dateipfad würde ich eher nicht machen, wenn man davon ausgeht, dass sich die Kürzel nie ändern werden.
Beim Pfad macht es Sinn, wenn man diesen bei Änderung zentral an nur einer Stelle anpassen will und der Pfad in verschiedenen Prozeduren verwendet wird. CS/CP wird wahrscheinlich nur in dieser einen Prozedur verwendet und ändert sich kaum (=Annahme).
Die zwei kleinen Schnipsel könnte man m.E. auch so stehen lassen. Wenn du aber deine VBA-Kenntnisse weiter ausbauen willst, dann würde ich dir im vorliegenden Fall eine Parameterübergabe empfehlen. Hier mal ein zufällig ausgewähltes Tutorial, aber bei Bedarf findest du sicherlich noch andere Beschreibungen:
https://www.youtube.com/watch?v=Ir7a65Lzjvg
Wenn du dich mit dem Prinzip vertraut gemacht hast, kannst du gerne mal dein Beispiel posten. Vielleicht lässt sich abschliessend noch ein wenig optimieren (Verbindung nur einmal aufbauen).
Und von wegen optimieren, bitte Select/Activate vermeiden:
https://www.herber.de/vbabasics/0009.html
cu
Chris
Anzeige
AW: ADODB.Connection
02.11.2021 23:34:12
Yal
Hallo Dom,
diese Query-Variable ist zuerst nichts anderes als einen String-Variable. String werden mit "&" zusammengefasst. Das verwendest Du schon u.a. in Connection.Open.

Const ZielTabelle = "Tabelle2"
Sub CS
Query = "SELECT * FROM [" & ZielTabelle & "] WHERE Process = 'CS'"
End Sub
Sub CP
Query = "SELECT * FROM [" & ZielTabelle & "] WHERE Process = 'CP'"
End Sub
VG
Yal
AW: ADODB.Connection
03.11.2021 08:13:17
Dom
Public Const ZT As String = "Auszug$"
Query = "SELECT * FROM [" & ZT & "] WHERE Process = 'CS'"
so klappt es :) Vielen Dank !
Anzeige
AW: ADODB.Connection
03.11.2021 08:16:36
Dom
Noch eine Frage:
Meine Tabelle hat die Spalten von A bis K. Über die Abfrage werden aber nur die Inhalte von A bis E übertragen.
Die anderen Spalten bleiben leer.
Habt ihr eine Idee woran das liegt ?
Danke !
AW: ADODB.Connection
03.11.2021 09:12:20
Yal
Hallo Dom,
Du machst einen "Select <Stern> ...", dass heisst es liefert alle Spalten, die in Quelle sind.
Genauer wäre die Benennung von diesen Spalten
"Select Datum, Person, Kunden, Produkt, ... From [Tabx] Where ..."
Auch den Filter könnte dazu führen, dass beim Fall CS oder CP die letzten 5 Spalten nicht befüllt sind.
Ich würde aber nicht relational auf Excel aufbauen. Schaue Dir schnellsten Access an. Mit ein paar Tutorial ist der Einstieg recht einfach.
VG
Yal
Anzeige
AW: ADODB.Connection
03.11.2021 09:31:14
Dom
Hallo Yal,
ich habe den Fehler gefunden: In Spalte F ist ein Text mit 312 Zeichen, wenn ich die Anzahl der Zeichen reduziere geht es, dass alle Spalten mit Inhalt übertragen werden. Gibt es ein Zeichenlimit bei der Abfrage ?
Danke

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige
Archiv - Verwandte Themen