Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

SQL Tabellenverknüpfung speichern

Begonnen von cyberchris, Juli 15, 2010, 13:16:02

⏪ vorheriges - nächstes ⏩

cyberchris

ich muss auf ein fileserver kommen und dort liegt eine mdb mit passwortschutz
x:\.. kann ich nicht angeben, da nicht sichergestellt ist, dass die Laufwerke immer gleich angebunden sind.

database

Hi,

naja, dann denke ich, dass auf dem Fileserver eine Freigabe exisiteren sollte, in der deine DB abgelegt ist.
Die entsprechenden Zugriffsrechte (Freigabe und NTFS-Berechtigungen) vorausgesetzt sollte die DB schon errecihbar sein.

Per UNC-Pfad  mit \\Servername\Freigabename\Datenbank.mdb

Zitatx:\.. kann ich nicht angeben, da nicht sichergestellt ist, dass die Laufwerke immer gleich angebunden sind
WHY???

Werden die Netzlaufwerke denn nicht per Anmeldescript eingebunden? (net use X: \\Servername\Freigabename /persistent:yes)

cyberchris

#17
hi, die db ist ja erreichbar, aber wenn ich db mit kennwort versehe, dann komme ich nicht mit meiner bisherigen Lösung drauf.
Also es würde funktionieren, wenn die mdb nicht kennwortgeschützt ist.

macht es einen Unterschied, ob ich

g:\...

oder

\\...

im code verwende?

Mein Problem ist, dass ich den sql-code nicht hinbekomme, dass er das kennwort korrekt übergibt.

cyberchris

#18
geht das nicht?

und kann ich im SQL-Code den Pfad/Dateiname auch zuammensetzen, wie in VBA?

verz = DFirst("Verzeichnis", "werk")
verz = verz & "\Datensätze\pmdb_dokumente.mdb"

so funktioniert es nicht:

SELECT dbo_PMM_PROT.PMID, dbo_PMM_PROT.FIRMENNR, dbo_PMM_PROT.ZIFFER, dbo_PMM_PROT.KLASSE, dbo_PMM_PROT.BEZEICHN, dbo_PMM_PROT.KDIENST, dbo_PMM_PROT.KDATUM, dbo_PMM_PROT.BELEGART, dbo_PMM_PROT.ADATUM, dbo_PMM_PROT.GUID, dbo_PMM_PROT.ARCUSER, dbo_PMM_PROT.DFORMAT INTO PMM_PROTOKOLL IN verz
FROM dbo_PMM_PROT;


gruß
chris

cyberchris

ich bitte noch im Hilfe für das Problem mit der Kennwortübergabe und die Verzeichnisangabe.

Herzlichen Dank

database

Guten Morgen,

Zitatso funktioniert es nicht
Das will ich dir gerne glauben!

Zitatund kann ich im SQL-Code den Pfad/Dateiname auch zuammensetzen, wie in VBA?
NEIN

Das was du da schreibst ist kein SQL-Befehl, der funktionieren kann.
Die Syntax des SELECT ... INTO ist falsch, da fehlt ausserdem der Name der Zieltabelle in deiner DB.

Bitte schau dazu hier mal rein http://www.w3schools.com/Sql/sql_select_into.asp

Dann fällt mir auf, dass deine Quell-Tabelle mit dem Präfix dbo benannt ist - ist das sicher kein SQL-Server - die Frage habe ich schon einmal gestellt ...

cyberchris

die Zieltabelle fehlt nicht:
... INTO PMM_PROTOKOLL IN ...

dbo_PMM_PROT ist eine verknüpfte SQL-Tabelle in der Datenbank.

Nochmals zum Problem. Es funktioniert ja so alles, außer eben eine Übergabe des Passworts(natürlich nicht mit der Var"verz"), das ich gerne in der Ziel-Mdb einstellen würde.

gruß

database

#22
Hallo,
also dann versuchen wir's nochmal  ;)

Zitatdie Zieltabelle fehlt nicht:
... INTO PMM_PROTOKOLL IN ...
stimmt - habe ich leider nicht gesehen scheinbar haben mich die Feldnamen verwirrt.

Also da du dich vehement gegen den Beispielcode von donkarl wehrst  ;)  versuch mal meine umgebaute Version einzubinden.
In der Kurzfassung (auskommentiert) klappt das bei mir!


