PDA

Vollständige Version anzeigen : Fremde Access-mdb läuft nicht


TommiH69
14.06.2012, 09:12
Hallo zusammen,

vlt. kann mir irgendwer bei folgendem Problem helfen.
Ich habe eine Access-mdb (mit vielen Formularen+Eingabemasken), die auf einem älteren Access programmiert wurde, vermutlich mit Office 97 und vor einigen Jahren auf Office/Access 2002 angepasst wurde und auf einigen Systemen auch heute noch einwandfrei läuft (es ist eine Turnierverwaltung).

Nun zu dem Problem, wenn ich die MDB mit doppelklick starte, dann kommt auf meinem System (habe eine Access 2002 installiert) - eine Fehlermeldung

'Fehler beim Kompilieren' - Projekt oder Bibliothek nicht gefunden

Der Fehler taucht in einer Sub auf ( TableDefsAktualisieren() ) und zwar bei der ersten Zuweisung zu einer Variablen, die Dim/Set-Befehler davor scheinen irgendwie noch zu gehen.

-> Meine Annahme: es fehlt irgendwas (Library/Bib/DLL...)

Was ich dann probiert habe - verschiedene Vorstufen der Office Produkte von einzeln bis das gesamte Paket (Office 97/2000/2002) installiert und wieder überinstalliert (in der Hoffnung, das die nicht existente Bib vlt. irgendwie drauf kommt) - kein Erfolg :(
Ich habe ein nagelneues WinXP + Office 2002 (komplett mit allem) in einer VM installiert, der Fehler blieb der selbe. :(

Wenn ich die DB auf meinem Arbeitsrechner im Büro starte (auf dem läuft auch Office 2002) - dann läuft alles perfekt! - nur was hilft mir das :(

Wie kann ich das Problem eingrenzen, den Fehler finden und diese 'DB' zum laufen bringen.
Mit VBA kenne ich mich schon leidlich aus - wenn auch unter Excel - aber weiter hat mich das bisher auch nicht gebracht.
Im Internet findet man immer wieder, das unter EXTRAS-VERWEISE der falsche/nicht funktionierende Verweis markiert ist - der Menüpunkt VERWEISE ist bei mir aber ausgegraut...

So, danke für jeden der bis hierher gelesen hat, vlt. kann mir irgendwer einen Tip geben, in welche Richung ich forschen könnte.
Ich vermute halt, das irgendjemand bei der alten Anpassung an 2002 eine Bib installiert hatte die nicht bei Office 2002 dabei ist und davon was benutzt hat.
Zwischendrin hatte ich mal den Fehler, das kein Zugriff auf die Owc10.dll möglich ist, der kommt nun aber nichtmehr - habe ich allerdings auch runtergeladen und in windows/system32 gepackt.

Any ideas? - bin etwas verzweifelt, es wäre halt schön, wenn die Software wieder laufen würde. Kann man vlt. irgendwie die Tatsache nutzen, das es auf einem anderen System einwandfrei läuft?

LG,
Tommi

CptChaos
14.06.2012, 09:24
Hi und willkommen im Forum,

der Tip/Hinweis mit Extras->Verweise ist schon der richtige und vmtl. einzige der Dich hier weiter bringt.

Kann es sein, dass zu dem Zeitpunkt wo Du nachschaust der Code noch in einem Haltemodus steht? Dann wäre der ausgegraute Zustand klar...

Am besten die DB mal mit gedrückter Shift-Taste starten (somit werden jegliche Startprozeduren unterbunden, sofern dies nicht verhindert ist) und dann sofort in den VBA-Editor (ALT-F11) wechseln und in dann die Verweise prüfen.

TommiH69
14.06.2012, 10:20
Danke für das Willkommen ;)

wau, das geht ja fast so schnell wie im Herber-Excel-Forum hier (oder bei uns im Forum ;) )

Also - Der Tip mit dem Haltemodus war goldrichtig, Ablauf abgebrochen und schwupps, schon war Verweise anwählbar.

Nur, was sagt mir das jetzt?
Wenn ich da drauf klicke, dann stehen da eine Reihe Verweise mit Haken und der letzte mit Haken ist hervorgehoben.
Dieser lautet

NICHT VORHANDEN: MIcrosoft Office XP Web Components

?!?

Alle drunter haben keinen Haken, ich vermute das ist der Break an dem er sich aufhängt - nur hat der ganze Schnadderadatsch eigentlich absolut nichts mit Web zu tun ;)

Weisst du was das bedeutet? - ist das eine Komponente vom MS-Office, welche nur einfach nicht mit installiert wurde?

Tommi

