Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
992to996
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
992to996
992to996
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Aus Excel-Zeilen SQL generieren

Aus Excel-Zeilen SQL generieren
22.07.2008 18:28:00
Jan
Hallo *,
leider kann ich überhaupt kein VBA, muss aber folgendes bewerkstelligen (was wahrscheinlich für einen Könner ziemlich einfach ist). Ich hoffe hier gibt es einen hilfreichen Geist, der mir weiterhelfen kann :)
Ein Excel Arbeitsblatt enthält mehrere Reiter in denen jeweils eine einzige Tabelle enthalten ist.
Die Erste Zeile enthält die Spaltenüberschriften.
Die darauffolgenden Zeilen enthalten die Daten, die in die Tabelle sollen
Spalte 1 | Spalte 2 | Spalte 3 | Spalte 4 | Spalte 5 | etc.
11 Tralala Huhn 12n1 2008.01.31
12 Tut Henne 2 2008.01.31 ....
Nun soll über ein VBA auf Knopfdruck eine Ausgabe erzeugt werden, die mir folgendes SQL Statement ausgibt
Insert into VALUES (11,"Tralala","Huhn","12n1","2008.01.31");
Insert into VALUES (12,"Tut","Henne",2,"2008.01.31); etc.
Das Auslesen der Spaltenüberschriften in der ersten Zeile ergibt somit die Anzahl der Spalten der Tabelle.
Der Reiter heisst so wie die Datenbanktabelle.
( Wenn die erste Zeile Ax leer sein sollte, so wird die Ausgabe beendet, da keine weiteren Daten mehr folgen oder aber allgemein es sollen nur AUsgaben für Zeilen mit Werten ausgegeben werden )
Das wahrscheinlich eigentliche Problem ist nun, daß abhängig von der Formatierung der Zellen Hochkommata gesetzt werden oder nicht. Wenn der Inhalt numerisch ist (integer) müssen keine Hochkammata gesetzt werden, wenn der Inhalt alphanumerisch oder ein Datumsformat ist, so müssen
Hochkommata gesetzt werden. Datumsfelder sind immer in das Fomat YMD4. zu konvertieren (JJJJ.MM.DD)
Das das ganze eigentlich nach Access gehört, ist mir klar, aber leider bin ich an Excel und diese Lösung gebunden.
Ich hoffe ihr könnt helfen :(
Viele Grüße
Jan

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Aus Excel-Zeilen SQL generieren
22.07.2008 22:31:34
Yal
Hallo Jan,
deine Daten liegen in Excel aber Du willst diese in eine SQL-Datenbank rüberbringen, richtig?
Noch zu fragen wäre, ob es sich um eine einmalige Angelegenheit handelt oder etwas, was regelmässig gemacht werden soll (und dann mit welcher Häufigkeit).
Die Lösung würde ich so sehen:
_ Daten in Access importieren. ollte der Vorgang öfter verwendet werden, soll beim ersten Mal die Importspezifikation sauber definiert werden, um diese wiederverwenden zu können (der Assistent steht dafür hilfbereit),
_ die Zieltabelle der SQL-Datenbank (ich gehe davon aus, dass es sich hier um etwas anderes als Access, ansonsten machen die "insert into" keinen Sinn) auch in die Access-Anwendung per ODBC einbinden
_ eine einfache Abfrage herstellen, um die Daten aus Excel in der Zieltabelle hinzufügen.
Fertig.
Ev. noch eine Makro herstellen, um die 3 Schritte zu automatisieren.
Viel Erfolg
Yal

Anzeige
AW: Aus Excel-Zeilen SQL generieren
23.07.2008 07:03:01
Jan
Hallo,
vielen Dank für die Antwort. Die Sache wird oft durchgeführt und ein Import nach Access ist nicht möglich (es steht kein Acces zur Verfügung und es darf auch kein access installiert werden).
Das ganze soll in eine Oracle DB importiert werden (aber letzendlich ist es ja egal), das insert into dürfte auf jeder DB funktionieren.
Es muß also das valide Statement aus der Excel-Anwendung heraus generiert werden.
Grüße
Jan

AW: Aus Excel-Zeilen SQL generieren
23.07.2008 21:44:23
Yal
Hallo Jan,
trotz dem "Kaum Excel/VBA-Kenntnisse" gehe ich davon aus, da Du mit SQL jongliert, dass Du EDV-tauglich bist.
Das VBA-Coding, um Daten direkt in einer ODBC-Datenbank zu versenden sieht so aus:

Sub DatenNachSQL_senden()
Dim db As ADODB.Connection
Dim rs As ADODB.Recordset
Dim LetzteSpalte%, LetzteZeile%
Dim Felder$()
Dim Daten$()
Set db = New ADODB.Connection
db.Open "ODBC;OdbcName;" 'zu vervollständigen
For Each W In Worksheets
Set rs = New ADODB.Recordset
'Recordset öffnen. Wir nehmen an, die Excel-Tabelle haben die selben Namen, wie die  _
Zieltabelle
rs.Open "select * from " & W.Name, db, adOpenDynamic, adLockOptimistic
LetzteSpalte = W.Range("IV1").End(xlToRight).Column
LetzteZeile = W.Range("A65536").End(xlUp).Row
ReDim Felder(1 To LetzteSpalte)
ReDim Daten(1 To LetzteSpalte)
'Übenrahme der Liste der Feldnamen:
For i = 1 To LetzteSpalte
Felder(i) = W.Cells(1, i).Value
Next i
'Übernahme der Daten und Versand:
For j = 2 To LetzteZeile
For i = 1 To LetzteSpalte
Daten(i) = W.Cells(j, i).Value
Next i
rs.AddNew Felder, Daten
Next j
rs.Close
Next W
db.Close
End Sub


Coding ist getestet worden und bedarf eventuell Anpassung.
Es gibt sonst eine Möglichkeit die Insert into direkt mit Formel zu erzeugen.
In eine freie Spalte -sagen wir rechts vom Datenbereich- folgende Formelaufbau ab Zeile 2 verwenden, hier im Beispiel nur 3 Spalten, aber beliebig erweiterbar:
="Insert into MeineTabelle (" &$A$1&","&$B$1&","&$C$1&") values ("&wenn(istzahl($A2;$A2; "'"&$A2&"'") &","&wenn(istzahl($B2);$B2;"'"&$B2&"'") & "," & wenn(istzahl($C2);$C2;"'"&$C2&"'") &"); "
Die Reihenfolge "'" ist Doppel-Hochkomma, Hochkomma, Doppel-Hochkomma. Schwer so zu erkennen.
Also gar nicht so kompliziert.
Viel Erfolg
Yal

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige