Neuigkeiten:

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

Mobiles Hauptmenü

Neueste Beiträge

#1
Access Programmierung / Re: Frage zur Suche in Tabelle...
Letzter Beitrag von Gockel67 - Dezember 05, 2025, 17:30:09
Hallo PhilS,

danke für deine Antwort. Du hast natürlich recht. Das Like wird hier nicht benötigt. Wenn ich allerdings deine Ergänzung ohne das Like einfüge bekomme ich die Fehlermeldung Datentypenkonflikt. Deine Zeile mit Like funktioniert.

Liebe Grüße
Jörg

P.S. Hat sich erledigt. Hab den Fehler gefunden. Einfach die ' raus und es funktioniert wunderbar.
#2
Formular / Re: Formularfelder ausblenden
Letzter Beitrag von Rainer_73 - Dezember 05, 2025, 16:43:06
Danke PhilS, das war schon mal ein Teil des Problems. Nachdem ich die Feldnamen im Formular nun angepasst habe, kann ich die Felder ein- und ausblenden. Allerdings leider nicht so, wie ich mir das vorgestellt habe.

Wenn ich das Ja/Nein-Feld namens Finanzierung aktiviere, muss ich erst die Bearbeitung schließen (auf den kleinen Stift unterhalb des Formulars klicken), dann werden alle anderen Felder eingeblendet. Und diese werden dann auch in den Datensätzen eingeblendet, in denen das Feld Finanzierung gar nicht aktiviert ist.
Hast du da auch noch eine Idee, was falsch sein könnte.
#3
Formular / Re: Formularfelder ausblenden
Letzter Beitrag von Bitsqueezer - Dezember 05, 2025, 16:41:01
Hallo,

ich empfehle Dir, die Umschaltung so zu machen:

Private Sub Form_AfterUpdate()
' Prüfen, ob das Kontrollkästchen aktiviert (Ja/Wahr) ist
    Dim bolSichtbar As Boolean
   
    bolSichtbar = (Me.finanzierung.Value = True)
    Me.eur_darlehnsbetrag.Visible = bolSichtbar
    Me.txt_zinssatz.Visible = bolSichtbar
    Me.txt_laufzeit.Visible = bolSichtbar
    Me.dat_auszahlung.Visible = bolSichtbar
    Me.dat_rate_beginn.Visible = bolSichtbar
    Me.dat_rate_ende.Visible = bolSichtbar
    Me.eur_annuität.Visible = bolSichtbar
    Me.eur_annuität_laufzeit.Visible = bolSichtbar
    Me.eur_zinsen_laufzeit.Visible = bolSichtbar

End Sub

Das spart 50% Code ein und es ist viel einfacher zu warten.
Solltest Du bei einem Feld die umgekehrte Logik brauchen, schreibst Du einfach:
Me.MeinFeld.Visible = Not bolSichtbar
Außerdem empfehle ich Dir, sowas in eine eigene Sub im Formularcode zu hinterlegen. Vorteil ist, daß Du die Aktualisierung der Sichtbarkeit dann von vielen Stellen aus aufrufen kannst, da wäre als erstes "Form_Current", wenn der Datensatz angezeigt wird.

Gruß

Christian




#4
Formular / Re: Formularfelder ausblenden
Letzter Beitrag von Debus - Dezember 05, 2025, 16:37:32
Hey, generell würde ich aber mal versuchen, die vielen Felder zu einem Tag zusammen zu fassen. Wenn es immer die gleichen sind die ein oder ausgeblendet werden sollen.

