Datenbank wächst bei RefreshLinks

26/03/2009 - 15:51 von Klaus-Dieter Gundermann | Report spam
Hallo NG,

ich hab da mal ne Frage ;-)
ich hab immer wieder das Problem, das bei einem RefreshLinks der verknüpften
Tabellen/Views (ca. 50) die Frontend-Datenbank ( Access XP an SQL Server 2005 )
um ca. 100 MB wàchst. Wisst ihr wofür Access den ganzen Platz braucht ??
( Die ganze DB auf dem SQL Server ist gerade mal 25 mb groß... )

Viele Grüße

Klaus

Zum verknüpfen benutze ich den folgenden Code:

Driver = "SQL Native Client" ' SQL Server 2005

Set dbs = CurrentDb()
For intCount = 0 To dbs.TableDefs.count - 1
Set tdf = dbs.TableDefs(intCount)

' Wenn die Tabelle eine Verknüpfungszeichenfolge hat, dann
' handelt es sich um eine verknüpfte Tabelle.
If (Len(tdf.Connect) > 0) Then
' Datentabellen / Views
cnstr = "ODBC;Driver={" & Driver & "};" _
& "Server=" & Server & ";" _
& "Database=" & Database & ";" _
& "Uid=" & sUID & ";" _
& "Pwd=" & sPwd & ";" _
& "APP=MyApp"

tdf.Connect = cnstr
tdf.Attributes = dbAttachSavePWD

On Error Resume Next
Application.Echo False, tdf.Name
Err.Clear
tdf.RefreshLink ' Verknüpft die Tabelle erneut.
If Err <> 0 Then
' ... Fehlerbehandlung
End If
End If
Next intCount
 

Lesen sie die antworten

#1 Sascha Trowitzsch
26/03/2009 - 17:59 | Warnen spam
Hi Klaus-Dieter,

"Klaus-Dieter Gundermann" schrieb im
Newsbeitrag news:
Hallo NG,

ich hab da mal ne Frage ;-)
ich hab immer wieder das Problem, das bei einem RefreshLinks der verknüpften
Tabellen/Views (ca. 50) die Frontend-Datenbank ( Access XP an SQL Server 2005 )
um ca. 100 MB wàchst. Wisst ihr wofür Access den ganzen Platz braucht ??
( Die ganze DB auf dem SQL Server ist gerade mal 25 mb groß... )
...


10 MB erscheinen mir reichlich zuviel bei 50 Tabellen.

Beim Verknüpfen der Tabellen speichert Access eine Menge Angaben über die
Herkunft in seinen Systemtabellen. Genauer: In MSysObjects, binàre Spalten
LvProp und RmtInfoLong/Short.
Das sind interne Angaben nicht nur zu Server, Verbindungsparametern und
Tabellen, sondern auch zu Feldern, deren Datentypen, Sortierreihenfolgen,
Indizes, etc. Da kommen ein ganze Menge Infos zusammen. Bie Öffnen der Tabelle
werden diese Angaben verwendet, um schnell auf ankommenden Daten reagieren zu
können, sie in die korrekte JET-Repràsentation zu überführen, und wahrscheinlich
auch als Basis für die Art, wie JET Abfragen in Teil-SQLs aufteilt, also für den
Queryplan.

Die Menge der Informationen unterscheidet sich je nach DBMS und nach
ODBC-Treiber. Bei MSSQL ist es IMHO besonders viel, aber nicht soviel, das zu
jeder Tabelle gleich 2MB an Infos gespeichert werden müssten.
Allerdings wird der gleiche Platz immer wieder beim Verknüpfen neu gebraucht,
weil die Daten einer (System-) Tabelle, wie üblich, nicht direkt gelöscht
werden.
Wenn du also 10mal hintereinander neu verknüpfst, dann steigt der verbrauchte
Speicherplatz ziemlich an.
Deshalb sollte man ja auch nur *einmal* neu verknüpfen, nicht bei jedem Start
der DB.

Ciao, Sascha

Ähnliche fragen