online 1
gast (50)

/ Forum / Datenbanken

DatenbankenDatenbanken

Fragevon maxim66 vom 12.08.2020, 10:56 Options

Textfeld-Eigenschaften

Hallo,
wie kann man die Eingenschaften von einem Textfeld so verändern, dass dieses Textfeld nie leer ist. Anstatt nichts soll eine "0" stehen.
Vielen Dank im Voraus


Antwort schreiben

Antwort 1 von lorf55 vom 12.08.2020, 18:31 Options

Hallo,
in MS Access:
Eigenschaften - Daten - Standardwert -> 0

Gruß
lorf

Antwort 2 von maxim66 vom 13.08.2020, 09:02 Options

Hallo lorf,
Danke für die Antwort. Ich wollte das Problem so lösen, dass im Textfeld immer irgendetwas steht (Das Eingabefeld darf nicht leer sein). Wenn der Anwender die Eingaben löscht, dann soll eine "0" angezeigt werden und bei der Eingabe einer anderen Zahl die "0" wider verschwindet. Mit Hilfe vom Standardwert wird beim Anlegen des neuen Datensatzes zwar eine "0" angezeigt, kann aber gelöscht werden.
Ich könnte es mit Prozeduren "AfterUpdate" und "BeforeUpdate" lösen, ich habe aber sehr viele Textfelder und der VBA-Code wird sonst sehr lang (keine schöne Lösung). Deswegen suche ich nach einer Eigenschaft, die ich für alle Felder übernehmen kann.

Gruß
maxim66

Antwort 3 von lorf55 vom 14.08.2020, 17:49 Options

Hallo maxim66,
versuch mal das:
Sub TextNullen(frm As Form)
Dim ctl As Control
For Each ctl In frm.Controls
If ctl.ControlType = acTextBox Then
  If (ctl.Value = "") Or IsNull(ctl.Value) Then
    ctl.Value = "0"
  End If
End If
Next ctl
End Sub


Aufruf in der [Ereignisprozedur] in Eigenschaften - Formular - Ereignis - Bei Zeitgeber mit:
TextNullen Me

In Eigenschaften - Formular - Ereignis - Zeitgeberintervall z.B. 1000 eintragen (jede Sekunde alle leeren Felder mit 0 füllen).

Andere Ereignisse(Formular, Detailbereich) haben bei mir nicht funktioniert (O2k).

Antwort 4 von maxim66 vom 15.08.2020, 09:19 Options

Danke lorf,
ich habe Dein VBA-Code eingebaut und er funktioniert einwandfrei.
Ich habe nur eine Frage: Wird meine Datenbank nicht langsamer, wenn jede Sekunde alle meine Textfelder (ca. 200 auf mehreren Formularen verteilt) überprüft werden?

Gruß
maxim66

Antwort 5 von maxim66 vom 15.08.2020, 12:53 Options

Danke lorf,
ich habe Dein VBA-Code eingebaut und er funktioniert einwandfrei.
Ich habe nur eine Frage: Wird meine Datenbank nicht langsamer, wenn jede Sekunde alle meine Textfelder (ca. 200 auf mehreren Formularen verteilt) überprüft werden?

Gruß
maxim66

Antwort 6 von lorf vom 15.08.2020, 16:03 Options

Hallo Maxim66,
die Funktion wird ja in jedem Formular extra aufgerufen, d.h. nur wenn alle Formulare gleichzeitig offen sind, werden auch 200 Felder je Sekunde überprüft (und alle Controls aller Formulare durchgegangen).
Evtl. hilfts 2000 statt 1000 zu nehmen. ;)
Schöner wäre natürlich, ein passendes Formularereignis dafür zu finden. Dafür brauchst du nur bei den Formularereignissen den Code der Reihe nach einfügen bzw. von einem Ereignis zum anderen weiterverschieben und denn probieren.
Eine andere Optimierungsmöglichkeit wäre, nur die Textfelder durchzugehen: Dim ctl As Textbox, aber über Controls kriegte ich das nicht hin und eine Textboxes-Auflistung kenne ich nicht.
Am Schönsten wäre es ein neues Objekt von Textbox abzuleiten, das bei jeder Wertänderung den Wert auf 0 setzt, wenn der gelöscht wurde.
Denn würde man nur noch das für die Formularfelder benutzen und es gäbe diesen Zauber nicht.

Wenn du dazu was Passendes hingekriegt hast, melde dich bitte,

Gruß
lorf

Antwort 7 von maxim66 vom 20.08.2020, 14:27 Options

Hallo,

habe mir wieder Zeit genommen und das Problem gelöst:

Code für ein Modul:
Public Function TextNullen(OnOff As Integer)
Dim frmCurrentForm As Form

  'wenn das Hauptformular den Fokus hat, wird die Funktion nicht durchgeführt
  On Error GoTo TextNullen_Exit

  'das aktive Ufo ermitteln
  Set frmCurrentForm = Screen.ActiveForm.ActiveControl.Form

  'mit aktivem Textfeld im aktiven Ufo arbeiten
  With frmCurrentForm.ActiveControl
    If (OnOff = 0) Then 'Beim Verlassen
      If (.Text = "") Then
          .Text = 0
      End If
    ElseIf (OnOff = 1) Then 'Beim Hingehen
      If (.Text = 0) Then
          .Text = ""
      End If
    End If
  End With
TextNullen_Exit:
End Function

Dann wird für jedes Textfeld, das die o.g. Eigenschaft besitzen soll, Makros erstellt (man kann sofort alle Felder markieren und Ereignis erstellen):
Beim Hingehen - „AusführenCode“ und TextNullen(1)
Beim Verlassen - „AusführenCode“ und TextNullen(0)

Damit die "0" auch nach dem Verlassen des Unterformulars angezeigt wird, soll dieser Code für jedes Unterformular in das HAUPTFORMULAR eingebaut werden:
Private Sub UFo1_Exit(Cancel As Integer)
  TextNullen 0
End Sub

Ich benutze diese Funktion ausschließlich für Unterformulare. Wenn sie für das Hauptformular gebraucht wird, soll die Zeile:
Set frmCurrentForm = Screen.ActiveForm.ActiveControl.Form
gegen
Set frmCurrentForm = Screen.ActiveForm
ausgetauscht werden.

Oder hat jemand eine bessere Lösung?
Funktioniert's bei Dir, lorf?

Gruß
maxim66

Ähnliche Themen

Wie passe ich ein Textfeld automatisch in einem Bericht an
wasa  02.08.2007 - 26 Hits - 2 Antworten

Textfeld soll auf Spalte in Abfrage verweisen
mbalrog  17.08.2007 - 54 Hits - 3 Antworten

bedingter Zeilenwechsel im Textfeld
mbalrog  20.08.2007 - 9 Hits - 2 Antworten

mit Textfeld-Inhalt rechnen
haribo7  11.02.2008 - 106 Hits - 3 Antworten

Datenbanksuche mit Textfeld
Helena123  04.04.2008 - 15 Hits - 1 Antwort

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026