Du kannst allen betroffenen Feldern im Eigenschaftsblatt (Register ,,Sonstiges") einen gemeinsamen Tag geben, z.B. Gruppe1. Dann wie folgt ein oder ausblenden:

Dim ctl As Control
    For Each ctl In Me.Controls
        If ctl.Tag = "Gruppe1" Then
            ctl.Visible = False
        End If
    Next ctl

Dim ctl As Control
    For Each ctl In Me.Controls
        If ctl.Tag = "Gruppe1" Then
            ctl.Visible = True
        End If
    Next ctl

Gruß
Holger






#5
Access Programmierung / Re: Frage zur Suche in Tabelle...
Letzter Beitrag von PhilS - Dezember 05, 2025, 16:11:43
Zitat von: Gockel67 am Dezember 05, 2025, 15:44:37habe ich mir ein Beispiel auf dem Internet gesucht welches für meine Zwecke auch funktioniert.
Gegen dein Vorgehen ist vom Prinzip her nichts einzuwenden.

Kürzer schreiben könnte man es so:
Me.lblVideo.Visible = DCount("*","tblKartenVideo", "ID_Haupttabelle LIKE '*" & strSuchwert & "*'") Viel wichtiger als die Länge des Codes, ist aber ob du ihn verstehst. Wenn deine Fassung für dich verständlicher ist, dann bleibe dabei.

Was hier aber als merkwürdig auffällt ist das: "ID_Haupttabelle LIKE '*" & strSuchwert & "*'"
Eine ID ist normalerweise ein Wert, den man als ganzes betrachtet. Eine Suche mit LIKE erscheint da potenziell falsch zu sein.
Wenn du auf exakte Übereinstimmung prüfen willst, dann so: "ID_Haupttabelle = '" & strSuchwert & "'"
Das wird höchstwahrscheinlich auch deutlich schneller ausgeführt.
#6
Formular / Re: Formularfelder ausblenden
Letzter Beitrag von PhilS - Dezember 05, 2025, 16:02:05
Zitat von: Rainer_73 am Dezember 05, 2025, 15:53:20Markiert wird ".finanzierung". Kann es sein, dass dieses Feld nicht gefunden wird, weil es das nur in der Tabelle "Fahrzeuge" gibt? Falls ja, wie kann ich VBA dazu bringen, dass dieses Feld (und auch alle weiteren genannten Felder) in der Tabelle "Fahrzeuge" gefunden werden?
Die Fehlermeldung deutet tatsächlich darauf hin, dass es das Feld "finanzierung" in deinem *Formular* nicht gibt.
Tabellen sind hier nicht relevant, es geht ja um ein Formular. Schau im Entwurf des Formular nach, wie das  Kontrollkästchen, das an das Feld "finanzierung" gebunden ist, heißt. Falls der Name Kontrollkästchen123 ist, solltest du es umbenennen zu "Finanzierung" oder "chkFinanzierung"und diesen Namen dann in deinem Code verwenden.
#7
Formular / Formularfelder ausblenden
Letzter Beitrag von Rainer_73 - Dezember 05, 2025, 15:53:20
Hallo,
ich bin ganz neu hier und alles, was ich bisher in Access gemacht habe, habe ich mir irgendwie selbst beigebracht. Dabei habe ich VBA bisher vermieden. Nun möchte ich aber ein Formular so einrichten, dass einige Felder nur angezeigt werden, wenn ein Ja/Nein-Feld aktiviert wurde.
Ich habe dazu untenstehenden Code eingegeben, bekomme dann aber immer eine Fehlermeldung "Fehler beim Kompilieren: Methode oder Datenobjekt nicht gefunden"

Markiert wird ".finanzierung". Kann es sein, dass dieses Feld nicht gefunden wird, weil es das nur in der Tabelle "Fahrzeuge" gibt? Falls ja, wie kann ich VBA dazu bringen, dass dieses Feld (und auch alle weiteren genannten Felder) in der Tabelle "Fahrzeuge" gefunden werden?

Hier nun der verwendete VBA-Code.

Private Sub Form_AfterUpdate()
' Prüfen, ob das Kontrollkästchen aktiviert (Ja/Wahr) ist
    If Me.finanzierung.Value = True Then
        ' Felder einblenden
        Me.eur_darlehnsbetrag.Visible = True
        Me.txt_zinssatz.Visible = True
        Me.txt_laufzeit.Visible = True
        Me.dat_auszahlung.Visible = True
        Me.dat_rate_beginn.Visible = True
        Me.dat_rate_ende.Visible = True
        Me.eur_annuität.Visible = True
        Me.eur_annuität_laufzeit.Visible = True
        Me.eur_zinsen_laufzeit.Visible = True
    Else
        ' Felder ausblenden
        Me.eur_darlehnsbetrag.Visible = False
        Me.txt_zinssatz.Visible = False
        Me.txt_laufzeit.Visible = False
        Me.dat_auszahlung.Visible = False
        Me.dat_rate_beginn.Visible = False
        Me.dat_rate_ende.Visible = False
        Me.eur_annuität.Visible = False
        Me.eur_annuität_laufzeit.Visible = False
        Me.eur_zinsen_laufzeit.Visible = False
    End If

End Sub
#8
Access Programmierung / Frage zur Suche in Tabellen
Letzter Beitrag von Gockel67 - Dezember 05, 2025, 15:44:37
Moin Gemeinde,

da ich so etwas bisher noch nie gemacht habe, habe ich mir ein Beispiel auf dem Internet gesucht welches für meine Zwecke auch funktioniert.

    Dim strSuchwert As String
    Dim strSQL As String
    Dim rs As DAO.Recordset

    strSuchwert = Me.ID

    ' SQL-Abfrage mit Platzhalterparameter erstellen
    strSQL = "SELECT * FROM tblKartenDokumente WHERE ID_Haupttabelle LIKE '*" & strSuchwert & "*';"

    ' Recordset öffnen und an ein Ergebnis-Formular binden
    Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)

    If Not rs.EOF Then
        ' Ergebnis-Formular öffnen und Recordset übergeben (oder Daten direkt anzeigen)
        lblDokument.Visible = True
    Else
        lblDokument.Visible = False
    End If

    rs.Close


    ' SQL-Abfrage mit Platzhalterparameter erstellen
    strSQL = "SELECT * FROM tblKartenVideo WHERE ID_Haupttabelle LIKE '*" & strSuchwert & "*';"

    ' Recordset öffnen und an ein Ergebnis-Formular binden
    Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)

    If Not rs.EOF Then
        ' Ergebnis-Formular öffnen und Recordset übergeben (oder Daten direkt anzeigen)
        lblVideo.Visible = True
    Else
        lblVideo.Visible = False
    End If

    rs.Close

