none
Tabellenerstellungsabfrage in passwortgeschützte DB

    Frage

  • Hallo,

    in einer größeren Datenbankumgebung möchte ich die Backends mit einem Passwort versehen.
    Das Einbinden der Tabellen und die Änderungen am VBA-Code klappen. Probleme bereiten aber die Tabellenerstellungsabfragen.

    Richte ich diese neu ein, wird das Kennwort abgefragt, welches ich eingebe. Die vom Assistenten erstellte Abfrage funktioniert dann aber nicht sondern liefert die Fehlermeldung:
    Kein zulässiges Kennwort

    Die Kennworteingabe ist aber korrekt.

    Unter folgender Adresse habe ich einen Ansatz für dieses Problem gefunden:
    http://groups.google.com/group/de.comp.datenbanken.ms-access/browse_frm/thread/ebb789bbd6151634/52d3e4ae36329393

    Ändere ich danach den SQL-String von
    SELECT Tabelle1.kghvgh, Tabelle1.KZA INTO yyy IN 'F:\db1.mdb'[;PWD=a]
    FROM Tabelle1;

    zu

    SELECT Tabelle1.kghvgh, Tabelle1.KZA INTO yyy IN 'F:\db1.mdb'[';DATABASE=F:\db1.mdb', False, False, ';PWD=a']
    FROM Tabelle1;

    ist die Abfrage einmal lauffähig.

    Bei einem erneuten Aufruf erhalte ich die Fehlermeldung:

    Tabelle 'yyy' ist bereits vorhanden.

    Wie erreiche ich das normale Verhalten, wenn keine Passwort vergeben ist, dass nur gewarnt wird, aber die Tabelle überschrieben werden kann?
    Ein vorheriges explizites Löschen der Tabelle würde ich mir gerne ersparen, da der Änderungsbedarf dann noch größer ausfallen würde. Welche möglichen Lösungen gibt es noch?

    Vielen Dank und freundliche Grüße

    Frank

    Montag, 2. April 2012 08:48

Antworten

  • Hallo Frank,
    mußte mich leider zwischenzeitlich anderweitig beschäftigen, aber ich sehe, das Dein Thread noch offen ist:

    100% verständlich ist Dein Problem noch nicht, aber ich gehe einmal davon aus, daß es irgendwie sinnvoll sein kann, via Tabellenerstellungsabfrage eine Tabelle (ich nehme an, vom FE aus im BE) zu erstellen und dieselbe Tabelle durch eine andere zu ersetzen. Nicht ganz klar ist, warum, wie Du schreibst, die Änderungen am VBA-Code klappen. Daraus entnehme ich, daß VBA-Code vorhanden ist (was ich bei einer "größeren Datenbankumgebung") auch vermutet hätte. Also wäre doch die .delete-Methode machbar...?

    Alternativ könntest Du m.E. entweder

    die Tabellenerstellungsabfrage durch eine Lösch- und eine Anfügeabfrage ersetzen,

    oder

    über die Befehlszeilenoption /cmd eine entspr. Löschroutine im BE (nehme ich an) auslösen

    oder

    über "drop table" eine entsprechende Löschanweisung an die externe Datenbank senden (hier fehlt mir allerdings die genaue SQL-Syntax, dieser Vorschlag richtet sich daher als Diskussionsansatz an die User-Gem.)

    Gruß Stefan

    • Als Antwort markiert E26fl Freitag, 6. April 2012 10:26
    Donnerstag, 5. April 2012 08:52