CptChaos
14.06.2012, 10:24
Die OWC (Office Web Components) gibt es seit 2007 nicht mehr. Bis 2003 waren sie vorhanden und konnten (m.W. selektiv) installiert und anschließend verwendet werden.
Du kannst die entsprechenden alten Dateien auch unter 2007 installieren, MS rät jedoch davon ab.

Sauberer wäre es, zu identifizieren wo und warum diese gebraucht werden und ggf. auf neue, aktuelle Techniken umzubauen.
Dazu könntest Du in einer Kopie der DB den Haken vor der Referenz entfernen und die DB anschließend kompilieren (Debug -> kompilieren) und testen.

Wenn es zu keinem Fehler kommt, ist der Verweis nicht (mehr) nötig.
Wenn es zu einem Fehler kommt, musst Du an entsprechender Stelle bereinigen.

Infos zu den OWC findest Du auch bei Microsoft in der MSDN

TommiH69
14.06.2012, 10:57
Hallo,

ich bin ja sprachlos - und daran habe ich nun 2 Abende rumgedoktert...
Ich habe den Haken entfernt, gespeichert und beim nächsten Aufruf lief alles problemlos - nun muss ich mich mal durch alle Funktionen durcharbeiten wo es nun Probleme geben kann - aber bei dem Service hier bin ich ja recht zuverlässig, das auch noch kommende Probleme erledigbar sind!
Ich vermute einfach mal, das die OWC einfach standardmässig damals eingebunden und gar nicht benötigt wurden.
Dann steht der weiteren Turnierplanung ja nichts im Wege ;)

DANKE!

Tommi

Anne Berg
14.06.2012, 11:46
Hallo,

notfalls kannst du die Office Web Components ja auch noch nachinstallieren, aber dann musst du dich beeilen...NOTICE: This download will no longer be available after July 31, 2012. (http://www.microsoft.com/en-us/download/details.aspx?id=9468)Andrerseits heißt es aber auch dort:Office Web Components are automatically installed by Microsoft Office XP Setup. If you have already installed Office XP, you do not need this download. Please go to Office Product Updates to ensure that your Office files are completely up to date.demnach müsste es doch bei den von dir neu installierten Rechnern verfügbar sein. Oder es fehlen Updates zum frisch installierten Office-Paket.
Wenn ich die DB auf meinem Arbeitsrechner im Büro starte (auf dem läuft auch Office 2002) - dann läuft alles perfekt! Vielleicht hast du aber auch die ursprünglich ausgelieferte Programm-Version inklusive OWC auf diesem Rechner installiert, während du die MDB auf die anderen Rechner lediglich kopiert hast?

TommiH69
14.06.2012, 12:05
Hallo Anne,

danke für die Ausführung - das Ganze ist total verwirrend... (nicht die Ausführung ;) )
Es handelt sich bei der DB um eine über die Jahre gewachsene Anwendung zur Turnierleitung (Sport) und die wurde ursprünglich unter Access (aus Office 97) erstellt (evtl. sogar noch vorher).
Wir müssen halt damit arbeiten und unter Office 2007 oder auch 2010 läuft das ganze gar nicht mehr.
Unter 2002 hat sich jemand wohl mal vor Jahren die Mühe gemacht es anzupassen und bei Ihm läuft es bis heute gut - er konnte aber auch nicht nachvollziehen, warum es bei uns nicht läuft.
Ich war halt von einer fehlenden Lib/Bib ausgegangen die sich damals irgendwie 'reingemogelt' hatte und habe deshalb alles von MS installiert, was VOR 2002 genutzt wurde - Office XP Prof (2002) habe ich als ganz normale Kaufversion ergattert und gestern abend in einer VM auf meinem Win7-Notebook installiert - Ergebnis war das selbe, es kam immer dieser (nun behobene) Fehler...
Da werde ich aber heute abend nochmal schauen, ob ich irgendwo dieses OWC-Packet bei der Installation finde, wenn das standardmässig NICHT mitinstalliert wird (bei meiner O2002-Version) dann hätten wir ja def. den Übeltäter, könnten es nachinstallieren und es gibt kein böses Erwachen, wenn irgendwann doch irgendwas nicht funktioniert - erstmal bin ich aber sehr zufrieden damit das auf meinem Netbook (UNGLEICH Notebook ;) ) hier das Ganze läuft.

Was mich am meisten ärgert ist, das Access 2002 unter Win7 ganz massiv rumzickt (zumindest mit der Datenbank+Makros+Formularen), aber was will man von einem rund 10 Jahre alten selbstentwickelten Programm auch erwarten ;)