Public Sub DBZugriff()

   Dim db As DAO.Database, strDb As String
   Dim acc As New Access.Application 'weitere Access-Instanz erstellen
   Const strPWD As String = ";pwd=123"
   strDb = "X:\DeinPfad\muster.mdb"
   'bzw.   "\\Servername\Freigabename\Datenbank.mdb"
   'Datenbank mit Kennwort öffnen
   Set db = acc.DBEngine.OpenDatabase(strDb, False, False, strPWD)
   acc.OpenCurrentDatabase strDb
   'db.Execute ("SELECT * INTO Zieltabelle FROM Quelltabelle")
   
   db.Execute ("SELECT dbo_PMM_PROT.PMID, dbo_PMM_PROT.FIRMENNR, dbo_PMM_PROT.ZIFFER, dbo_PMM_PROT.KLASSE, dbo_PMM_PROT.BEZEICHN, " & _
               "dbo_PMM_PROT.KDIENST, dbo_PMM_PROT.KDATUM, dbo_PMM_PROT.BELEGART, dbo_PMM_PROT.ADATUM, dbo_PMM_PROT.GUID, " & _
               "dbo_PMM_PROT.ARCUSER, dbo_PMM_PROT.DFORMAT INTO PMM_PROTOKOLL FROM dbo_PMM_PROT;")


   Set db = Nothing
   Set acc = Nothing
 
End Sub


Dass du dein Kennwort einbauen musst versteht sich von selbst. 8)

Ach ja und ich gehe davon aus, dass sich beide Tabellen in der gleich DB befinden, also in deinem Backend.
Der obige Code soll dann in deinem FE sein.

Untenstehende Codeteile kannst du m.E. auskommentieren da ein sichtbares Öffnen der Datenbank nicht notwendig erscheint.

   Dim acc As New Access.Application 'weitere Access-Instanz erstellen
   acc.OpenCurrentDatabase strDb
    Set acc = Nothing


HTH
Peter

cyberchris

achso jetzt verstehe ich. Benötige also gar keine Abfrage.
Dachte ich benötige für meinen Fall eine Tabellenerstellungsabfrage. Geht das dann genauso mit VBA?
Welche Vorteil oder warum gibt es die Möglichkeit als Abfrage:Tabellenerstellungsabfrage?

Probier es gleich mal aus.

danke
gruß Christoph

database

Guten Morgen,

ZitatBenötige also gar keine Abfrage

naja, schau, das kommt darauf an von wo aus man das sieht.
Arbeitet man mit 'normalen' Access-Boardmitteln dann kommt diese 'Tabellenerstellungsabfrage' - was für ein Wort - zum Tragen,
in dem man aus einer ganz einfachen Auswahlabfrage im Abfragenentwurf eine solche macht.
Wechselst du danach im Abfragenentwurf auf die SQL-Ansicht hast du meist schon einen brauchbaren SQL-String zur Verfügung, den du dann ....

ZitatBenötige also gar keine Abfrage.
Dachte ich benötige für meinen Fall eine Tabellenerstellungsabfrage. Geht das dann genauso mit VBA?
Das stimmt so nicht ganz ...

Arbeitest du mit VBA, dann kommt hier unter Anderem ein SQL-String zum Tragen, der an geeigneter (richtiger) Stelle eingetragen oft Wunder wirkt :)
Nun ist es so, dass man mit VBA und den darin verwendbaren Datenzugriffsmethoden und Funktionalitäten ja nicht nur Datensätze auslesen und in Recordsets verpacken kann sondern auch über Commandobjekte bei ADO und über die Executemethode bei DAO SQL-Befehle gegen eine Datenbank schicken kann.
Im Beitrag habe ich unter db.Execute eben genau den SQL-String der von dir benötigten Tabellenerstellungsabfrage eingebaut.

Was nun noch zu testen ist, wäre die Angelegenheit mit dem UNC-Pfad ("\\Servername\Freigabename\Datei....")
Die Passwortübergabe funktioniert definitiv, wurde von mir getestet! 8)

Grüße
Peter


cyberchris

muss ich am Dienstag mal austesten und gebe anschließend Rückmeldung.

cyberchris

Hallo,

bei mir erscheint die Meldung: Laufzeitfehler 3078
...findet die Eingangstabelle dbo_PMM_PROT nicht ...

Dabei ist die SQL-Tabelle in der mdb verknüpft und kann ich auch öffnen.
In der Tabellenerstellungsabfrage hats ja auch funktioniert.

Woran kann das liegen?

danke
Christoph

cyberchris

@database
kannst du mir da weiterhelfen?

danke

DF6GL

#28
Hallo,  

Access wird schon recht haben...


Kontrollier nochmal GENAU die Schreibweise und den Namen der Tabelle überall dort, wo sie verwendet wird.


Poste auch mal die gesamte Codezeile, an der der SQL-String eingesetzt ist.

cyberchris

mal ne andere frage.

die Tabelle PMM_PROTOKOLL in die geschrieben werden soll, ist auch in der geöffneten DB verknüpft. Kann ich da nicht direkt schreiben - ohne Kennwort - um dem Thema mal ein Ende zu geben?
Problematik war ursprünglich ja eine andere, dass ich den Code über eine Abfrage hatte. Aber über VBA siehts doch dann wieder anders aus.

gruß christoph