Spaltennamen anzeigen lassen

Hi, ich hab folgendes Problem.

Ich mache ueber VBA eine Datenbank(Oracle) Abfrage und moechte diese in ein Excel-Sheet einfuegen. Die Daten werden auch korrekt angezeigt aber die Spaltennamen bekomm ich nicht hin. Hab auch schon gegoogelt und hier geschaut aber klappt alles irgendwie nicht.
Vielleicht kann wer mein Programm ergaenzen.

Sub connectiontest()

On Error GoTo fehler

Dim conn As New Connection
Dim comm As New Command
Dim rec As New Recordset
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(„Sheet2“)

'Connection String

conn.Provider = „MSDASQL.1:stuck_out_tongue_winking_eye:assword=PW:stuck_out_tongue_winking_eye:ersist Security Info=True;User ID=ID ;Data Source=Source“
conn.Open
LoginConnect = True

Set comm.ActiveConnection = conn

comm.CommandText = _

„Select * from ALL_TABLES“

rec.Open comm

ws.[a2].CopyFromRecordset rec

rec.Close: conn.Close
fehler:
LoginConnect = False

End Sub

Die dazugehoerigen Namen sollten in der Zeile A stehen.

Vielen Dank schon mal

Gruss
Heinzl

Hi, ich hab folgendes Problem.

Hi Heinzl,
zum eigentlichen Problem sagst du nur:

Die Daten werden auch
korrekt angezeigt aber die Spaltennamen bekomm ich nicht hin.
Die dazugehoerigen Namen sollten in der Zeile A stehen.

Was bedeutet das denn nun genau, sind die Spaltennamen nicht vorhanden? Stehen sie woanders in der Tabelle?

Wenn es das Problem ist daß die Spaltennamen gar nicht mit übertragen werden, sorry, ich habe null Plan von Oracle.

Gruß
Reinhard

Vielen Dank schon mal

Gruss
Heinzl

Also die Namen der Spalten werde bei dieser Anweisung nicht uebertragen und stehen gar nicht drinnen. Es werden nur die Daten uebertragen.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Die Daten werden auch
korrekt angezeigt aber die Spaltennamen bekomm ich nicht hin.
Die dazugehoerigen Namen sollten in der Zeile A stehen.

Hi Heinzl,

Do Until rst.EOF
ActiveSheet.Cells(i, 1).Value = rst.Fields(„Name“).Value
rst.MoveNext
i = i + 1
Loop

sieht doch sehr nach Überschriften aus *find*, gefunden im ersten Treffer bei:

http://groups.google.de/groups/search?hl=de&ie=UTF-8…

Ich verstehe davon nix, aber viel Erklärungen zu ADO und DAO im Link.

Gruß
Reinhard

1 Like

Vielen Dank,

hab sowas echt nicht gefunden und hab ewig gesucht.

Hallo,

schraub das doch mal mit Überschrift und Daten zu einem kompletten, lauffähigen Beispiel zusammen und poste das hier. So etwas wird häufiger gefragt, wenn ich das komplett zusammen habe, würde ich daraus gern eine FAQ bauen.

Gruß, Rainer
[MOD und FAQ-Betreuer hier]

Do Until rst.EOF
ActiveSheet.Cells(i, 1).Value =
rst.Fields(„Name“).Value
rst.MoveNext
i = i + 1
Loop

