Ich habe eine VBA-Prozedur die beim Starten einer Datenbank (mit verknüpften
Tabellen) überprüft,
ob die Verknüpfungspfade der Tabellen noch aktuell sind. Ist dies nicht der
Fall
(Quelldatenbank wurde umbenannt und/oder in einen anderen Ordner
verschoben), öffnet
sich automatisch ein Dialogfenster, in dem man die neue bzw. verschobene
Quelldatenbank auswählen
muß. Anschließend wird die Tabellenverknüpfung automatisch aktualisiert,
ohne manuelle Eingriffe
vornehmen zu müssen. Tolle Sache!
Nachteil dieser Prozedur: für jede verknüpfte Tabelle muß die Datenquelle
erneut ausgewählt
werden (das Dialogfenster bleibt geöffnet).
Nun möchte ich diese Prozedur so abgeändert haben, daß die Datenquelle nur
einmalig ausgewählt
werden muß und der Pfad dann automatisch für alle verknüpften Tabellen gilt.
Selber bekomme ich das aber nicht hin.
Würde sich jemand dazu bereit erklären, diese kleine Änderung für mich
durchzuführen?
Im voraus besten Dank
Gruß
Stefan
* Stefan Schiller (Wed, 22 Aug 2001 12:10:24 +0200):
>Ich habe eine VBA-Prozedur die beim Starten einer Datenbank (mit verknuepften
>Tabellen) ueberprueft, ...
>Nun moechte ich diese Prozedur so abgeaendert haben, dass die Datenquelle nur
>einmalig ausgewaehlt werden muss und der Pfad dann automatisch fuer alle
>verknuepften Tabellen gilt.
Schau Dir mal das Modul Relink von Claus Lerch bei
http://www.access-guru.de im Download-Bereich an.
Gruss - Mark
--
Infos fuer Neulinge in den Access-Newsgroups unter
http://www.doerbandt.de/Access/Newbie.htm
Ich empfehle Dir, das entsprechende Codestück zu posten.
Gruss
Conny
> Nun möchte ich diese Prozedur so abgeändert haben, daß die Datenquelle nur
> einmalig ausgewählt
> werden muß und der Pfad dann automatisch für alle verknüpften Tabellen
gilt.
ich habe in einem Buch mal folgenden Code gefunden, der auch prima
funktioniert.
------------------------------------------------
In ein Standardmodul einfügen:
------------------------------------------------
Public Function LinksErneuern(strDir As String, DefaultData As Boolean) As
Boolean
'Erneuert die Verknüpfungen zur Backend-Datenbank, wenn diese ungültig
geworden sind
'Wird von der Prozedur "TabellenLinken" beim Öffnen des Startformular der DB
aufgerufen.
Dim cat As ADOX.Catalog
Dim tdfRelink As ADOX.Table
Dim oDBInfo As DBInfo 'siehe Klassenmodul "DBinfo"
Dim strPath As String
Dim strName As String
Dim intCounter As Integer
Dim vntStatus As Variant
vntStatus = SysCmd(acSysCmdSetStatus, "Die Datenbanken werden verknüpft
...")
Set cat = New ADOX.Catalog
Set oDBInfo = New DBInfo
With cat
.ActiveConnection = CurrentProject.Connection
oDBInfo.FullName = strDir
strPath = oDBInfo.FilePathOnly
strName = Left(oDBInfo.FileName, InStr(oDBInfo.FileName, ".") - 1)
On Error Resume Next
Call SysCmd(acSysCmdInitMeter, "Tabellen werden verknüpft.",
.Tables.Count)
For Each tdfRelink In .Tables
intCounter = intCounter + 1
Call SysCmd(acSysCmdUpdateMeter, intCounter)
If .Tables(tdfRelink.Name).Type = "Link" Then
tdfRelink.Properties("Jet OLEDB:Link Datasource").Value =
strPath & _
strName & IIf(DefaultData, "Daten.mdb", ".mdb")
If Err.Number Then
Exit For
End If
End If
Next tdfRelink
End With
Call SysCmd(acSysCmdRemoveMeter)
vntStatus = SysCmd(acSysCmdClearStatus)
LinksErneuern = (Err.Number = 0)
End Function
------------------------------------------------
in das Klassenmodul "DBInfo" folgenden Code:
------------------------------------------------
Option Compare Database
Option Explicit
Private pstrFullName As String
Private pstrFileName As String
Private pstrFilePath As String
Private pstrFilePathOnly As String
Private pstrDrive As String
Property Let FullName(strFullName As String)
pstrFullName = strFullName
' Find the final "\" in the path.
pstrFilePath = pstrFullName
Do While Right$(pstrFilePath, 1) <> "\"
pstrFilePath = Left$(pstrFilePath, _
Len(pstrFilePath) - 1)
Loop
'Find the file name
pstrFileName = Mid$(pstrFullName, _
Len(pstrFilePath) + 1)
'Name = pstrFileName
'Find the Path Only
pstrFilePathOnly = Mid$(pstrFilePath, _
Len(pstrDrive) + 1)
'Find the drive
pstrDrive = Left$(pstrFullName, _
InStr(pstrFullName, ":"))
End Property
Property Get FileName() As String
FileName = pstrFileName
End Property
Property Get FilePath() As String
FilePath = pstrFilePath
End Property
Property Get FilePathOnly() As String
FilePathOnly = pstrFilePathOnly
End Property
Property Get Drive() As String
Drive = pstrDrive
End Property
Property Get Name() As String
Name = pstrFullName
End Property
----------------------------------------------------------
MfG
Michael
--
***************************************************************
ViCoTec Inhalt, Design, Programmierung
für das Internet
Michael Reetz
Bahnhofsplatz 1 26122 Oldenburg
Tel.: 0441 / 7 79 25 10 Fax: 0441 / 7 79 25 29
e-mail: michae...@vicotec.de
www.vicotec.de
www.oldenburg-info.de
Danke für den Tipp. Das Modul Relink von Claus Lerch funktioniert genau so,
wie ich mir das vorgestellt habe.
Es hat jedoch einen Nachteil: Ist die Quelldatenbank mit den Tabellen
Paßwortgeschützt,
funktioniert die automatische Wiedereinbindung der verknüpften Tabellen
nicht.
Hast Du dafür eine Lösung bzw. kannst Du mir diese Anpassung durchführen?
Falls nicht: Kennst Du jemand, der das machen kann?
Die email-Adresse von Claus Lerch auf der access-guru Homepage scheint
nicht mehr aktuell zu sein.
Vielen Dank
Gruß Stefan
"Mark Doerbandt" <spamre...@Doerbandt.de> schrieb im Newsbeitrag
news:f217otsrg1en7va43...@4ax.com...
* Stefan Schiller (Fri, 24 Aug 2001 08:42:19 +0200):
>Es hat jedoch einen Nachteil: Ist die Quelldatenbank mit den Tabellen
>Passwortgeschuetzt, funktioniert die automatische Wiedereinbindung
>der verknuepften Tabellen nicht.
Hat Deine alte Loesung das denn gekonnt. Wenn ja, maile sie mir bitte mal.
Gruss - Mark
PS:
> [fullquote entsorgt]
Bitte lies mal http://learn.to/quote zum korrekten Zitieren.
Function Fremdtabellen_einbinden(Dat_Name As String, PWD as String)
Dim tdf As TableDef
Dim db As Database
On Error Resume Next
Set db = CurrentDb
Set tdf = db.CreateTableDef("Bewegungen")
tdf.Connect = ";DATABASE=" + Dat_Name + ";pwd=" + pwd
tdf.SourceTableName = "Bewegungen"
db.TableDefs.Append tdf
Set tdf = Nothing
end function
HTH Jürgen
Joo, mache ich auch so. Man sollte vielleicht dazu sagen, dass
mit "Passwort" hier ein DB-Kennwort gemeint ist. Das ist oft
missverständlich.
Falls es um Benutzerrechte geht, also beschränkte Rechte von
Usern usw., dann gibt's dazu Erklärungen und Beispiele in der
Security-FAQ von MS. Link in FAQ 1.18
--
cu
Karl
********* Ich beantworte keine Access-Fragen per Email. *********
Access-FAQ: http://www.donkarl.com
mit Info zur 4. AEK (Access-Entwickler-Konferenz) am 6./7.10.
* Karl Donaubauer (Fri, 24 Aug 2001 13:55:13 +0200):
>Juergen Volke schrieb:
Ja, das wird gehen, er sucht doch aber jemanden, der es fuer ihn ausfuehrt,
daher die Bitte um eine Mail.
"Mark Doerbandt" <spamre...@Doerbandt.de> schrieb im Newsbeitrag
news:2ebcoto0hagd0jejn...@4ax.com...
* Stefan Schiller (Fri, 24 Aug 2001 16:09:04 +0200):
>Meine alte Loesung hat das leider auch nicht gekonnt.
Na dann schau Dir mal die hier geposteten Beispiele an.
Gruss - Mark