Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Passwort Abfrage über Query automatisieren

Forumthread: Passwort Abfrage über Query automatisieren

Passwort Abfrage über Query automatisieren
11.11.2004 11:08:07
Christian
Hallo,
ich habe in Access einige Abfragen, die alle auf dieselbe Oracle Datenbank zugreifen. In Excel führe ich diese Abfragen über Query durch.
Allerdings muss ich mich bei jeder Query erneut an der Oracle Datenbank anmelden, was bei über zehn Abfragen ziemlich störend ist, vor allem, weil es sich immer um das gleiche Passwort handelt.
Meine Vorstellung wäre ein Makro welches alle Queries enthält, die Passwort Abfrage aber automatisch erledigt.
Die Queries sind ja kein Problem mit dem Makro Rekorder, aber vielleicht kann mir jemand bzgl. dem Passwort helfen.

Sub Abfrage_Query()
With ActiveSheet.QueryTables.Add(Connection:= "FINDER;C:\***.dqy" , Destination:=Range("X1"))
.Name = "ELDIW6_R1"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = True
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With
End Sub

Danke im Voraus
mfg
Christian
Anzeige
AW: Passwort Abfrage über Query automatisieren
Andre
Hi Christian,
ich kenn mich zwar nicht mit Oracle aus, aber bei Abfragen von anderen Datenbanken (z.B. Access oder Navision) funktioniert´s mit der Übergabe des Passwortes in der Abfragezeile.
Versuch mal so etwas:
dim Passwort as string
Passwort = Application.InputBox("Passwort")
With ActiveSheet.QueryTables.Add(Connection:= "FINDER;C:\***.dqy" , PWD=Passwort , Destination:=Range("X1"))
usw.
So könntest du die Inputbox einmal aufrufen, das Passwort einmalig eingeben und als Variabel weiter verwenden.
Gruß Andre
Anzeige
AW: Passwort Abfrage über Query automatisieren
11.11.2004 13:31:39
Christian
Hallo,
leider erhalte ich bei diesem Code immer einen Syntaxfehler bei PWD=Passwort.
Weißt du woran das liegt?
dim Passwort as string
Passwort = Application.InputBox("Passwort")
With ActiveSheet.QueryTables.Add(Connection:= "FINDER;C:\***.dqy" , PWD=Passwort , Destination:=Range("X1"))
mfg
Christian
Anzeige
AW: Passwort Abfrage über Query automatisieren
11.11.2004 13:40:00
Andre
Das liegt sicher daran, dass die Eigenschaft bei einer Oracle-DB nicht so mit PWD festgelegt wird. Wäre auch zu schön einfach gewesen!
Das ist etwas kniffliger, da Excel diese Eigenschaft nicht mit aufzeichnet (Hat mich auch etwas Nerven gekostet!), aber das Prinzip sollte dann funktionieren.
Da müßtest du ´n bißchen im Netz suchen, wie man die Passwort-Eigenschaft an Oracle-DBs angeben kann.
Sorry, aber da kann ich dir nicht sinnvoll weiterhelfen.
Viel Glück.
Andre
Anzeige
AW: Passwort Abfrage über Query automatisieren
11.11.2004 13:42:34
Christian
Alles klar,
trotzdem vielen Dank.
Vielleicht kann mir ja noch jemand anderes helfen
mfg
Christian
AW: Passwort Abfrage über Query automatisieren
11.11.2004 14:05:36
Christian
Alles klar,
trotzdem vielen Dank.
Vielleicht kann mir ja noch jemand anderes helfen
mfg
Christian
AW: Passwort Abfrage über Query automatisieren
ypsilon
hi Christian,
mal als muster:

Sub einlesen()
connstring = "ODBC;DRIVER={Microsoft ODBC for Oracle};UID=public_user;PWD=public;SERVER=pdpx.prod.berta"
sql_statement = "select max(lfdparameternr)+1 from pd_parameter"
With Sheets(2).QueryTables.Add(Connection:=connstring, Destination:=Worksheets(2).Range("A1"))
.BackgroundQuery = False
.Sql = sql_statement
.Refresh
End With
End Sub

