Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Tabellenverknüpfungen automatisch aktualisieren per VBA

3,732 views
Skip to first unread message

Stefan Schiller

unread,
Aug 22, 2001, 6:10:24 AM8/22/01
to
Hallo Access-Freaks,

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

Mark Doerbandt

unread,
Aug 22, 2001, 6:09:21 AM8/22/01
to
Hallo, 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

Conny Estermann

unread,
Aug 22, 2001, 6:10:25 AM8/22/01
to
Hallo Stefan!

Ich empfehle Dir, das entsprechende Codestück zu posten.

Gruss

Conny


Michael Reetz

unread,
Aug 22, 2001, 6:52:59 AM8/22/01
to
Hallo Stefan,

> 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

Stefan Schiller

unread,
Aug 24, 2001, 2:42:19 AM8/24/01
to
Hallo Mark,

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...

Mark Doerbandt

unread,
Aug 24, 2001, 6:36:18 AM8/24/01
to
Hallo, Stefan,

* 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.

Jürgen Volke

unread,
Aug 24, 2001, 7:26:11 AM8/24/01
to
Hallo Stefan

>
> 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.
>
kurzes Beispiel zum Verknüpfen der Tabelle Bewegungen, wenn in
Dat_Name die MDB und in PWD das Paßwort übergeben werden:

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


Karl Donaubauer

unread,
Aug 24, 2001, 7:55:13 AM8/24/01
to
Jürgen Volke schrieb:

> > 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.
> >
> kurzes Beispiel zum Verknüpfen der Tabelle Bewegungen, wenn in
> Dat_Name die MDB und in PWD das Paßwort übergeben werden:
> ...

> tdf.Connect = ";DATABASE=" + Dat_Name + ";pwd=" + pwd
> ...

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.


Mark Doerbandt

unread,
Aug 24, 2001, 7:57:13 AM8/24/01
to
Hallo, Juergen und Karl,

* 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.

Stefan Schiller

unread,
Aug 24, 2001, 10:09:04 AM8/24/01
to
Meine alte Lösung hat das leider auch nicht gekonnt.

"Mark Doerbandt" <spamre...@Doerbandt.de> schrieb im Newsbeitrag

news:2ebcoto0hagd0jejn...@4ax.com...

Mark Doerbandt

unread,
Aug 24, 2001, 6:41:30 PM8/24/01
to
Hallo, Stefan,

* 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

0 new messages