Anzeige
Archiv - Navigation
1704to1708
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

Values in SQL INSERT als dynamischer Bereich

Values in SQL INSERT als dynamischer Bereich
13.08.2019 13:49:53
Johannes
Hallo zusammen,
zum Konsolidieren von Daten aus verschiedenen EXCEL-Dateien (gleicher Aufbau) in eine ACCESS Datenbank habe ich folgendes Makro geschrieben, das auch soweit tadellos funktioniert:
Sub ExportToACCESS()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim r As Long
Dim SQLCommand As String
Set cn = New ADODB.Connection
cn.ConnectionString = & _
"Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & _
"C:\Neuer Ordner\" & "Database1.accdb;"
cn.Open cn.ConnectionString
SQLCommand = "INSERT INTO Tabelle1 " _
& "VALUES ('01', 'Beispieltext')" ' Diesen Teil hätte ich gerne dynamisch
cn.Execute SQLCommand
cn.Close
End Sub
Nun zu meinem Problem:
Die Values innerhalb des SQL Befehls sollen aus einer dynamischen Range B18:AHx kommen. Innerhalb der Range ändert sich nur die Anzahl der Datensätze/-zeilen, z. B: B18:AH25. Gibt es eine Möglichkeit, die Werte durch eine Bereichs-Angabe/Schleife etc. einzulesen, wie z. B.:
& "VALUES (MyRange)"
Wäre extrem dankbar, wenn mir jemand helfen könnte, da ich mit meinen SQL Kenntnisse hier offensichtlich an die Grenzen komme.
Danke euch vielmals...
LG,
Johannes

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Values in SQL INSERT als dynamischer Bereich
13.08.2019 18:50:58
ChrisL
Hi Johannes
Nein, so wie du denkst, geht es m.W. nicht.
Du kannst dir den SQL Text-String in einer Schleife zusammensetzen. Wird aber ein langer unübersichtlicher Texthaufen (hoffentlich musst du nie Debuggen ;)
Etwas verständlicher und lesbarer wird es, wenn du folgenden Ansatz verwendest:
https://www.herber.de/forum/archiv/1036to1040/1036040_Insert_in_DB_mittels_VBA.html
Abgekürzt ohne Verbindungsherstellung:
Dim i As Long
For i = 18 To Cells(Rows.Count,2).End(xlup).Row
With Recordset
.AddNew
.Fields("ParentTask").Value = Cells(i,2)
.Fields("TaskID").Value = Cells(i,3)
.Update
.Close
End With
Next i
Die Datentypen und Formate müssen übereinstimmen. Sonderzeichen (z.B. "' etc.) im Textstring können Fehler erzeugen.
cu
Chris
Anzeige
AW: Values in SQL INSERT als dynamischer Bereich
13.08.2019 23:49:42
Luschi
Hallo Johannes,
entgegen der Meinung von ChrisL zeige ich Dir an Hand eines Beispiels, daß man Excel-Datensätze, die nicht in Zelle 'A1' beginnen, 'en bloc' per SQL-Befehl 'Insert Into' nach Access übertragen kann.
Entpacke die zip-Datei in einem leere Ordner und öffne die xlsm-Datei und starte das Makro 'Start_InsertInto'.
Natürlich sind dabei ein paar Bedingungen zu beachten, die aber in der Exceldatei erwähnt sind.
https://www.herber.de/bbs/user/131430.zip
Gruß von Luschi
aus klein-Paris
AW: Values in SQL INSERT als dynamischer Bereich
14.08.2019 08:18:09
ChrisL
Hi Luschi
Super danke, eine solche Lösung suche ich selber schon länger.
Der Trick mit dem Bereichsnamen war mir nicht bekannt.
Für interessierte Mitleser hier noch der Auszug aus deinem Code:
''ID, Qualitaet, Wert1 ... sind die Feldnamen der Accesstabelle
sqlText = "INSERT INTO Uebersicht (ID, Qualitaet, Wert1, Fehlertyp, Wert2, Wert3, Wert4, Wert5, " & _
"MaschinenTyp, DatumVon, DatumBis, Bemerkungen) IN '" & ThisWorkbook.Path & "\Insert_Into.accdb'"
''F_1, F_2, F_3 ... sind die Spaltenüberschriften in der Exceltabelle
''meinBereich ist der definierte Arbeitmappenname in der Exceldatei
sqlText = sqlText & " Select F_1, F_2, F_3, F_4, F_5, F_6, F_7, F_8, F_9, F_10,F_11, F_12 FROM " & _
"meinBereich;"
cu
Chris
Anzeige
AW: Values in SQL INSERT als dynamischer Bereich
14.08.2019 08:37:59
Johannes
Hi Luschi,
hi Chris,
vielen Dank für eure Hilfe.
Ich werden den Code im Laufe des Tages einmal testen und dann nochmals Rückmeldung geben :-)
LG,
Johannes
AW: Values in SQL INSERT als dynamischer Bereich
14.08.2019 18:16:07
Hajo_Zi
Hallo Johannes,
offen bedeutet es soll noch eine Antwort kommen.
Warum ist dein Beitrag Offen.
Du willst doch was machen. Soll jemand vorbei kommen?
Das ist nur meine Meinung zu dem Thema.

