Per Abfrage Tabelle in Backed erstellen (Passwort geschützt)

Moderator: ModerationP

Per Abfrage Tabelle in Backed erstellen (Passwort geschützt)

Beitragvon TS_GAST » 27. Sep 2019, 05:49

Hallo,

ich hoffe ihr könnt mir weiterhelfen, da ich nach längerem Suchen keine Lösung gefunden habe.
Meine DB ist in Frontend und ein passwortgeschütztes Backend aufgeteilt. Im Frontend sind Abfragen die Tabellen im Backend erstellen.
Ich möchte gerne, dass ich den Erstellungsort der Tabellen per VBA ändern kann (wenn z.B. die Datenbank an einen anderen Speicherort kopiert wird).
Das funktioniert auch wenn das Backend nicht mit einem Passwort geschützt ist.
Code: Alles auswählen
Private Sub xxx_Click()

a = MsgBox("Der Speicherort (Backend) der durch Abfragen erstellten Tabellen wird geändert. Änderung durchführen?", _
 vbOKCancel + vbCritical, "Änderung ausführen")
 If a = vbOK Then

Dim db As DAO.Database
Dim qdf As QueryDef
Set db = CurrentDb
For Each qdf In db.QueryDefs
If Left(qdf.Name, 4) <> "~sq_" Then
qdf.SQL = Replace(qdf.SQL, "'C:\xxx'", "'Y:\xxx'")
End If
Next
Set qdf = Nothing
Set db = Nothing
MsgBox "Änderungen wurden durchgeführt."
End If
End Sub

Wenn das Backend geschützt ist geht dies aber nicht. Es kommt dann beim Ausführen der Abfragen eine Fehlermeldung, dass die Tabelle nicht gefunden wird.
Leider ist es jetzt aktuell so, dass es mehrere Abfragen sind und diese auch immer mal wieder ausgeführt werden müssen (ich weiß dass das nicht unbedingt ganz sinnvoll ist die Tabellen immer wieder neu zu erstellen, das lässt sich aber nicht mehr einfach ändern).
Gibt es eine Lösung, wie ich die Änderungen auch ausführen kann wenn das Backend passwortgeschützt ist?
TS_GAST
 