Meine Frage: Lässt sich das ganze kompriemieren bzw. beschleunigen oder gibt es noch andere Möglichkeiten?

Liebe Grüße und ein schönes Wochenende
Jörg
#9
Access Programmierung / Re: Erl unplausibel
Letzter Beitrag von PhilS - Dezember 05, 2025, 13:02:46
Zitat von: Doming am Dezember 05, 2025, 08:13:32Ist Erl doch nicht so zuverlässig wie gedacht?
Nun ja, was soll denn Erl() gemäß Dokumentation eigentlich tun?
- Spoiler: Das ist eine Fangfrage.

Wenn Programmcode kompiliert wird (auch VBA wird kompiliert), ist es nicht in allen Fällen zuverlässig möglich eine Anweisung im kompilierten Programm eindeutig einer Zeile im ursprünglichen Quellcode zuzuordnen.

Insbesondere mit VBA-64bit gibt es einige Berichte darüber, dass Erl() nicht zuverlässig die Ausgangszeile des Programmcodes zurückgibt.

Es gibt oft sinnvollere Möglichkeiten um die (möglichen) Ursachen von Fehlern im Programmcode bereits im Voraus zu erkennen. Bei deinem Beispiel mit "Datei nicht gefunden" könnte man vor dem Zugriff prüfen, ob eine erforderliche Datei existiert oder nicht.



#10
Access Programmierung / Erl unplausibel
Letzter Beitrag von Doming - Dezember 05, 2025, 08:13:32
Hallo,

ich habe in meinen Datenbanken eine zentrale Fehlertabelle, d.h. Fehler (auch unterdrückte) werden in eine Tabelle eingetragen. Häufen sich Fehler in bestimmten Unterprozeduren und es ist nicht klar ersichtlich, welche Zeile gemeint ist, füge ich Zeilennummern ein und schreibe sie beim Fehler mit ins Protokoll.

Jetzt habe ich allerdings im Protokoll Zeilennummern, die es gar nicht gibt.
Ich nummeriere 4stellig (aus optischen Gründen) und im Protokoll steht eine 5stellige Erl(?).
Ein anderes Protokoll zeigt mir Zeile 1360 mit Code 53 - Datei nicht gefunden als Fehler an, in Zeile 1360 steht
1360                MsgBox "Ich würde jetzt den Updater starten!", 16, _
                           "Die Softwarestände sind unterschiedlich"

Die Fehlerbehandlung ruft folgende Zeile auf Fehler:
    Fehlerprot "ModulAnmelder", "SWCheck", Err.Number, Err.Description, "Erl=" & Erl, True
    Resume Ende
End Sub
Und das Fehlermodul sieht so aus Public Sub Fehlerprot(Formul As String, _
                      Proz As String, _
                      Code As Long, _
                      Descr As String, _
                      Optional Zusatz As String, _
                      Optional KeinHalt As Boolean)
 Dim strSQL As String, Aus As Boolean, Info As String
    On Error Resume Next
    Descr = Replace(Descr, "'", "-")
    strSQL = "INSERT INTO tbl_Stoerung (Melder, Comp, Zeit, Programm, Versio, Formelar," _
                                       & "Prozedur, Code, Descr, Zusatz) " _
           & "VALUES ('" & Environ("Username") _
           & "', '" & Environ("Computername") _
           & "', " & SQLNow _
           & ", '" & Prog _
           & "', " & Versio _
           & ", '" & Formul _
           & "', '" & Proz _
           & "', " & Code _
           & ", '" & Descr

     If Nz(KeinHalt, False) Then GoTo Sprung
    If Code <> 0 Then
        If MsgBox("Hm, da habe ich wohl etwas falsch gemacht," & vbCrLf & vbCrLf & _
                "(" & Code & ") - " & Descr & vbCrLf & vbCrLf & _
                "Soll ich " & Prog & " entnervt beenden?", _
                276, "Ein Fehler ist aufgetreten") = vbYes Then Aus = True
    End If
Sprung:
    If Aus Then
        Info = "(Quit) "
    ElseIf KeinHalt Then
        Info = "(KeinHalt) "
    Else
        Info = "(Weiter) "
    End If
    strSQL = strSQL & "', '" & Info & "- " & Nz(Zusatz, "") & "')"
   
    Debug.Print "-------------------------------"
    Debug.Print "Fehler in " & Formul, "Prozedur " & Proz
    Debug.Print Code & " - " & Descr
    Debug.Print "Zusatz: " & Zusatz
    Debug.Print "KeinHalt = " & KeinHalt, Zusatz
    Debug.Print "-------------------------------"
   
    CurrentDb.Execute strSQL
   
    If Aus Then Abmelden
    On Error GoTo 0
End Sub

Ist Erl doch nicht so zuverlässig wie gedacht?

Gruß
 Doming