Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: thomut am Juli 18, 2010, 10:20:03

Titel: Abfrage von Textfelder ob noch leer
Beitrag von: thomut am Juli 18, 2010, 10:20:03
Hallo, habe mal noch eine Frage, ich habe ein Formular mit mehrern Textfeldern, nun drücke ich auf den Speicherbutton und möchte aber vorher überprüfen lassen ob alle textfelder ausgefüllt sind, wenn nicht dann soll das speichern abgebrochen werden. Ich lasse dann den Text zum Textfeld rot einfärben, das funktioniert aber schon nur wie unterbreche ich den speichervorgang so das die restlichen textfelder dann noch eingegeben werden können???
Mfg Thomas
Titel: Re: Abfrage von Textfelder ob noch leer
Beitrag von: database am Juli 18, 2010, 10:44:29
Hallo,

Zitatnun drücke ich auf den Speicherbutton

... dadurch gehe ich davon aus, dass es sich um ein ungebundenes Formular handelt.
Nun, wenn du brav mit Suffixen arbeitest dann sollten Textfelder das Suffix 'txt' im Feldnamen tragen - also in der Form 'txtDeinTextfeld'

Du KÖNNTEST in dem Fall alle Textfelder am Formular mit folgendem Code durchlaufen und überprüfen

   Dim ctl As Control
   Dim check as boolean

   check = true
   
   For Each ctl In Me.Controls
   
       If Left(ctl.Name, 3) = "txt" Then
           If IsNull(ctl) Then
               MsgBox "nicht befüllt"
               check = false
           End If
       End If
   Next

   'Prüfen auf Vollständigkeit und Reaktion
   If check = False Then
      
        MsgBox "Es wurden nicht alle benötigten Informationen erfasst ....", vbExclamation,"Datenspeicherung"
        Exit Sub

   Else

        'Code fürs Speichern ausführen  

   End If



HTH

Peter
Titel: Re: Abfrage von Textfelder ob noch leer
Beitrag von: thomut am Juli 18, 2010, 11:06:03
Hallo Peter, danke für die schnelle Antwort, habs doch noch gelöst ,  aber ich hatte die If Schleife falsch gesetzt, kam ich erst nach deinem code drauf. Meine Lösung ist so. Sie funktioniert schön wenn ein feld nicht ausgefüllt ist wird das dazugehörige Bezeichnungsfeld rot und im ereigniss nach Aktualisierung steht der code das Bezeichnungfeld fürs Textfeld wieder mit nem schwarzen text zu füllen

Private Sub Befehl250_Click()

If Len(Trim$(Nz(Me!A1, vbNullString))) = 0 Then
Me!A1.Controls(0).ForeColor = vbRed
rotFärben
Cancel = True
Else

With CurrentDb.OpenRecordset("Health_49", dbOpenDynaset)
        .FindFirst "ID =" & ID
        If .NoMatch Then
            .AddNew
            !ID = Me!ID
          Else
            .Edit
        End If
       
        !Nachname = Me!Nachname
        !Vorname = Me!Vorname
        !von = Me!von
        !bis = Me!bis
        !DatumHealth_49Prä = Me!Datum
        !Bezugstherapeut = Me!Bezugstherapeut
        !A1Health_49Prä = Me!A1
        !A2Health_49Prä = Me!A2
        !A3Health_49Prä = Me!A3


        .Update
    End With
   


    DoCmd.Close acForm, "Health_49Prä"
   
    End If
   
End Sub


Private Sub rotFärben()
    If IsNull(Me!A1)  Then
        MsgBox "Achtung noch nicht alles ausgefüllt"
       
    End If
End Sub




Private Sub A1_AfterUpdate()
If Len(Trim$(Nz(Me!A1, vbNullString))) > 0 Then
Me!A1.Controls(0).ForeColor = vbBlack
End If

End Sub

Danke schön und ein schönes Wochenende Thomas
Titel: Re: Abfrage von Textfelder ob noch leer
Beitrag von: database am Juli 18, 2010, 11:11:11
Hi,

wenn ich mich nicht verlesen habe überprüfst du mit deinem Monstercode aber nur ein Feld!?

Zitatich habe ein Formular mit mehrern Textfeldern

Wenn du das für jedes Feld machst wirds mehr als unübersichtlich!

Peter