Re: Per Abfrage Tabelle in Backed erstellen (Passwort geschü

Beitragvon mmarkus » 27. Sep 2019, 07:50

Wenn die Tabellen verknüpft sind, musst du ja keine Angaben zur DB machen.
Wenn die genutzte Tabelle nicht verknüpft ist - oder bei einer Passthrough Abfrage, musst du einen korrekten Connectionstring verwenden.

Den korrekten Aufbau findest du auf https://www.connectionstrings.com.
ms access what else
mmarkus
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1603
Registriert: 16. Apr 2012, 16:07
Wohnort: Oberösterreich

Re: Per Abfrage Tabelle in Backed erstellen (Passwort geschü

Beitragvon TS_GAST » 27. Sep 2019, 09:40

Danke für die schnelle Antwort,
aber das verstehe ich nicht so ganz. Wenn ich als Erstellungsort nicht das Backend wähle, wird die Tabelle ja im Frontend erstellt.
Vielleicht nochmals etwas mehr Hintergrund:
Die Tabellen liegen bereits im Backend und sind dann im Frontend verknüpft, damit andere Abfragen darauf zugreifen können. Allerdings müssen die Tabellen manchmal neu mittels Abfragen erstellt werden. Dies muss dann ja im Backend erfolgen. Es erfolgt die Abfrage ob die vorhandene Tabelle gelöscht werden soll und dann wird eine neue mit gleichem Namen erstellt. Dann ist im Backend die Tabelle mit aktuellen Daten gefüllt. Die Verknüpfung im Frontend bleibt erhalten, so dass die anderen Abfragen dann auf die aktuellen Daten zugreifen.
Manuell ist es beim Erstellen der Abfragen ja auch leicht möglich den Erstellungsort zu wählen. Ich möchte nur, da es mehrere Abfragen sind den Ort bei einem Laufwerkwechsel o.Ä. per VBA ändern können.

Ich hoffe die Informationen helfen etwas weiter.
TS_GAST
 

Re: Per Abfrage Tabelle in Backed erstellen (Passwort geschü

Beitragvon mmarkus » 27. Sep 2019, 10:04

TS_GAST hat geschrieben:Die Tabellen liegen bereits im Backend und sind dann im Frontend verknüpft, damit andere Abfragen darauf zugreifen können.


Die Sache wird langsam seltsam.
Laut deinem ersten Post änderst du doch einen Pfad innerhalb der Abfrage.
Vielleicht klärst du auf, was das für einen Zweck hat.
Zeig mal einen SQL String wo du das machst.

Außerdem warum erstellst du Tabellen neu?
Wie machst du das?

Beim Ortswechsel des Backend änderst die Verknüpfungszeichenfolge bei allen betroffenen Tabellen.
Bei den Abfragen ändert sich nichts - wenn die auf verknüpfte Tabellen zugreifen.
ms access what else
mmarkus
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1603
Registriert: 16. Apr 2012, 16:07
Wohnort: Oberösterreich

Re: Per Abfrage Tabelle in Backed erstellen (Passwort geschü

Beitragvon knobbi38 » 27. Sep 2019, 10:35

@mmarkus:
Möglicherweise handelt es sich um Tabellenerstellungsabfragen. Dort ist im SQL-Stmt ein Pfad hinterlegt.

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1412
Registriert: 02. Jul 2015, 14:23

Re: Per Abfrage Tabelle in Backed erstellen (Passwort geschü

Beitragvon mmarkus » 27. Sep 2019, 10:47

knobbi38 hat geschrieben:@mmarkus:
Möglicherweise handelt es sich um Tabellenerstellungsabfragen. Dort ist im SQL-Stmt ein Pfad hinterlegt.


Genau.
Wenn so, dann einfach anwenden was ich bereits in meiner ersten Antwort geschrieben habe.
ms access what else
mmarkus
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1603
Registriert: 16. Apr 2012, 16:07
Wohnort: Oberösterreich

Re: Per Abfrage Tabelle in Backed erstellen (Passwort geschü

Beitragvon TS_GAST » 27. Sep 2019, 11:03

Hi,
es handelt sich um Tabellenerstellungsabfragen.
Diese greifen auf andere Daten zu, die sich regelmäßig ändern. Daher müssen auch die Tabellenerstellungsabfragen regelmäßig ausgeführt werden.
Es wäre sicherlich besser, wenn die Tabellen erhalten blieben und nur die Inhalte getauscht würden (Löschen + Anfügeabfrage), aber es ist leider so, dass die Tabellen immer neu erstellt werden. Das ist jetzt sehr aufwändig zu ändern.
Der Code für die Erstellungsabfragen sieht z.B. so aus (natürlich sehr stark vereinfacht):
Code: Alles auswählen
SELECT tbl01_Ausgang.test INTO [tbl01_Backend] IN 'C:xxx\Backend-DB.accdb'
FROM tbl01_Ausgang;

Da die Datenbank manchmal auf ein anderes Laufwerk verschoben wird, ist es recht aufwändig den Backendspeicherort in allen Erstellungsabfragen immer anzupassen, daher mache ich das mit dem VBA-Code, der aber bei einem Passwortschutz nicht funktioniert.
Die Tabellenverknüpfungen ändere ich auch. Aber die o.g. Abfragen erstellen teilweise die Tabellen (ich weiß das das vom Design alles nicht optimal ist, aber es ist eine ältere, gewachsene DB...)
Leider verstehe ich das mit dem Connection-String aus deinem Post nicht so richtig
TS_GAST
 

Re: Per Abfrage Tabelle in Backed erstellen (Passwort geschü

Beitragvon mmarkus » 27. Sep 2019, 11:54

TS_GAST hat geschrieben:Leider verstehe ich das mit dem Connection-String aus deinem Post nicht so richtig


Der Connection String ist die Information welche Datenquelle wie geöffnet werden soll.

Ein einfacher Weg.
Lade eine Verknüpfung in ein TableDef Objekt.
Da schaust du dir dann die Connect Eigenschaft an.
Dann weißt du wie du den String aufbauen musst.

Bei Unklarheiten einfach erstmal Eigeninitiative ergreifen und unklare Begriffe googeln.
ms access what else
mmarkus
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1603
Registriert: 16. Apr 2012, 16:07
Wohnort: Oberösterreich

Re: Per Abfrage Tabelle in Backed erstellen (Passwort geschü

Beitragvon TS_GAST » 27. Sep 2019, 13:05

Alles klar,

ich habe das nun so angepasst, dass es funktioniert, allerdings nur wenn im Backend die Tabelle noch nicht vorhanden ist.
Wenn Sie schon vorhanden ist erfolgt keine Abfrage ob die bestehende gelöscht werden soll, sondern nur die Meldung dass die Tabelle schon existiert, es wird also keine neue Tabelle erstellt.
Daher werde ich wohl doch alle Erstellungsabfragen umbauen.
TS_GAST
 

Re: Per Abfrage Tabelle in Backed erstellen (Passwort geschü

Beitragvon knobbi38 » 27. Sep 2019, 13:22

@mmarkus:
Der Connectionstring ist bei einer Tabellenerstellungsabfrage für eine externe Access-DB in der DAO.QueryDef leider nicht gesetzt.
Habe ich gerade nochmal überprüft und bin ziemlich überrascht.

@TS-Gast:
Du must den SQL String mit der richtigen Syntax verwenden:
Code: Alles auswählen
qdf.SQL = "SELECT 1 as ID INTO MyNewTable IN """" [MS ACCESS;PWD=0123456;Database=x:\DatabaseXXX.accdb;];"
qdf.Execute

Dieses ist ein Beispiel, wo eine Tabelle MyNewTable mit einem Feld ID und dem Inhalt 1 angelegt wird, aber die Syntax der IN Klausel ist hier entscheidend. Man achte auf die beide Doublequotes, die hier bei der Stringzuweisung nochmal quotiert sind!!"

Die von dir angegeben Synaxt funktioniert in einer mit QBE erstellten Abfrage, lässt sich aber leider nicht bei einer Änderung der DAO.Querydefs in der Eigenschaft SQL verwenden. Selbst die Zuweisung an sich selber führt zu einem Fehler. Hier stimmt auch nicht mehr die DAO Dokumentation, nach der es eigentlich eine Property "DestConnectStr" geben sollte. Möglicherweise steht diese Property nur bei anderen DB-Typen oder in ADO zur Verfügung.

Mit der oben angebenen Syntax klappt es jedenfalls. Ggf. mußt du die bestehenden SQL-Stmts umbauen.

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1412
Registriert: 02. Jul 2015, 14:23

Re: Per Abfrage Tabelle in Backed erstellen (Passwort geschü

Beitragvon mmarkus » 27. Sep 2019, 14:06

knobbi38 hat geschrieben:@mmarkus:
Der Connectionstring ist bei einer Tabellenerstellungsabfrage für eine externe Access-DB in der DAO.QueryDef leider nicht gesetzt.


Alles andere wäre doch seltsam. Der Connection String ist ja Teil der SQL Anweisung.

Ich bevorzuge übrigens diese Schreibweise:
Code: Alles auswählen
"SELECT 1 as ID INTO [MS ACCESS;Database=x:\DatabaseXXX.accdb;PWD=DeinPasswort].MyNewTable"


Das mit den Leerzeichen finde ich seltsam. Die haben ja keine Wirkung.
ms access what else
mmarkus
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1603
Registriert: 16. Apr 2012, 16:07
Wohnort: Oberösterreich

Re: Per Abfrage Tabelle in Backed erstellen (Passwort geschü

Beitragvon knobbi38 » 27. Sep 2019, 14:19

@mmakrus:
Genau - diese Schreibweise ist viel besser :)

Hatte ich leider nur nicht mehr so genau parat, weil das bei mir eher selten verwendet wird.

Die andere Schreibweise mit den Doppelquotes (keine Leerzeichen!) funktioniert ohne sie nicht und stammt wahrscheinlich noch aus frühen Jet Zeiten. Aber wie gesagt, die andere Schreibweise ist besser und einfacher zu handhaben. Am besten gleich wieder vergessen.

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1412
Registriert: 02. Jul 2015, 14:23

Re: Per Abfrage Tabelle in Backed erstellen (Passwort geschü

Beitragvon TS_GAST » 30. Sep 2019, 07:56

Vielen dank nochmal,

so ähnlich hatte ich es umgesetzt.
Das funktioniert auch gut beim ersten Mal. Wenn dann die Tabelle aber im Backend bereits existiert und die Abfrage erneut ausgeführt wird kommt die Meldung
"Tabelle 'MyNewTable' ist bereits vorhanden." und die bereits vorhandene Tabelle wird nicht gelöscht und neu erstellt. Es bleiben also die alten Daten vorhanden.
Daher habe ich jetzt beschlossen die Abfragen alle auf Anfügeabfragen umzustellen und die alten Tabelleninhalte vorher zu löschen.
TS_GAST
 

Re: Per Abfrage Tabelle in Backed erstellen (Passwort geschü

Beitragvon mmarkus » 30. Sep 2019, 08:10

TS_GAST hat geschrieben:Es bleiben also die alten Daten vorhanden.Daher habe ich jetzt beschlossen die Abfragen alle auf Anfügeabfragen umzustellen und die alten Tabelleninhalte vorher zu löschen.


Das Löschen der Tabelle löscht keine Daten.
In Access werden Daten als gelöscht gekennzeichnet.
Beim Komprimieren, wird dann eine neue Datei erstellt und die "gelöschten Daten" werden dann nicht mehr in die neue Datei geschrieben.
Wenn dann musst du die bestehende Tabelle zuerst löschen und dann die neue erstellen.
ms access what else
mmarkus
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1603
Registriert: 16. Apr 2012, 16:07
Wohnort: Oberösterreich


Zurück zu Access Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste