Neuigkeiten:

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

Mobiles Hauptmenü

Anwendung läuft nicht

Begonnen von erbru2024, September 26, 2024, 13:17:58

⏪ vorheriges - nächstes ⏩

erbru2024

Hallo Forum

ich habe eine Anwendung vor langer Zeit erstellt, und nun möchte ich die wieder verwenden.
startet zunächst auch wie vorher immer mit Anmeldeschirm.
Wenn ich dann meinen Button Anmelden klicke kommt eine Fehlermeldung.

wie bekomme ich also meine "alte Version wieder zum laufen" ?




Debus

hey schonmal oben in der Statusleiste in Access geschaut, ob da was mit aktivieren zulassen steht? Und ansonsten mal die Einstellungen im TrustCenter prüfen

Holger


erbru2024

Zitat von: Debus am September 26, 2024, 13:57:15hey schonmal oben in der Statusleiste in Access geschaut, ob da was mit aktivieren zulassen steht? Und ansonsten mal die Einstellungen im TrustCenter prüfen

Holger

Na ja, die statusleiste sehe ich nicht wenn die Anwendung gestartet wird
Danke


Köbi

Zitatstartet zunächst auch wie vorher immer mit Anmeldeschirm.
Wenn ich dann meinen Button Anmelden klicke kommt eine Fehlermeldung.
Was ist unter Anmeldeschirm zu verstehen? Was soll denn der Button Anmelden machen. Wie lautet der Befehl dahinter?
Und welche Fehlermeldung kommt? Bitte Details.

erbru2024

das ist ein Formular zum einloggen
öffnet dann ein Formular.

Fhelermeldung Projekt oder Bibliothek nicht gefunden

in den Verweisen fehlt der Eintrag unten im Bild

Debus

Setze den Verweis doch mal neu dann wird es gehen oder es kommt ein weiterer neuer Fehler

Holger

Bitsqueezer

Hallo,

man sieht, daß die Anwendung schon älter ist.

Du solltest zunächst mal die Referenzen aktualisieren.
Schon seit Windows Vista verwendet man nur noch die 6.x-Versionen von ADO, was bei Dir noch 2.1 ist - die war schon vorher veraltet, die letzte war 2.8. Aktuell ist 6.1 die richtige.

DAO 3.6 ist auch schon veraltet und kann entfernt werden. In einem halbwegs aktuellen Access sollte hier die "Microsoft Office x.0 Access database engine Object Library" stehen, die üblicherweise auch vor dem ADO-Link stehen sollte.
Deklarationen in VBA sollten dann auch immer mit dem Library-Namen erfolgen, also "ADODB.Recordset" und "DAO.Recordset" und nicht nur "Recordset" (als Beispiel).

Wenn bei Outlook die Datei nicht vorhanden ist, hast Du ggf. kein Outlook installiert. Dein Link zu Office zeigt Version 11, zu Outlook dagegen 16. Access aktualisiert die Office-Referenzen automatisch, wenn Du also Deine Datenbank mit einem neueren Office öffnest, werden danach die neuen Office-Links in den Referenzen stehen. Es wird aber nicht wieder nach unten korrigiert, wenn Du die Datei dann auf einem PC mit älterem Office öffnest, das mußt Du dann selbst machen.

Microsoft Forms benötigt man üblicherweise gar nicht in Access, das ist normalerweise nur für Excel und Co, die mit UserForms arbeiten.
"MouseWheel" ist vermutlich auch überflüssig, in früheren Access-Versionen (als es noch keine Mausräder gab oder nur wenige) gab es keinen MouseWheel-Event, da mußte man sich mit anderen Methoden behelfen.

Die Common Controls könnten sich ebenfalls als Problem erweisen, die Library wurde mit zwischenzeitlichen Problemen ein paar Mal upgedated. Im Ergebnis mußte man vorhandene Objekte wie die TreeView aus den Formularen entfernen und neu einbauen. Natürlich mit Verlust aller Einstellungen, die man komplett neu einstellen muß. Ich verwende die Common Controls seither nicht mehr, ist mir zu unsicher. Habe auf meiner Downloadseite eine eigene Variante mit CCTableTreeV2, die man einfach mit herkömmlichen Endlosformularen nutzen kann.