AW: Values in SQL INSERT als dynamischer Bereich
16.08.2019 10:12:08
Johannes
Hi Luschi,
nochmals danke für deine Hilfe und sorry für die verspätete Rückmeldung.
Das funzt einwandfrei :-) Echt cool...
Ich hätte nur ein kleines Problem:
Meine Access Datenbank ist Passowort geschützt, d.h. beim Öffnen müsste ich das Passwort mitgeben.
Wo platziere ich das im Code?
Vielen Dank nochmals.
Johannes
Anzeige
AW: Values in SQL INSERT als dynamischer Bereich
16.08.2019 19:14:21
Luschi
Hallo Johannes,
erweitere den Inhalt der Variablen so:

strConn = "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;" & _
"Extended Properties='Excel 12.0 Macro;" & _
"HDR=YES';Data Source=" & ThisWorkbook.FullName & ";" & _
"Jet OLEDB:System database=C:\...\Access\System.mdw;" & _
"Jet OLEDB:Database Password=""?"";"
Dabei müsseb noch folgende Angaben von Dir angepaßt serden:
- User ID
- Speicherpfad der System.mdw
- und das Datenbank-Kennwort
Ein paar Infos zu System.mdw findet man hier:

http://office-loesung.de/ftopic48651_0_0_asc.php

Gruß von Luschi
aus klein-Paris
Anzeige
AW: Values in SQL INSERT als dynamischer Bereich
17.08.2019 16:43:05
Johannes
Hi Luschi,
wow super auch das funktioniert klasse.
Jetzt ist mir noch eine Kleinigkeit aufgefallen und zwar meckert er wenn ich in der Excel-Datei Überschriften habe wie beispielsweise "Überschrift 1", d.h. mit Leerzeichen. In deiner Beispielmappe sind die Überschriften alle mit Unterstrich verbunden z.B. F_1 usw. Gibt es eine Möglichkeit das in der SELECT Anweisung zu umgehen, dass ich nicht alle meine Überschriften mit Unterstrich schreiben muss?
Nochmals vielen Dank für deine super Hilfe.
Gruß,
Johannes
AW: Values in SQL INSERT als dynamischer Bereich
17.08.2019 21:32:24
Luschi
Hallo Johannes,
bei Leerzeichen in den Excel-Überschriften (Feldnamen) - oh, was für ein Frevel - schreibst man sie so im SQL-String:
[Das ist Ueberschrift 1], [Ueber...], ...
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Values in SQL INSERT als dynamischer Bereich
19.08.2019 14:39:15
Johannes
Hey Luschi,
wow du scheinst echt ein SQL-Crack zu sein :-) Funktioniert einwandfrei...
Vielen Dank dir nochmals.
Damit wäre alles beantwortet.
AW: Values in SQL INSERT als dynamischer Bereich
19.08.2019 18:09:10
Johannes
Hi Luschi,
sorry jetzt muss ich wegen der Passwort-Geschichte doch noch mal genauer nachfragen:
Die Excel-Datei, in der das Makro zur Verbindung mit der Datenbank und dem SQL-Insert enthalten ist, wird an ca. 200 Leute geschickt. Das heißt ich hätte hier m.E. ein Problem mit der User ID. Muss ich hier dann auf so eine Art CurrentUser (gibt es das) switchen? Und muss ich für diesen Fall irgendetwas bei der System.mdw beachten? Die ACCESS-Datenbank liegt auf einem zentralen Ordner auf den jeder der 200 Adressaten zugreifen kann.
Vielen Dank nochmals für deine Hilfe.
Gruß,
Johannes
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige