Discussion:
Mehrstufiges SQL-Statement aus Excel
(zu alt für eine Antwort)
HeliKopf
2009-11-18 09:12:24 UTC
Permalink
Hallo zusammen,

ich bin gerade auf der Suche nach einer Möglichkeit, SQL-Statements
aus Excel heraus zu starten. Dabei muss ich nicht nur Daten abfragen
und in Excel verwenden, sonden davor noch ein paar Selektionen
ausführen und temporäre Tabellen auf dem SQL-Server dazu erstellen.
Kann mir jemand einen Tip geben, wie ich das am Besten anstelle und ob
das überhaupt möglich ist?

Danke schon mal für die Hilfe!

Servus, Helmut.
Thomas Kühn
2009-11-18 09:29:41 UTC
Permalink
Hallo Helmut,
Post by HeliKopf
ich bin gerade auf der Suche nach einer Möglichkeit, SQL-Statements
aus Excel heraus zu starten. Dabei muss ich nicht nur Daten abfragen
und in Excel verwenden, sonden davor noch ein paar Selektionen
ausführen und temporäre Tabellen auf dem SQL-Server dazu erstellen.
Kann mir jemand einen Tip geben, wie ich das am Besten anstelle und ob
das überhaupt möglich ist?
ADODB ist was du benötigst. Hiermit kannst Du
eine Connection zu einem SQL Server aufbauen,
Recordsets abfragen usw.



Gruß Thomas


--
http://www.thomas-kuehn.de
HeliKopf
2009-11-18 09:46:57 UTC
Permalink
On 18 Nov., 10:29, Thomas Kühn <t-***@gmx.de> wrote:
...
Post by Thomas Kühn
ADODB ist was du benötigst.
...

Danke schon mal für den Hinweis, gibt es dazu auch irgendwo eine
Dokumentation / Hilfeseiten / Beispiel die zu empfehlen sind?

Merci & Servus, Helmut.
Thomas Kühn
2009-11-19 08:06:00 UTC
Permalink
Hallo Helmut,
...> ADODB ist was du benötigst.
...
Danke schon mal für den Hinweis, gibt es dazu auch irgendwo eine
Dokumentation / Hilfeseiten / Beispiel die zu empfehlen sind?
MSDN:
http://tinyurl.com/yjallgk
sowie
http://tinyurl.com/ycwbkr5


Sowie diverse Tutorials im Netz:
http://tinyurl.com/ybgyy68

Was sollen denn das für temporäre Tabellen sein? Ich stelle mir
gerade vor, dass User wild um sich greifend Tabellen auf einer
Datenbank erstellen. Graus!
Das ist wohl das schlimmste für jeden DB-Admin.

Gruß Thomas

--

http://www.thomas-kuehn.de
HeliKopf
2009-11-19 10:19:36 UTC
Permalink
On 19 Nov., 09:06, Thomas Kühn <t-***@gmx.de> wrote:
...

Hallo Thomas,

danke schon mal für die Links, wede mich die Tage da mal etwas
einarbeiten.
Leider sieht das bei uns wirklich so aus: wir haben einen vom
Zentralsystem separierten Analyse-Server der von allen Usern genutzt
werden kann. Jeder legt dort beliebig Tabellen an (und löscht diese
natürlich nicht wieder) nur können wir eben keine Prozeduren o. ä.
anlegen. Folge sind nun SQL-Statements, die mit jeder Menge Temp-
Tabellen arbeiten (aus Performance-Gründen) im Resultat aber in Excel
ausgewertet werden. Wunsch ist nun, nicht mehr den SQL-Editor bemühen
zu müssen, um die Basistabelle zu erstellen, sondern direkt aus Excel
heraus zu arbeiten.
Na mal sehen, was sich daraus machen lässt.

Danke noch mal & Servus, Helmut.
Thomas Kühn
2009-11-19 11:23:01 UTC
Permalink
Hallo Helmut,
Post by HeliKopf
Na mal sehen, was sich daraus machen lässt.
Starte mal so:

Dim conn As ADODB.Connection
Dim cmd As ADODB.Command

Set conn = New ADODB.Connection

Dim strSQL As String

conn.ConnectionString = "Provider=SQLOLEDB;" _
& "Data Source=Your_Server_Name;" _
& "Initial Catalog=Your_Database_Name;" _
& "Integrated Security=SSPI;"
conn.Open

Set cmd = New ADODB.Command
Set cmd.ActiveConnection = conn

strSQL = "CREATE TABLE tmpTablename ....."
cmd.CommandText = strSQL
cmd.Execute

usw.



Gruß Thomas

--

http://www.thomas-kuehn.de
HeliKopf
2009-11-19 13:34:59 UTC
Permalink
On 19 Nov., 12:23, Thomas Kühn <t-***@gmx.de> wrote:
...

Hallo Thomas,

DU BIST EIN HELD!!!!
Genau danach hab' ich gesucht und siehe da: es läuft!!!

Vielen vielen Dank für die Hilfe!

Servus, Helmut.
Thomas Kühn
2009-11-19 14:06:42 UTC
Permalink
Hallo Helmut,
Post by HeliKopf
Vielen vielen Dank für die Hilfe!
Gerne.
Und nicht vergessen:
SQL kennt auch "DROP TABLE ...."



Gruß Thomas


--

http://www.thomas-kuehn.de
HeliKopf
2009-11-26 08:01:14 UTC
Permalink
Guten Morgen,

nun brauche ich doch noch mal etwas Hilfe:
In meinem mittlerweile gut funktionierenden Code will ich nun auch
noch Daten aus Excel in unseren Analyse-Server übergeben. Habe jetzt
schon viel gesucht, komme aber nicht so richtig weiter. Muss doch
irgendwie mit Recordset oder so lösbar sein? -> erst Excel-Tabelle in
ein Recordset einlesen, dann Connection zum Server und dieses dann in
eine Tabelle schreiben -> aber wie mache ich das?
Bin für jede Hilfe dankbar!

Servus, Helmut.
Thomas Kühn
2009-11-26 09:00:40 UTC
Permalink
Hallo Helmut,
Post by HeliKopf
In meinem mittlerweile gut funktionierenden Code will ich nun auch
noch Daten aus Excel in unseren Analyse-Server übergeben. Habe jetzt
schon viel gesucht, komme aber nicht so richtig weiter. Muss doch
irgendwie mit Recordset oder so lösbar sein? -> erst Excel-Tabelle in
ein Recordset einlesen, dann Connection zum Server und dieses dann in
eine Tabelle schreiben -> aber wie mache ich das?
Schau Dir mal in der ADO Hilfe AddNew an.

Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
conn.ConnectionString = "Provider=SQLOLEDB;" _
& "Data Source=Your_Server_Name;" _
& "Initial Catalog=Your_Database_Name;" _
& "Integrated Security=SSPI;"
conn.Open

Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset
rst.Open "SELECT Feld1, Feld2 FROM Tabelle1", _
conn, _
adOpenKeySet, _
adLockOptimistic

rst.AddNew
rst.Fields("Feld1").Value = "Irgendeinwert"
rst.Fields("Feld2").Value = "Irgendeinwert"
rst.Update
rst.Close
Set rst = Nothing
conn.Close
Set conn=Nothing




Gruß Thomas


--

http://www.thomas-kuehn.de
HeliKopf
2009-11-26 09:25:05 UTC
Permalink
Post by Thomas Kühn
Hallo Helmut,
...
Post by Thomas Kühn
rst.Fields("Feld1").Value = "Irgendeinwert"
rst.Fields("Feld2").Value = "Irgendeinwert"
...

Hallo Thomas,

an diesem Ansatz war ich schon dran, aber dabei muss ich ja dann jede
Zeile meiner Basistabelle einzeln "übergeben" oder hab' ich da was
falsch verstanden? Leider finde ich den Eintrag nicht mehr, da hatte
ich sowas in der Art gelesen: Exceltabelle in ein Recordset einlesen
(mit SELECT * FROM [Tabelle1$A1:A10] oder so ähnlich) und dieses dann
per INSERT in die Servertabelle schreiben. Wäre natürlich angenehmer
als jeden Datensatz einzeln zu verarbeiten.

Danke schon mal für Deine Hilfe!

Servus, Helmut.
Thomas Kühn
2009-11-26 11:41:43 UTC
Permalink
Hallo Helmut,
Post by HeliKopf
an diesem Ansatz war ich schon dran, aber dabei muss ich ja dann jede
Zeile meiner Basistabelle einzeln "übergeben" oder hab' ich da was
falsch verstanden? Leider finde ich den Eintrag nicht mehr, da hatte
ich sowas in der Art gelesen: Exceltabelle in ein Recordset einlesen
(mit SELECT * FROM [Tabelle1$A1:A10] oder so ähnlich) und dieses dann
per INSERT in die Servertabelle schreiben. Wäre natürlich angenehmer
als jeden Datensatz einzeln zu verarbeiten.
spricht denn da was gegen? Letztendlich brauchst Du nur ein Range
zu durchlaufen und für jede Zeile ein Add auszuführen.

Es geht auch irgendwie anders. Da muß dann die Connection auf
das Excelblatt mit in das SQL Statement. Ich suche mal ob ich das
noch irgendwo finde.
Bei einzelnen AddNew würde ich noch ein BeginTrans und CommitTrans
auf die Connection um die AddNew-Update legen. Sonst wird ein
Commit nach jeden rst.Update gemacht und das dauert länger.



Gruß Thomas


--

http://www.thomas-kuehn.de
HeliKopf
2009-12-07 09:01:37 UTC
Permalink
On 26 Nov., 12:41, Thomas Kühn <t-***@gmx.de> wrote:
...

Hallo Thomas,

habe jetzt zwar noch etwas gebraucht, aber mittlerweile funktioniert
alles prächtig!
Vielen Dank noch mal für Deine Unterstützung, alleine wäre ich
verzweifelt und hätte aufgegeben.

Viele Grüße,
Helmut.

Werner P. Schulz
2009-11-18 10:24:45 UTC
Permalink
Post by HeliKopf
Hallo zusammen,
ich bin gerade auf der Suche nach einer Möglichkeit, SQL-Statements
aus Excel heraus zu starten. Dabei muss ich nicht nur Daten abfragen
und in Excel verwenden, sonden davor noch ein paar Selektionen
ausführen und temporäre Tabellen auf dem SQL-Server dazu erstellen.
Kann mir jemand einen Tip geben, wie ich das am Besten anstelle und ob
das überhaupt möglich ist?
... wenn es nicht zwingend notwendig ist, temporäre Tabellen auf dem
SQL-Server zu speichern, dann könntest du MS Query verwenden. Damit
kannst du Abfragen erstellen und an den SQL-Server schicken.
--
Gruss Werner
mail nur an => nospam0601 at wp-schulz.de

Google fuer Linux-Fragen => http://www.google.de/linux <=
HeliKopf
2009-11-18 14:22:58 UTC
Permalink
Post by Werner P. Schulz
... wenn es nicht zwingend notwendig ist, temporäre Tabellen auf dem
SQL-Server zu speichern, dann könntest du MS Query verwenden. Damit
kannst du Abfragen erstellen und an den SQL-Server schicken.
Tja genau da liegt der Hund begraben - den Umgang mit "nur"
Datenselektionen bekomme ich ohne Probleme hin nur das posten eines
Statements mit zwischenspeicherung von temporären Tabellen am Server
schaffe ich einfach nicht. Und ich möchte nur ungern alle SQL's so
umbauen, dass ich keine Zwischenspeicherung mehr brauche.
Hat noch jemand eine Idee oder einen Hinweis dazu für mich?
Bin für jede Hilfe dankbar!

Servus, Helmut.
Bernhard Sander
2009-11-18 14:38:36 UTC
Permalink
Hallo Helmut,
Post by HeliKopf
Tja genau da liegt der Hund begraben - den Umgang mit "nur"
Datenselektionen bekomme ich ohne Probleme hin nur das posten eines
Statements mit zwischenspeicherung von temporären Tabellen am Server
schaffe ich einfach nicht. Und ich möchte nur ungern alle SQL's so
umbauen, dass ich keine Zwischenspeicherung mehr brauche.
Wie wär's mit stored procedures auf dem SQL-Server? Wenn der groß genug ist,
kann der sowas.

Gruß
Bernhard Sander
HeliKopf
2009-11-18 15:15:39 UTC
Permalink
Post by Bernhard Sander
Wie wär's mit stored procedures auf dem SQL-Server? Wenn der groß genug ist,
kann der sowas.
Hallo Bernhard,

darum wollte ich mich eigentlich herummogeln, da das nur unsere IT
erstellen kann, als "normaler" User kann/darf ich die leider nicht
anlegen. Wird aber wohl nix anderes übrig bleiben.

Vielen Dank für die ganzen Hinweise!

Servus, Helmut.
Loading...