Alle Antworten

  • Ein vorheriges explizites Löschen der Tabelle würde ich mir gerne ersparen, da der Änderungsbedarf dann noch größer ausfallen würde. Welche möglichen Lösungen gibt es noch?

    Hallo Frank,

    vielleicht verstehe ich Deine Frage Falsch, aber mit

    Dim db_ext As Database
        Set db_ext = DBEngine(0).OpenDatabase("F:\db1.mdb") 'Verweis auf externe Datenbank
        Dim T As TableDef
        Set T = db_ext.TableDefs("yyy")
        db_ext.TableDefs.Delete T.Name

    ist das Löschen der Tabelle doch problemlos möglich...?

    Gruß Stefan

    Montag, 2. April 2012 17:15
  • Hallo Stefan,

    vielen Dank für Deine Antwort.

    Im VBA-Code ist das problemlos möglich. Mein Problem sind die Tabellenerstellungsabfragen (die nicht im VBA-Code stehen).

    Diese funktionieren nicht wie bisher, wenn ich die Backends mit einem Kennwort versehe. Jetzt könnte ich ja den Aufruf mit VBA machen und dort zuerst die Tabelle löschen, aber da ist die Gesamtgröße der Datenbanken das Problem. Die Datenbanken sind historisch gewachsen und die Aufrufe finden sich an diversen Stellen. Ich möchte einfach sicherstellen, keinen Aufruf zu übersehen; deshalb der Wunsch, dass nur die Tabellenerstellungsabfragen angepasst werden müssen, dann aber lauffähig sind.

    Ist mein Problem damit verständlicher?

    Vielen Dank und viele Grüße

    Frank

    Montag, 2. April 2012 21:14
  • Hallo Frank,
    mußte mich leider zwischenzeitlich anderweitig beschäftigen, aber ich sehe, das Dein Thread noch offen ist:

    100% verständlich ist Dein Problem noch nicht, aber ich gehe einmal davon aus, daß es irgendwie sinnvoll sein kann, via Tabellenerstellungsabfrage eine Tabelle (ich nehme an, vom FE aus im BE) zu erstellen und dieselbe Tabelle durch eine andere zu ersetzen. Nicht ganz klar ist, warum, wie Du schreibst, die Änderungen am VBA-Code klappen. Daraus entnehme ich, daß VBA-Code vorhanden ist (was ich bei einer "größeren Datenbankumgebung") auch vermutet hätte. Also wäre doch die .delete-Methode machbar...?

    Alternativ könntest Du m.E. entweder

    die Tabellenerstellungsabfrage durch eine Lösch- und eine Anfügeabfrage ersetzen,

    oder

    über die Befehlszeilenoption /cmd eine entspr. Löschroutine im BE (nehme ich an) auslösen

    oder

    über "drop table" eine entsprechende Löschanweisung an die externe Datenbank senden (hier fehlt mir allerdings die genaue SQL-Syntax, dieser Vorschlag richtet sich daher als Diskussionsansatz an die User-Gem.)

    Gruß Stefan

    • Als Antwort markiert E26fl Freitag, 6. April 2012 10:26
    Donnerstag, 5. April 2012 08:52
  • Hallo Stefan,

    vielen Dank, dass Du dich um das Problem kümmerst.

    > gehe einmal davon aus, daß es irgendwie sinnvoll sein kann, via
    > Tabellenerstellungsabfrage eine Tabelle (ich nehme an, vom FE aus im BE) > zu erstellen und dieselbe Tabelle durch eine andere zu ersetzen.

    Die Annahme ist richtig.

    > Nicht ganz klar ist, warum, wie Du schreibst, die Änderungen am VBA-Code klappen.

    Die klappen, weil ich bei OpenDatabase das Kennwort übergeben kann.

    > Also wäre doch die .delete-Methode machbar...?

    Ja, prinzipiell schon.

    Meine Hoffnung war nur die Abfrage ändern zu müssen, denn die Abfragen werden an mehreren Stellen aufgerufen.

    Die Arbeitsersparnis gegenüber dem Durchsuchen des gesamten Codes wäre schon lohnend gewesen, da es sich um etliche Abfragen verstreut über mehrere FE handelt und das Wartungsfenster für die Änderung eher klein ist.

    Da es wohl keinen direkten Weg gibt, werde ich es über VBA umsetzen und dann die FE in Gruppen in mehreren Wartungsfenster ändern müssen.

    > Alternativ könntest Du m.E. entweder

    > die Tabellenerstellungsabfrage durch eine Lösch- und eine Anfügeabfrage ersetzen,

    Ja, führt aber zum selben Anpassungsbedarf.

    > über die Befehlszeilenoption /cmd eine entspr. Löschroutine im BE (nehme ich an) auslösen

    > oder

    > über "drop table" eine entsprechende Löschanweisung an die externe
    > Datenbank senden (hier fehlt mir allerdings die genaue SQL-Syntax,
    > dieser Vorschlag richtet sich daher als Diskussionsansatz an die User-Gem.)

    Drop table ist bekannt. Vielen Dank für die Alternativen.

    Jetzt weiß ich, dass ich keine einfache Lösung (mit geringerem Aufwand) übersehen habe und werde mich jetzt an die Umsetzung mit VBA machen.

    PS: Sorry für das Zitieren mit ">" aber die Zitierfunktion gibt bei mir nur den ganzen Artikel aus und läßt mich nicht dazwischen schreiben. Wende ich die falsch an?

    Vielen Dank und schöne Ostertage

    Frank

    • Als Antwort markiert E26fl Freitag, 6. April 2012 10:26
    • Tag als Antwort aufgehoben E26fl Freitag, 6. April 2012 10:26
    Donnerstag, 5. April 2012 16:34
  • PS: Sorry für das Zitieren mit ">" aber die Zitierfunktion gibt bei mir nur den ganzen Artikel aus und läßt mich nicht dazwischen schreiben. Wende ich die falsch an?

    Hallo E26fl,

    Nein. Du machst nichts Falsches. Leider wird der ganze Beitrag zitiert. Ein anderer Weg, etwas aufwendiger ist wenn man im HTML den Beitrag editiert und die <blockquote>…</blockquote> selbst setzt.

    Grüße,

    Robert


    Robert Breitenhofer, MICROSOFT  Twitter Facebook
    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Freitag, 6. April 2012 10:01
    Besitzer
  • Hallo Robert,

    danke für den Hinweis.

    Viele Grüße

    Frank

    Freitag, 6. April 2012 10:25