Nicht zu vergessen natürlich, daß es außerdem noch von 32/64Bit abhängig ist. Wenn Deine Anwendung Windows API-Aufrufe enthält, müssen diese zunächst an 64Bit angepaßt werden. Ebenso sind nicht alle ActiveX-Controls 64Bit kompatibel.

Die Sicherheitsleiste wird u.U. nicht angezeigt, wenn VBA generell im Trustcenter deaktiviert ist ("Makros", obwohl es keine Makros aus Access-Sicht sind).

Gruß

Christian

erbru2024

Danke Christian,

habe nun alles vom PC entfernt und meine OFFICE14 installiert
die sev.soft ... sind alle ordentlich registriert und haben zu Anfang Probleme gemacht, nun aber nicht mehr.
meine alten Programme in einen Ordner abgelegt, und die Tabellen neu verknüpft damit Frontend darauf zugreifen kann.

ich bekomme aber weiter Fehler, bin also noch am Rätsel wie ich die wieder zum laufen bekomme
in wie weit könntest du evtl. unterstützen ?









PhilS

Zitat von: erbru2024 am Oktober 04, 2024, 12:25:50ich bekomme aber weiter Fehler, bin also noch am Rätsel wie ich die wieder zum laufen bekomme
Bitte klicke mal in der VBA-Umgebung Menü "Debuggen" - "Kompilieren". Damit sollte dir der Kompiler für manche Fehler bereits zu der Codezeile springen, die den Fehler verursacht.
Für reine Laufzeitfehler zeig bitte auch den Code, der den Fehler verursacht.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

erbru2024

#11
Hallo Phils
das hat ja alles mal funktioniert mit Windows 7 und Office 2003

Fehler beim Kompilieren:
Benutzerdefinierter Typ nicht definiert

ich denke das ist nicht der einzige Fehler aber irgendwo muss man ja anfangen, und der kommt wenn ich das Frontend öffne

in diesem Modul

Option Compare Database
Option Explicit