Wenn ich den Test heute abend abschließe schreibe ich das natürlich hier nochmal rein. Egal ob er pos/neg verläuft ;)
Also auf der CD müsste dieses OWC ja drauf sein, deshalb sollte es wohl egal sein, ob sie das nun vom Server nehmen oder nicht (wenn es doch für irgendeine Funktion benötigt werden sollte)

LG,
Tommi

Anne Berg
14.06.2012, 12:22
Hi,

warum das entgegen der Aussage von Microsoft nicht mitinstalliert wird, verstehe ich auch nicht. Auf meinem Rechner (mit Office 2003) habe ich sowohl die owc10.dll als auch die owc11.dll unter "C:\Programme\Gemeinsame Dateien\Microsoft Shared\Web Components\..." gefunden.

Wenn es sich in deinem Fall aber um eine sehr alte Anwendung handelt, so wirst du wohl auf die Web Components komplett verzichten können.
Man sollte immer darauf achten, nur die wirklich benötigten Verweise zu aktivieren.

Was die Umstellung auf Office 2007 bzw. 2010 betrifft, so bleibt dir wohl nichts anderes übrig als 1. auftretende Kompilierfehler Schritt für Schritt zu bereinigen und 2. sämtliche Komponenten der Anwendung sorgfältig auszutesten. Hilfe für notwendige Programmänderungen wirst du sicherlich genügend finden, da andere diese Erfahrungen ja bereits vor längerem gemacht haben. ;)

Lanz Rudolf
14.06.2012, 16:04
Hallo
ich verwende öffter zuerst Verweise Sicherstellen in eine txt-Datei und dann kann ich sie wieder Zurückladen wen es nötig wird

Public Function SaveVerw(Optional PDateiN As Variant)
Dim Ref As Reference
Dim VarTmp As Variant
Dim IntF As Integer
Dim StrErr As String
On Error GoTo SaveVerw_Error
If IsMissing(PDateiN) Then
VarTmp = CurrentDb.Name
PDateiN = Mid$(VarTmp, 1, InStr(VarTmp, Dir(VarTmp)) - 1) & "Verweise_"
VarTmp = Dir(CurrentDb.Name)
PDateiN = PDateiN & Mid$(VarTmp, 1, InStr(VarTmp, ".") - 1) & ".txt"
End If
IntF = FreeFile
Open PDateiN For Output As #IntF
For Each Ref In Application.References
If Not Ref.IsBroken Then Print #IntF, Ref.Name; ";"; Ref.FullPath
Next Ref
Close IntF
On Error GoTo 0
Exit Function
SaveVerw_Error:
StrErr = "Error Information..." & vbCrLf
StrErr = StrErr & "Error#: " & Err.Number & vbCrLf
StrErr = StrErr & "in Zeile: " & Erl & vbCrLf
StrErr = StrErr & "Description: " & Err.Description
MsgBox StrErr, vbCritical + vbOKOnly, "Error in procedure VerweiseSichern of Modul
Modul1"
End Function
Public Function RestorVerw(Optional PDateiN As Variant)
Dim Ref As Reference
Dim VarLin As Variant
Dim VarRefN As Variant
Dim VarRefF As Variant
Dim VarTmp As Variant
Dim IntF As Integer
Dim StrErr As String
On Error GoTo RestorVerw_Error
If IsMissing(PDateiN) Then
VarTmp = CurrentDb.Name
PDateiN = Mid$(VarTmp, 1, InStr(VarTmp, Dir(VarTmp)) - 1) & "Verweise_"
VarTmp = Dir(CurrentDb.Name)
PDateiN = PDateiN & Mid$(VarTmp, 1, InStr(VarTmp, ".") - 1) & ".txt"
End If
IntF = FreeFile
Open PDateiN For Input As IntF
Do While Not EOF(IntF)
Line Input #IntF, VarLin
VarRefN = Mid(VarLin, 1, InStr(VarLin, ";") - 1)
VarRefF = Mid(VarLin, InStr(VarLin, ";") + 1)
On Error Resume Next
Set Ref = Application.References(VarRefN)
If Err.Number <> 0 Then
On Error GoTo 0
'nicht vorhanden, erzeugen
Application.References.AddFromFile VarRefF
End If
Loop
Close IntF
On Error GoTo 0
Exit Function
RestorVerw_Error:
StrErr = "Error Information..." & vbCrLf
StrErr = StrErr & "Error#: " & Err.Number & vbCrLf
StrErr = StrErr & "in Zeile: " & Erl & vbCrLf
StrErr = StrErr & "Description: " & Err.Description
MsgBox StrErr, vbCritical + vbOKOnly, _
"Error in procedure VerweiseRestaurieren of Modul Modul1"
End Function