p.s. IF ist KEINE Schleife, IF prüft eine Bedingung auf Wahrheit / Erfüllungsgrad  ;)
Titel: Re: Abfrage von Textfelder ob noch leer
Beitrag von: thomut am Juli 18, 2010, 11:19:54
Hallo Peter, hast recht merke ich auch grad war dann wohl doch noch nicht die optimale Lösung
Thomas
Titel: Re: Abfrage von Textfelder ob noch leer
Beitrag von: thomut am Juli 18, 2010, 12:22:06
Hallo Peter, habe jetzt nochmal mit deinem Code rumprobiert, leider habe ich keinen Erfolg gehabt.
Also auf irgendeine Kennzeichnung der textfelder kann ich verzichten. Das Formular ist ungebunden und hat Textfelder als Eingabefelder die aber keinen Text sonder als Zahl deklariert sind. Die Felder besitzen weiterhin eine Formatierung so das nur eine Zahl zwischen 1 und 4 eingegeben werden kann.
kannst du mir da irgenwie weiterhelfen??
Gruß Thomas
Titel: Re: Abfrage von Textfelder ob noch leer
Beitrag von: bahasu am Juli 18, 2010, 12:38:39
Hallo,

ohne VBA kommst Du aus, wenn Du in der Tabelle bei den gewünschten Feldern die Eigenschaft "leere Zeichenfolge" auf "nein" setzst.

Harald
Titel: Re: Abfrage von Textfelder ob noch leer
Beitrag von: thomut am Juli 18, 2010, 12:51:15
Hallo, wie gesagt Formular is ungebunden daher keine Tabelle daten werden nur angefügt.
VBA kann ruhig sein.
Thomas
Titel: Re: Abfrage von Textfelder ob noch leer
Beitrag von: bahasu am Juli 18, 2010, 13:16:10
Hi

neuer Versuch ohne VBA :-)
im Formular bei der Steuerelementeigenschaft die Gültigkeitsregel auf "Ist Nicht Null" setzen.

Hilft das?

Harald
Titel: Re: Abfrage von Textfelder ob noch leer
Beitrag von: thomut am Juli 18, 2010, 13:51:55
Hallo, nützt mir nichts, hab es folgendermaßen gelöst, Code:
Private Sub Befehl250_Click()
    If bClose = False Then Cancel = True

Dim Felder As Variant
Dim x As Variant
Dim Feldbezeichnung As Variant
Dim Ausgabe As String

Felder = Array(A1, A2, A3)
           
Feldbezeichnung = Array("A1", "A2", "A3", "Ende")


Ausgabe = ""

Do Until Feldbezeichnung(x) = "Ende"


        If IsNull(Felder(x)) Then Ausgabe = Ausgabe & Chr(13) & Feldbezeichnung(x)

    x = x + 1

Loop

    If Ausgabe = "" Then
        bClose = True
       
With CurrentDb.OpenRecordset("Health_49", dbOpenDynaset)
        .FindFirst "ID =" & ID
        If .NoMatch Then
            .AddNew
            !ID = Me!ID
          Else
            .Edit
        End If
       
        !Nachname = Me!Nachname
        !Vorname = Me!Vorname
        !von = Me!von
        !bis = Me!bis
        !DatumHealth_49Prä = Me!Datum
        !Bezugstherapeut = Me!Bezugstherapeut
        !A1Health_49Prä = Me!A1
        !A2Health_49Prä = Me!A2
        !A3Health_49Prä = Me!A3
   
       

        .Update
    End With
   

      MsgBox "alles fertig eingetragen?"
    DoCmd.Close acForm, "Health_49Prä"
    DoCmd.Close acForm, "Health"
    DoCmd.OpenForm "Health"
   Else
        MsgBox ("Folgende Felder wurden vergessen!" & Chr(13) & Ausgabe)
   

    End If
   
End Sub

Private Sub Form_Load()
   bClose = False

End Sub

Auf diese weise werden alle noch nicht aufgelisteten Felder angezeigt und nach dem Ausfüllen kann man dann alles Speichern.

Gruß Thomas

Titel: Re: Abfrage von Textfelder ob noch leer
Beitrag von: database am Juli 18, 2010, 18:29:01
Hallo,

also man kann so ziemlich alles komplizieren, soviel hab' ich bemerkt :)

Warum bleibst du nicht bei meinem Vorschlag? ???

ZitatAlso auf irgendeine Kennzeichnung der textfelder kann ich verzichten
Schön - wenn du der Meinung bist, dass es dann einfacher wird ... ? :-\
ZitatDas Formular ist ungebunden und hat Textfelder als Eingabefelder die aber keinen Text sonder als Zahl deklariert sind
...was ja nichts, aber auch schon mal gar nichts mit einem Präfix zu tun hat - es sind und bleiben TEXTFELDER mit dem Präfix txt, egal was drin steht! :'(
Die Notation ist keine Erfindung meiner Wenigkeit, das haben schon weit aus klügere Köpfe lange vor meiner Zeit gemacht.

Wenn die Felder eine Kennzeichnung haben, die sie von allen anderen unterscheiden KANN man auch diese zur Unterscheideung beim Durchlaufen der Steuerelementauflistung verwenden.
Somit kannst du statt nach dem von dir so verschmähtem 'txt' am Anfang des Feldnamens auch nach der numerischen Kennzeichnung am Ende des Feldnamens selektieren!


    Dim ctl As Control
    Dim check as boolean
    Dim mangelhaft as String

    check = true
   
    For Each ctl In Me.Controls
   
        If IsNumeric(Right(ctl.Name,1)) Then
            If IsNull(ctl) Then
                MsgBox "nicht befüllt"
                check = false
                mangelhaft = mangelhaft & ctl.name & " "
            End If
        End If
    Next

    'Prüfen auf Vollständigkeit und Reaktion
    If check = False Then
       
        MsgBox "Es wurden nicht alle benötigten Informationen erfasst." & vbCrLf & _
                     "In " & mangelhaft & " fehlen Eintragung(en)!", vbExclamation,"Datenspeicherung"
        Exit Sub

    Else

         'Code fürs Speichern ausführen   

    End If




Den Code fürs Speichern KÖNNTEST du OHNE Probleme um EINIGES vereinfachen:

Wie wär's mit einem schönen INSERT-Statement, das du dann per CurrentDB.Execute in die Datenbank schickst?
Dann wird aus deinem Codeblock zum Schreiben in die DB ein 2-Zeiler ;D

Grüße

Peter
Titel: Re: Abfrage von Textfelder ob noch leer
Beitrag von: MzKlMu am Juli 18, 2010, 18:43:59
Hallo,
oder wie wäre es ganz einfach, mit einem gebundenen Formular.   ;D  Dann kann sich ganz aufs Prüfen verlegen und um das Schreiben (und lesen) der Daten muss man sich nicht kümmern.
Titel: Re: Abfrage von Textfelder ob noch leer
Beitrag von: database am Juli 18, 2010, 18:48:12
Hallo,

@MzKlMu
Den Vorschlag hat der TO schon mehrmals abgelehnt (auch schon in vorausgegangenen Threads) ...  warum auch immer...
Titel: Re: Abfrage von Textfelder ob noch leer
Beitrag von: MzKlMu am Juli 18, 2010, 19:01:52
Hallo,
ZitatDen Vorschlag hat der TO schon mehrmals abgelehnt
Ich weis, aber steter Tropfen höhlt (vieleicht) den Stein.

Ich frage mich immer wieder, warum man sich das antut und mit ungebunden Formularen arbeitet. Ich bin der Überzeugung man kommt mit gebundenen Formularen mit höchstens der Hälfte das VBA Codes aus ohne Einschränkkung der Funktionalität.
Gebundene Formulare haben nach meiner Auffassung auch einen entscheidenden Vorteil: Viele Dinge gehen automatisch, um die man sich mit ungebundenen Formulare selbst kümmern muss. Z.B. Hafo/Ufo Konstruktionen sind gebunden einfach, ungebunden kompliziert(er).

@thomut
Mich würde wirklich mal der Grund interessieren, warum Du unbedingt mit ungebundenen Formularen arbeiten willst.
Titel: Re: Abfrage von Textfelder ob noch leer
Beitrag von: thomut am Juli 18, 2010, 20:20:57
Hallo, ganz einfach weil das Formular nur zur eingabe von Zahlen benötigt wird gleichzeitig wird estwas berechnet und das ganze aus 4 Formularen die sehr sehr ähnlich sind und sich nur in einigen Formeln ändern und das ganze dann in alles in einer Tabelle gespeichert werden soll die dann nur zum als gesamt Export ins exel dient, mehr nicht. das ganze geht so viel bequemer weil es auf diesem wege auch einen gewissen grundschutz des überschreibens oder löschens von Daten bietet, und sich das ganze sehr bequem ändern und anpassen lässt ohne ständig die Tabellenstrucktur ändern zu müssen und und und, ansonsten verwende ich auch lieber gebundene Formulare ist aber an dieser stelle so besser gewesen.
Mit freundlichen grüßen Thomas