Hi, habs gerade ausprobiert, klappt aber leider nicht.
Die Ueberschriften werden nicht angezeigt und ich muss fuer „Name“ den Spaltennamen eintragen (sehr umstaendlich…vielleicht gibts da ja auch was mit …=rst.Fields("*").Value oder so.

Do Until rst.EOF
ActiveSheet.Cells(i, 1).Value =
rst.Fields(„Name“).Value
rst.MoveNext
i = i + 1
Loop

Hi, habs gerade ausprobiert, klappt aber leider nicht.
Die Ueberschriften werden nicht angezeigt und ich muss fuer
„Name“ den Spaltennamen eintragen (sehr
umstaendlich…vielleicht gibts da ja auch was mit
…=rst.Fields("*").Value oder so.

Hi Heinzl,
sorry, mangels Oracle kann ich nix testen.
Wie wär es mit

=rst.Fields(i)
=rst.Fields(i).Name

Alternativ von Oracle heraus eine von Excel lesbare Datei erzeugen.
Oder von Oracle heraus nach Excel „senden“

Gruß
Reinhard

Ich mache ueber VBA eine Datenbank(Oracle) Abfrage und moechte
diese in ein Excel-Sheet einfuegen. Die Daten werden auch
korrekt angezeigt aber die Spaltennamen bekomm ich nicht hin.
Hab auch schon gegoogelt und hier geschaut aber klappt alles
irgendwie nicht.

Hi Heinzl,

Oracle-PDF-Kurs:

http://www.rrzn.uni-hannover.de/fileadmin/kurse/mate…

kostenlos testbarer (dann 35 €) Datenviewer der u.a. Oracle DBs und Excel Tabellen anzeigen und synchronisieren kann, was ja wohl bedeutet, bei leerer Exceltabelle kopiert er von Oracle nach Excel:

[http://www.zdnet.de/itmanager/softwareguide/0,390339…](http://www.zdnet.de/itmanager/softwareguide/0,39033943,sguide-prog h_sph 2062_phtm,00.htm)

Gruß
Reinhard

Hi, ich habs jetzt.

Grossen Dank an Reinhard

Der Code ist sicherlich nicht der Beste aber wenn sich wer besser mit VBA auskennt kanns ja verbessern und hier posten.

Sub DBAbfrage()

On Error GoTo fehler

Dim conn As New Connection
Dim comm As New Command
Dim rec As New Recordset
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet2")

'Connection String

conn.Provider = "MSDASQL.1:stuck\_out\_tongue\_winking\_eye:assword=PW:stuck\_out\_tongue\_winking\_eye:ersist Security Info=True;User ID=ID ;Data Source=Source"
conn.Open
LoginConnect = True
Set comm.ActiveConnection = conn

'SQL-Befehl

comm.CommandText = \_
"SELECT \* FROM irgendwas"

'Record

rec.Open comm

'der entscheidende Teil fuer die Spaltennamen als Ueberschrift
i = 0
ed = rec.Fields.Count - 1
For i = 0 To ed
ActiveSheet.Cells(1, i + 1).Value = rec.Fields.Item(i).Name
Debug.Print rec.Fields.Item(i).Name
Next

'uebertrag der restlichen Daten ins Excel-Sheet2
ws.[a2].CopyFromRecordset rec

'Close

rec.Close: conn.Close
fehler:
LoginConnect = False

End Sub

[MOD] Pre-Tags eingefügt

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

schraub das doch mal mit Überschrift und Daten zu einem
kompletten, lauffähigen Beispiel zusammen und poste das hier.
So etwas wird häufiger gefragt, wenn ich das komplett zusammen
habe, würde ich daraus gern eine FAQ bauen.

Hi, ich habs jetzt.

Der Code ist sicherlich nicht der Beste aber wenn sich wer
besser mit VBA auskennt kanns ja verbessern und hier posten.

Hallo Heinzl, Rainer,

am Code sehe ich erst mal so auf die Schnelle nichts was verbessert werden könte, klar das Debug.Print raus und optisch komprimieren, ggfs auskommentieren was da was macht pro Zeile. Das ist aber alles nicht so wichtig.

Es gibt aber ein Problem, der Code läuft so natürlich nicht bei Anderen.
Grund ist(sind) fehlende Verweise.
Schon Dim conn As New Connection wird bemeckert, weil unbekannteer Typ.

@Rainer, ich weiß jetzt nicht ob man Verweise in VB6 kennt, sind halt Verweise auf DLLs o.ä. wo halt z.B. „Connection“ als Variablentyp bekannt gemacht, definiert, deklariert, sonstwas, wird.

Um den Code überhaupt für alle brauchbar zu machen, müßte man schon wissen welche Verweise da gesetzt werden müssen.
Und die Angabe der Excelversion mit der er bei dir läuft ist wichtig.
Vielleicht auch die Oracleversion.

Gruß
Reinhard

Fürs Archiv: Oracle in Excel importieren owT

schraub das doch mal mit Überschrift und Daten zu einem
kompletten, lauffähigen Beispiel zusammen und poste das hier.
So etwas wird häufiger gefragt, wenn ich das komplett zusammen
habe, würde ich daraus gern eine FAQ bauen.

Hi, ich habs jetzt.

Der Code ist sicherlich nicht der Beste aber wenn sich wer
besser mit VBA auskennt kanns ja verbessern und hier posten.

Hallo Heinzl, Rainer,

am Code sehe ich erst mal so auf die Schnelle nichts was
verbessert werden könte, klar das Debug.Print raus und optisch
komprimieren, ggfs auskommentieren was da was macht pro Zeile.
Das ist aber alles nicht so wichtig.

Debug.Print raus stimmt

Es gibt aber ein Problem, der Code läuft so natürlich nicht
bei Anderen.
Grund ist(sind) fehlende Verweise.
Schon Dim conn As New Connection wird bemeckert, weil
unbekannteer Typ.

Available References:
Visual Basic For Applications
Microsoft Excel 11.0 Object Library
OLE Automation
Microsoft Office 11.0 Object Library
Mocrosoft ActiveX Data Objects 2.7 Library

Datenbank ist eine Oracle 9i
und ODCB treiber ist auch noch installiert.

@Rainer, ich weiß jetzt nicht ob man Verweise in VB6 kennt,
sind halt Verweise auf DLLs o.ä. wo halt z.B. „Connection“ als
Variablentyp bekannt gemacht, definiert, deklariert, sonstwas,
wird.

Um den Code überhaupt für alle brauchbar zu machen, müßte man
schon wissen welche Verweise da gesetzt werden müssen.
Und die Angabe der Excelversion mit der er bei dir läuft ist
wichtig.
Vielleicht auch die Oracleversion.

Gruß
Reinhard

Mehr weiss ich jetzt auch nicht, hab mir die sachen halt im Internet und beim Kofler zusammengesucht :smile:

Gruss
Heinz

Um den Code überhaupt für alle brauchbar zu machen, müßte man
schon wissen welche Verweise da gesetzt werden müssen.
Und die Angabe der Excelversion mit der er bei dir läuft ist
wichtig.
Vielleicht auch die Oracleversion.

Mehr weiss ich jetzt auch nicht, hab mir die sachen halt im
Internet und beim Kofler zusammengesucht :smile:

Hallo Heinz,

kein Problem, ruf ich halt bei Kofler an und frage welche Excelversion du hast.
PS: wer issen das überhaupt, hab grad keine Telefonnummer von ihm :smile:

Okay, spar mir den Anruf, aufgrund der Verweise ist es XL2003.

Gruß
Reinhard

Hi ich habs nicht zuhause testen koennen aber ich wurde es noch so ergaenzen:

dim Conn As ADODB.Connection
dim Rs As ADODB.Recordset

set Conn = new ADODB.Connection
Conn.ConnectionString = "Provider=MSDAORA:stuck\_out\_tongue\_winking\_eye:assword=deinpass;User ID=deinuser;Data Source=deindatabase"
Conn.Open
set rs = new ADODB.Recordset
rs.open "select \* from tbl"
for i = 0 to rs.fields.count - 1
 ActiveSheet.Cells(1, i + 1).Value = rs.Fields.Item(i).Name
next i
'weitere aufgaben wie z.B.
dim counter as integer
counter = 2
do until rs.eof
 for i = 0 to rs.fields.count - 1
 ActiveSheet.Cells(counter, i + 1).Value = rs(i)
 next i
 counter = counter + 1
 rs.movenext
loop
rs.close
Conn.close
set rs=nothing
set conn=nothing

cheers

[MOD] Pre-Tags eingefügt
woolli.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi,

bitte noch testen, bevor es in den FAQ landet, da bleibt es dann ja ein paar Jahre stehen, da wären Fehler unangenehm.

Gruß, Rainer

Hallo Reinhard,

Es gibt aber ein Problem, der Code läuft so natürlich nicht
bei Anderen.

das ist IMO nur eine Zeile die angepasst werden muss, alles andere ist für jede Datenbank zu verwenden, für die ein ODBC-Treiber installiert ist.

Grund ist(sind) fehlende Verweise.
Schon Dim conn As New Connection wird bemeckert, weil
unbekannteer Typ.

@Rainer, ich weiß jetzt nicht ob man Verweise in VB6 kennt,

Ja, klar. :smile:

sind halt Verweise auf DLLs o.ä. wo halt z.B. „Connection“ als
Variablentyp bekannt gemacht, definiert, deklariert, sonstwas,
wird.

Um den Code überhaupt für alle brauchbar zu machen, müßte man
schon wissen welche Verweise da gesetzt werden müssen.

Der auf den installierten und aktivierten ODBC-Treiber. Hab’ ich in der Firma für SAPDB gemacht, war auch ohne Anleitung kein Problem. Ich denke, wer den Code hier sucht, hat diese Hürde längst genommen. :smile:

Und die Angabe der Excelversion mit der er bei dir läuft ist
wichtig.
Vielleicht auch die Oracleversion.

OK, steht ja jetzt da, ich werde es in der FAQ mit verarbeiten … das werde ich wohl am WE ganz in Ruhe machen … :smile:

Gruß, Rainer

Sorry aber ich hab gedacht „Michael Kofler“ wär ein begriff für Programmierer. Für mich ist er einer und ich programmier nicht viel.

Die Excel version ist 2003 hast richtig geraten

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

dim counter as integer
counter = 2
do until rs.eof
for i = 0 to rs.fields.count - 1
ActiveSheet.Cells(counter, i + 1).Value = rs(i)
next i
counter = counter + 1
rs.movenext
loop

So hab ichs jetzt auch gelöst aber Danke nochmal.
Im Endefekt macht wohl

ws.[a2].CopyFromRecordset rec

das Selbe.

Gruss
Heinzl

Loesung als Sub
und hier nochmal eine loesung fuer vba. Man kann diese sub in ein modul einbinden und einfach aufrufen wann es benoetigt wird. Ein verweis auf Microsoft ActiveX Data Objects 2.6 oder > wird benoetigt.

Public Sub ExportOracle(xlsSheet As Worksheet, sqlQuery As String, oraConnection As String)
 Dim Conn As ADODB.Connection
 Set Conn = New ADODB.Connection
 Conn.Open oraConnection
 Dim Rs, i, counter
 Set Rs = Conn.Execute(sqlQuery)
 For i = 0 To Rs.Fields.Count - 1
 xlsSheet.Cells(1, i + 1).Value = Rs.Fields.Item(i).Name
 Next
 counter = 2
 Do Until Rs.EOF
 For i = 0 To Rs.Fields.Count - 1
 xlsSheet.Cells(counter, i + 1).Value = Rs(i)
 Next
 counter = counter + 1
 Rs.MoveNext
 Loop
 Rs.Close
 Conn.Close
 Set Rs = Nothing
 Set Conn = Nothing
End Sub

das ganze kann dann so ausgefuehrt werden:

Private Sub getExport()
 Dim strSQL, strConn As String
 strSQL = "Select \* from tbl;"
 strConn = "Provider=MSDAORA:stuck\_out\_tongue\_winking\_eye:assword=deinpass;User ID=deinuser;Data Source=deindb:stuck\_out\_tongue\_winking\_eye:ersist Security Info=True"
 Call ExportOracle(Me.ActiveSheet, strSQL, strConn)
End Sub

cheers
Woolli

[MOD] Tags geändert.