Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!
ZitatDie Frage ist, wie man das in Access hin bekommt.
Zitat von: Knobbi38 am Oktober 09, 2026, 11:05:31das Problem mit dem 503er tritt bei mir in den letzten Tagen wieder gehäuft auf.Wir hatten vom 08.10. bis 12.10. tausende Fehlermeldungen im Log, die aus meiner Sicher daher kommen, dass anonyme User versuchen irgendwelche unsinnigen Aktionen durchzuführen. - Vermutlich Bots, die versuchen neue Accounts zu erstellen und/oder anderweitig irgendwelchen Müll/Spam auf die Webseite zu bringen.
Irgendwelche Erkenntnisse oder ist das nur bei mir so?
Zitat von: Josef P. am Oktober 13, 2026, 10:29:08und dafür meine wiederverwendbaren Codemodule der Access CodeLib nutzen.Hast du Claude vorher oder auf anderem Weg weitergehende Informationen zur Access CodeLib gegeben?

ZitatErstelle eine Formular zum Anzeigen in Listenform und Filtern der Kunden[...]
ZitatIch habe mir die Ausgangslage angesehen:[...]
- tKunden: KundeID, Kundennummer, Firma, Anrede, Titel, Vorname, Nachname,
Strasse, PLZ, Ort, Land, Telefon, Mobil, Email, UID, Bemerkung, Aktiv,
ErstelltAm, GeaendertAm
- fKunde: Einzelformular zum Bearbeiten, mit Speichern/Neu/Löschen/Schließen
- Es gibt noch keine Standardmodule, also auch keine ACLib-Module, und nur die
Referenz auf DAO.
Plan: fKundenListe
Layout (als Endlosformular, Datenquelle tKunden, nur lesend:
AllowEdits/Additions/Deletions = Nein)
- Formularkopf, Filterbereich:
- txtFilterSuche: Suche über Kundennummer, Firma, Nachname, Vorname
(Teiltreffer)
- txtFilterPLZ und txtFilterOrt
- cboFilterLand: Werteliste aus den vorhandenen Ländern
- cboFilterAktiv: Alle / Aktiv / Inaktiv (Standard: Aktiv)
- cmdFilterAnwenden, cmdFilterZuruecksetzen, lblAnzahl (Anzahl der Treffer)
- Spaltenköpfe im Kopf, Detailbereich: Kundennummer, Firma, Nachname, Vorname,
PLZ, Ort, Land, Telefon, Email, Aktiv
- Buttons: cmdNeu öffnet fKunde mit einem neuen Datensatz, cmdOeffnen und ein
Doppelklick auf eine Zeile öffnen fKunde mit dem gewählten Kunden (KundeID =
...)
- Wenn fKunde geschlossen wird, aktualisiere ich die Liste (Requery) und
behalte dabei die aktuelle Position.
Umsetzung
1. Formular und Steuerelemente mit dem MCP-Server access anlegen, dann
access_close und vcs_export_object
2. Code in forms/fKundenListe.cls schreiben, dann vcs_import_object,
vcs_compile_vba, Log prüfen und vcs_export_object
3. Ein Screenshot zur Kontrolle
Zitatjetzt hätte ich noch gerne diesen Aufbau: ein ungebundens Hauptformular mitClaude:
den Filter-Feldern im Formularkopf und im Detailbereich ein Endlosformular
mit den angzeigten Datensätzen. Beim Starten des Hauptformulars sollen keine
Datensätze angezeigt (und natürlich auch nicht geladen) werden
ZitatGut, dann baue ich das Ganze als Hauptformular mit Unterformular auf.Where mehr mitlesen will, ich hänge den vollständigen Text an. (Anhang: Sie dürfen in diesem Board keine Dateianhänge sehen.)
Aufbau
Hauptformular fKundenSuche (ungebunden)
- Kopfbereich: die Filterfelder txtFilterSuche, txtFilterPLZ, txtFilterOrt,
cboFilterLand und cboFilterAktiv, die Buttons cmdFilterZuruecksetzen, cmdNeu
und cmdOeffnen sowie lblAnzahl für die Trefferanzahl.
- Detailbereich: das Unterformular-Steuerelement sfrKundenListe, ohne
Verknüpfungsfelder.
- Code-Behind: hält WithEvents FilterManager As FilterControlManager und
registriert in Form_Load die Filter-Steuerelemente. Im Event
FilterStringChanged setzt es die Datenquelle des Unterformulars neu.
Unterformular fKundenListe (Endlosformular)
- Spaltenköpfe im Formularkopf, darunter die Zeilen mit Kundennummer, Firma,
Nachname, Vorname, PLZ, Ort, Land, Telefon, Email und Aktiv.
- Nur lesend: AllowEdits, AllowAdditions und AllowDeletions stehen auf Nein.
- Ein Doppelklick auf eine Zeile öffnet fKunde mit diesem Kunden.
Keine Datensätze beim Start
- Die Datenquelle des Unterformulars ist im Entwurf SELECT ... FROM tKunden
WHERE False. Die Datenbank-Engine liefert dafür keine Zeilen, es wird also
nichts geladen. Die gebundenen Felder zeigen trotzdem kein #Name?, was bei
einer leeren Datenquelle passieren würde.
- Erst wenn ein Filter gesetzt ist, setzt das Hauptformular die Datenquelle
auf SELECT ... FROM tKunden WHERE <Filter> ORDER BY .... Den Filterstring
erzeugt die ACLib, er ist also gegen SQL-Injection abgesichert.
- Ich setze die Datenquelle direkt statt Filter/FilterOn. Sonst würde das
Unterformular zuerst alle Datensätze laden und erst danach filtern.
Ablauf
[...]
Option Compare Text
Option Explicit
Private Const MSG_TITLE As String = "Kundenliste"
Private Const CUSTOMER_FORM_NAME As String = "fKunde"
Private Const ITEMS_SELECT_SQL As String = _
"SELECT KundeID, Kundennummer, Firma, Nachname, Vorname, PLZ, Ort, Land, Telefon, Email, Aktiv FROM tKunden"
Private Const ITEMS_ORDER_BY_SQL As String = " ORDER BY Firma, Nachname, Vorname"
Private Const NO_RECORDS_CRITERIA As String = "1=0"
' Bound values of cboFilterAktiv (value list "-1;Aktiv;0;Inaktiv;1;Alle")
Private Const STATUS_ACTIVE As Long = -1
Private Const STATUS_ALL As Long = 1
Private WithEvents FilterManager As FilterControlManager
Private WithEvents ItemsForm As Form_fKundenListe_SF_Items
Private ActiveCriteria As String
'---------------------------------------------------------------------------------------
' Form events
'---------------------------------------------------------------------------------------
Private Sub Form_Load()
InitItemsForm
InitFilterManager
End Sub
[...]
Private Sub FilterManager_FilterStringChanged(ByVal NewFilterString As String)
ApplyItemsCriteria GetItemsCriteria(NewFilterString)
End Sub
Private Sub ItemsForm_ItemSelected(ByVal KundeID As Long)
OpenCustomer KundeID
End Sub
'---------------------------------------------------------------------------------------
' Initialization
'---------------------------------------------------------------------------------------
Private Sub InitItemsForm()
Set ItemsForm = Me.sfrItems.Form
ApplyItemsCriteria NO_RECORDS_CRITERIA
End Sub
Private Sub InitFilterManager()
Set FilterManager = New FilterControlManager
Set FilterManager.SqlTool = SqlTools.DAO
AddFilterControls FilterManager.FilterControls
FilterManager.AutoFilterOn = True
End Sub
Private Sub AddFilterControls(ByVal FilterControls As FilterControlCollection)
AddSearchTextFilter FilterControls.AddGroup(SQL_Or)
With FilterControls
.Add "PLZ", SQL_Text, SQL_Like + SQL_Add_WildCardSuffix, Me.txtFilterPLZ
.Add "Ort", SQL_Text, SQL_Like + SQL_Add_WildCardSuffix, Me.txtFilterOrt
.Add "Land", SQL_Text, SQL_Equal, Me.cboFilterLand
' Null (cleared combobox) is ignored as well, otherwise it would filter "Aktiv Is Null"
.Add "Aktiv", SQL_Numeric, SQL_Equal, Me.cboFilterAktiv, , Array(STATUS_ALL, Null)
End With
End Sub
' txtFilterSuche matches a part of any of these fields.
Private Sub AddSearchTextFilter(ByVal SearchGroup As FilterControlCollection)
Dim FieldName As Variant
For Each FieldName In Array("Kundennummer", "Firma", "Nachname", "Vorname")
SearchGroup.Add CStr(FieldName), SQL_Text, _
SQL_Like + SQL_Add_WildCardPrefix + SQL_Add_WildCardSuffix, Me.txtFilterSuche
Next
End Sub
'---------------------------------------------------------------------------------------
' Filter
'---------------------------------------------------------------------------------------
Private Sub ResetFilter()
FilterManager.RemoveFilter
Me.cboFilterAktiv.Value = STATUS_ACTIVE
End Sub
[...]
'---------------------------------------------------------------------------------------
' Customer form
'---------------------------------------------------------------------------------------
Private Sub OpenSelectedCustomer()
Dim KundeID As Variant
KundeID = ItemsForm.SelectedKundeID
If IsNull(KundeID) Then
MsgBox "Bitte zuerst einen Kunden auswählen.", vbInformation, MSG_TITLE
Exit Sub
End If
OpenCustomer KundeID
End Sub
[...]