cu Micha
Anzeige
AW: Passwort Abfrage über Query automatisieren
12.11.2004 09:55:07
Christian
Hi,
vielen Dank für die hilfe. Leider hatte ich gestern keine Zeit mehr es zu testen.
Ich werde es aber gleich versuchen und dann Bescheid geben.
mfg
Christian
AW: Passwort Abfrage über Query automatisieren
12.11.2004 10:39:10
Christian
Hallo,
also nachmal vielen Dank für die Hilfe. Es klappt auch.
Jetzt möchte ich aber bestimmte Werte dieses Oracle Datenbank mit einer anderen Oracle Datenbank vergleichen.
Kann ich einfach einen zweiten connstring einfügen?
Als ich es ausprobiert habe, habe ich einen "allgemeinen ODBC Fehler" bekommen.
Kannst du mir noch mal helfen?
Danke im Voraus.
mfg
Christian
Anzeige
AW: Passwort Abfrage über Query automatisieren
12.11.2004 10:46:09
Christian
Hallo,
also nachmal vielen Dank für die Hilfe. Es klappt auch.
Jetzt möchte ich aber bestimmte Werte dieses Oracle Datenbank mit einer anderen Oracle Datenbank vergleichen.
Kann ich einfach einen zweiten connstring einfügen?
Als ich es ausprobiert habe, habe ich einen "allgemeinen ODBC Fehler" bekommen.
Kannst du mir noch mal helfen?
Danke im Voraus.
mfg
Christian
Anzeige
AW: Passwort Abfrage über Query automatisieren
yps
hi Christian,
einfach die variable connstring ändern (und logischerweise die datenbank und die tabelle)
beispiel

Sub einlesen()
connstring1 = "ODBC;DRIVER={Microsoft ODBC for Oracle};UID=public_user;PWD=public;SERVER=pdpx.prod.berta"
sql_statement = "select max(lfdparameternr)+1 from pd_parameter"
With Sheets(1).QueryTables.Add(Connection:=connstring1, Destination:=Worksheets(1).Range("A1"))
.BackgroundQuery = False
.Sql = sql_statement
.Refresh
End With
connstring2 = "ODBC;DRIVER={Microsoft ODBC for Oracle};UID=public_user;PWD=public;SERVER=pdpx.test.berta"
sql_statement = "select max(lfdparameternr)+1 from pd_parameter"
With Sheets(1).QueryTables.Add(Connection:=connstring2, Destination:=Worksheets(2).Range("A1"))
.BackgroundQuery = False
.Sql = sql_statement
.Refresh
End With
End Sub

cu Micha
p.s. die meisten "antworter" geistern in mehreren foren rum
Anzeige
AW: Passwort Abfrage über Query automatisieren
12.11.2004 11:08:55
Christian
Hi Micha,
alles klar klappt. Jetzt muss ich meine SQL Anfragen noch entsprehend formulieren und dann bin ich schon einen großen Schritt weiter.
Falls ich nochmal ein Problem habe, melde ich mich einfach nochmal.
Vielen dank
mfg
Christian
AW: Passwort Abfrage über Query automatisieren
12.11.2004 11:23:47
Christian
Hallo,
jetzt habe ich doch noch ein Problem.
ich muss in dem With Anweisungsblock mit zwei Datenbanken arbeiten, da ein Abgleich notwendig ist.
With Sheets(1).QueryTables.Add(Connection:=connstring1, Destination:=Worksheets(1).Range("A1"))
Das würde bedeuten, dass ich eine zweite Connection Anweisung benötige, oder?
Also wenn ich eine zweite Connection einfüge erhalte ich eine Fehlermeldung.
weißt du da eine Lösung?
mfg
Christian
Anzeige
AW: Passwort Abfrage über Query automatisieren
yps
hi Christian,
deswegen laufen meine beiden abfragen im beispiel auf 2 unterschiedlichen tabellen !
und logischerweise hintereinander in zwei statements
mit diesen beiden tabellen kannst du dann arbeiten (vergleichen etc.)
oder du machst einen outerjoin in der sql-abfrage (da kommen dann deine sql-kenntnisse zum tragen)
cu Micha
Anzeige
AW: Passwort Abfrage über Query automatisieren
12.11.2004 12:51:48
Christian
Alles klar.
Danke für deine hilfe
mfg
Christian
danke für die rückmeldung :-) o.t.
yps
.
;
Anzeige
Anzeige

Infobox / Tutorial

Passwort Abfrage über Query automatisieren in Excel