End Function
Public Function RestorVerw(Optional PDateiN As Variant)
Dim Ref As Reference
Dim VarLin As Variant
Dim VarRefN As Variant
Dim VarRefF As Variant
Dim VarTmp As Variant
Dim IntF As Integer
Dim StrErr As String
On Error GoTo RestorVerw_Error
If IsMissing(PDateiN) Then
VarTmp = CurrentDb.Name
PDateiN = Mid$(VarTmp, 1, InStr(VarTmp, Dir(VarTmp)) - 1) & "Verweise_"
VarTmp = Dir(CurrentDb.Name)
PDateiN = PDateiN & Mid$(VarTmp, 1, InStr(VarTmp, ".") - 1) & ".txt"
End If
IntF = FreeFile
Open PDateiN For Input As IntF
Do While Not EOF(IntF)
Line Input #IntF, VarLin
VarRefN = Mid(VarLin, 1, InStr(VarLin, ";") - 1)
VarRefF = Mid(VarLin, InStr(VarLin, ";") + 1)
On Error Resume Next
Set Ref = Application.References(VarRefN)
If Err.Number <> 0 Then
On Error GoTo 0
'nicht vorhanden, erzeugen
Application.References.AddFromFile VarRefF
End If
Loop
Close IntF
On Error GoTo 0
Exit Function
RestorVerw_Error:
StrErr = "Error Information..." & vbCrLf
StrErr = StrErr & "Error#: " & Err.Number & vbCrLf
StrErr = StrErr & "in Zeile: " & Erl & vbCrLf
StrErr = StrErr & "Description: " & Err.Description
MsgBox StrErr, vbCritical + vbOKOnly, _
"Error in procedure VerweiseRestaurieren of Modul Modul1"
End Function


nach dem sicherstellen kannst Du
Überflüssige Verwise Löschen
mit dieser Routine:



Public Function LoeUeberfVerw() As Variant
'Aufruf ?LoeUeberfVerw
Dim LngI As Long
Dim LngN As Long
Dim LngM As Long
Dim arrRefs() As String
Dim oRef As Object
Dim strRet As String
Call VerweiseTesten
LngI = Access.References.Count
ReDim arrRefs(1, LngI - 1)
For LngN = 1 To LngI
Select Case Access.References.Item(LngN).Name
Case "Access", "VBA"
Case Else
arrRefs(0, LngM) = Access.References.Item(LngN).Name
arrRefs(1, LngM) = Access.References.Item(LngN).FullPath
LngM = LngM + 1
End Select
Next LngN
On Error Resume Next
LngN = 0
For LngI = LngM - 1 To 0 Step -1
Set oRef = Access.References.Item(arrRefs(0, LngI))
VBA.Err.Clear
Debug.Print "Removing " & arrRefs(0, LngI) & ": " & VBA.Err.Description
Access.References.Remove oRef
If VBA.Err.Number = 0 Then
VBA.Err.Clear
Access.RunCommand acCmdCompileAllModules
Debug.Print "Compiling..." & VBA.Err.Description
VBA.Err.Clear
If Access.Application.IsCompiled Then
Debug.Print "Removed " & arrRefs(0, LngI) & ": " & VBA.Err.Description
strRet = strRet & "- " & arrRefs(0, LngI) & VBA.Constants.vbCrLf
LngN = LngN + 1
Else
Debug.Print "Not Compiled! " & VBA.Err.Description
VBA.Err.Clear
Access.References.AddFromFile arrRefs(1, LngI)
Debug.Print "Re-added " & arrRefs(0, LngI) & ": " & VBA.Err.Description
End If
End If
Next LngI
Set oRef = Nothing
If VBA.Len(strRet) > 0 Then
MsgBox "Folgende Verweise wurden entfernt, da überflüssig:" & _
VBA.Constants.vbCrLf & VBA.Constants.vbCrLf & strRet
Else
MsgBox "Keine Verweise konnten entfernt werden!"
End If
Call VerweiseTesten
End Function
Public Function VerweiseTesten() As Variant
Dim Ref As Reference
Debug.Print "Es sind " & Application.References.Count & " Verknüpfungen."
For Each Ref In References
Debug.Print Ref.Guid; Spc(2); "Zustand:"; Spc(1); IIf(Ref.IsBroken, "bad ", "good"); Spc(2); Ref.Name; Tab(68); Ref.FullPath
' If Ref.IsBroken Then
' Debug.Print "Die Referenz: " & Ref.Name & " wird entfernt."
' References.Remove Ref
' End If
Next Ref
End Function