Function Init()
Dim pfad As String
Dim [b]dbx As DAO.Database[/b]
Dim rs As DAO.Recordset
Dim t As DAO.TableDef
Dim sBEPath As String
On Error GoTo init_err

    Set rs = CurrentDb.OpenRecordset("sys")
   
    If rs.EOF Then
        MsgBox "Kein Datensatz in der Tabelle 'sys'", vbCritical, "Hoppla"
        rs.AddNew
        rs!dbnam = "dummy"
        rs.Update
    End If
   
    Do While Not rs.EOF
   
        sBEPath = rs!dbnam
        If InStr(1, sBEPath, "\") = 0 Then
            pfad = Application.CurrentProject.Path & "\" & sBEPath
        Else
            pfad = sBEPath
        End If
       
        Set dbx = DBEngine.Workspaces(0).OpenDatabase(pfad)
   
        For Each t In dbx.TableDefs()
            If InStr(1, t.Name, "MSys") = 0 Then tabcheck t.Name, pfad
        Next

        rs.MoveNext
   
    Loop
    rs.Close

init_exit:
    Set dbx = Nothing
    On Error GoTo 0
    Exit Function
   
init_err:
    If Err.Number = 3024 Or Err.Number = 3044 Then
        pfad = DateiOeffnen(Application.CurrentProject.Path, "BackEnd Datenbank öffnen")
        If pfad <> "" Then
            db_aendern (pfad)
        Else
            Application.Quit
        End If
    ElseIf Err.Number = 3059 Then
        Application.Quit
    ElseIf Err.Number = 94 Then
        MsgBox "Kein Dateiname im Feld 'sys.dbname'", vbCritical, "Hoppla"
        rs.Edit
        rs!dbnam = "dummy"
        rs.Update
    ElseIf Err.Number = 3078 Then
        MsgBox "Keine Tabelle 'sys' vorhanden", vbCritical, "Hoppla"
        DoCmd.SetWarnings False
        DoCmd.RunSQL "SELECT 'dummy' AS dbnam INTO sys;"
        DoCmd.SetWarnings True
    Else
        MsgBox "Fehler: " & Err.Number & " - " & Err.Description
        Stop
    End If
    Resume
   
End Function

Debus

Meinst Du in der Zeile hier

Dim [b]dbx As DAO.Database[/b]
Holger

PhilS

Zitat von: erbru2024 am Oktober 04, 2024, 15:05:39Fehler beim Kompilieren:

Benutzerdefinierter Typ nicht definiert
Da fehlt dir ein Verweis auf die "Microsoft Office 16.0 Access database engine Object Library" (ehemals "Microsoft DAO Object Library").

Sobald du den entsprechenden Verweis gesetzt hast, sollte dieses Problem gelöst sein.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Bitsqueezer

Hallo,

Du präsentierst nun eine ganz andere Referenzliste als vorher.
Aber einiges von dem, was ich oben geschrieben habe (darunter hatte ich auch die Access database engine Object library bereits erwähnt als Ersatz für das alte DAO..), gilt hier immer noch.
Veraltetes ADO, Forms-Referenz.
Daneben gibt es hier die "Jet and Replication Objects Library", mußte ich selbst erst mal nachlesen, die basiert auf ADO speziell für JET-Datenbanken, u.a. für Replikation, was es früher mal in Access gab, aber schon lange abgeschafft wurde. Wenn Deine Datenbank Replikation verwendet, hast Du ein größeres Problem.

Dann verwendest Du eine Reihe von Referenzen zu "sev.Soft", das scheint wohl das hier zu sein:
https://www.tools4vb.net
Das müßte sicherlich auch auf den neuesten Stand gebracht werden.

Weitere Referenzen kann man in Deinem Screenshot nicht erkennen.

Die Fehlermeldung "Benutzerdefinierter Typ nicht definiert" kann zum einen auf ein Problem im Namespace hinweisen, was man bisweilen mit einem Trick beheben kann, indem man in eine beliebige Enum geht (sofern man eine definiert hat), dort im Namen einen Fehler verursacht (z.B. Leerzeichen einfügen im Namen und Zeile verlassen) und dann den Fehler wieder korrigiert. Das zwingt beim Compile, den Namespace neu aufzubauen und oft behebt sowas solche Probleme.
Eine weitere Ursache kann simpel das sein, was im Fehler steht: Man hat irgendwo mit "Type" einen eigenen Typ deklariert, mit dem es Probleme gibt. Ich empfehle, grundsätzlich keine Types zu verwenden, da sie ohnehin nur Probleme machen. Simpler Ersatz: Ein Klassenmodul, in dem man modulglobale Variablen definiert. Im Gegensatz zu Type braucht es zwar eine Instantiierung mit New, dafür funktioniert ein Objekt mit allem, auch als Parameter usw.
Darüber hinaus kann das auch einfach auf eine defekte Access-Datei hindeuten, wenn der Fehler hartnäckig nicht behebbar ist und wenn vor allem keine Zeile angezeigt wird, die den Fehler beim Kompilieren verursacht.
Da hilft dann, alles mal in eine neue Access-Datei zu importieren. Da hier auch Probleme auftreten können, ist es empfehlenswert, das über Textexport mit "Application.SaveAsText" und "Application.LoadFromText" zu machen. Kann man natürlich per VBA automatisieren.

Du verwendest die TreeView (ggf. auch von sev.Soft, falls die eine haben), was bei so einer alten Datenbank Nacharbeit bedeutet. Also entfernen und neu einbauen, nachdem die aktuellste Referenz eingebunden wurde.

Was ich Deinen Screenshots entnehme, daß es hier eine aufwendige Datenbank sein wird mit einer Menge an Spezialitäten. Das kann man nicht mit ein paar Sätzen zur Fehlerbehebung erledigen, um sowas in so einem Alter wieder lauffähig zu machen, muß man schon einiges an Arbeit investieren.
I.d.R. genügt es nicht, nur ein paar Referenzen zu aktualisieren. Insbesondere, wenn veraltete Technologien wie Replikation zum Einsatz kommen (also Replikation als solches ist natürlich nicht veraltet, nur die Access-Replikation).

Wenn Du jmd. zur Festeinstellung brauchst, dann könnte ich Dir helfen, bin gerade auf Jobsuche... :D

Gruß

Christian