Schritt-für-Schritt-Anleitung

  1. Makro erstellen: Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Neues Modul hinzufügen: Klicke auf "Einfügen" > "Modul".

  3. VBA-Code eingeben: Füge den folgenden VBA-Code ein, um eine Passwortabfrage zu integrieren:

    Sub Abfrage_Query()
       Dim Passwort As String
       Passwort = Application.InputBox("Bitte Passwort eingeben", Type:=2) ' Type 2 = Text
       With ActiveSheet.QueryTables.Add(Connection:="FINDER;C:\***.dqy;PWD=" & Passwort, Destination:=Range("X1"))
           .Name = "ELDIW6_R1"
           .FieldNames = True
           .RowNumbers = False
           .FillAdjacentFormulas = False
           .PreserveFormatting = True
           .RefreshOnFileOpen = False
           .BackgroundQuery = True
           .RefreshStyle = xlInsertDeleteCells
           .SavePassword = True
           .SaveData = True
           .AdjustColumnWidth = True
           .RefreshPeriod = 0
           .PreserveColumnInfo = True
           .Refresh BackgroundQuery:=False
       End With
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und gehe zurück zu Excel. Drücke ALT + F8, wähle das Makro Abfrage_Query aus und klicke auf "Ausführen". Gib das Passwort ein, wenn du dazu aufgefordert wirst.


Häufige Fehler und Lösungen

  • Syntaxfehler bei PWD=Passwort: Stelle sicher, dass du die Syntax korrekt verwendest. In Excel VBA ist die Verwendung von PWD nicht immer möglich. Übergebe das Passwort direkt in der Verbindungszeichenfolge.

  • Allgemeiner ODBC-Fehler: Überprüfe deine ODBC-Verbindungszeichenfolge auf korrekte Treiber- und Serverangaben. Stelle sicher, dass die Datenbank erreichbar ist.


Alternative Methoden

Eine alternative Methode ist die Verwendung von mehreren QueryTables, um Daten aus verschiedenen Datenbanken abzufragen. Hier ein Beispiel:

Sub Mehrere_Abfragen()
   Dim connstring1 As String
   Dim connstring2 As String

   connstring1 = "ODBC;DRIVER={Microsoft ODBC for Oracle};UID=public_user;PWD=public;SERVER=pdpx.prod.berta"
   connstring2 = "ODBC;DRIVER={Microsoft ODBC for Oracle};UID=public_user;PWD=public;SERVER=pdpx.test.berta"

   With Sheets(1).QueryTables.Add(Connection:=connstring1, Destination:=Worksheets(1).Range("A1"))
       .BackgroundQuery = False
       .Sql = "SELECT * FROM Tabelle1"
       .Refresh
   End With

   With Sheets(2).QueryTables.Add(Connection:=connstring2, Destination:=Worksheets(2).Range("A1"))
       .BackgroundQuery = False
       .Sql = "SELECT * FROM Tabelle2"
       .Refresh
   End With
End Sub

Praktische Beispiele

Hier ist ein praktisches Beispiel, wie du Daten aus zwei Oracle-Datenbanken vergleichen kannst. Verwende die oben genannten Verbindungsstrings und SQL-Befehle, um die gewünschten Daten abzurufen und in unterschiedlichen Worksheets anzuzeigen.


Tipps für Profis

  • Automatisierung optimieren: Verwende Schleifen, um mehrere Abfragen effizient auszuführen, anstatt sie einzeln zu definieren.

  • Passwortmanagement: Lagere sensible Informationen wie Passwörter nicht im Code, sondern nutze sichere Methoden zur Speicherung.


FAQ: Häufige Fragen

1. Wie kann ich das Passwort speichern, sodass ich es nicht jedes Mal eingeben muss? Du kannst das Passwort in einer sicheren Variablen speichern oder eine Form zur Eingabe verwenden, die das Passwort speichert.

2. Funktioniert das auch mit Access-Datenbanken? Ja, das Prinzip ist ähnlich; du musst jedoch die Verbindungszeichenfolge anpassen, um auf Access zuzugreifen.

3. Was mache ich, wenn ich einen Syntaxfehler bekomme? Überprüfe die Syntax und stelle sicher, dass alle Variablen korrekt definiert sind und die Verbindungszeichenfolge richtig formatiert ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige