Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Formular - Felder per Funktion vergleichen





Frage

Hallo liebe Experten, ich habe ein Formular, welches in die Haupttabelle reinschreibt. In der Haupttabelle habe ich ein Extrafeld namens STATUS. Zusätzlich habe ich noch zwei Tabellen für Kombinationsfelder 8TabelleA und TabelleB). TabelleA und TabelleB haben nur 2 Werte Ja/Nein. GESUCHT: Wenn zwei Kombifelder mit Ja ausgefüllt sind, soll das Formular in das Feld STATUS der Haupttabelle auch "Ja" schreiben, sonst "NEIN". Ich glaube das geht irgendwie per VBA-Funktion. Vielen Dank mb

Antwort 1 von JohnnyLoser

Hi Martin,

wenn der Wert eines Feldes in Deiner Tabelle abhängig von 2 anderen Felder der Tabelle sein soll, würde ich Dir empfehlen, dieses Feld ganz zu entfernen und stattdessen als Datenherkunft Deines Formulars eine Abfrage zu wählen. Hier kannst Du neben Deinen Tabellenfeldern zusätzlich ein Feld mit folgendem Eintrag erstellen:

Status: WENN([Feld1]=True AND [Feld2]=True; "Ja"; "Nein")

Wenn beide Felder Wahr sind, wird Ja angezeigt, ansonsten Nein.

Gruß

Johnny

P.S.: Die Lösung mit VBA hat den Haken, daß Du zwar während der Eingabe im Formular den Wert richtig setzen kannst, falls jedoch jemand zufällig in der Tabelle den Wert ändert, der Status dann falsch angezeigt wird.

Antwort 2 von martiboll

Hi Johnny,

vielen Dank für den Tipp. Noch eine Frage habe ich: wird bei beiden TRUE-Werten auch der Feld STATUS mit JA überschrieben?

Der Hintergrund ist, wenn Feld1 und Feld2 auf JA geändert werden, dann muß auch der STATUS-Feld der Haupttabelle JA aufweisen und dieser Eintrag ist sozusagen bearbeitet (geschlossen).

Dies ist so eine Art Auftragsbearbeitung.

Gruß

M

Antwort 3 von JohnnyLoser

Hi Martin,

wenn ich Dich richtig verstanden habe, befinden sich in Deiner Tabelle mit den Auftrags(-kopf)daten 3 Felder:

Feld1: (Ja/Nein)
Feld2: (Ja/Nein)
Status: (Ja/Nein)

Du möchtest, sobald Feld 1+2 "Ja" sind, daß Status auch "Ja" wird?!?

(Korregier mich, wenn ich falsch liege!)

Falls meine Annahme richtig ist, muß ich Dir leider sagen, daß Deine Lösung sowohl unpraktikabel, als auch unsinnig ist. Ein Auftrag sollte nur ein Feld für einen Status besitzen, daß nicht von den Stati anderer Felder abhängig ist.

Wenn Du wirklich 2 Felder benötigst, um den Status eines Auftrages zu bestimmen, warum belässt Du es dann nicht bei diesen Feldern?

Alle Abfragen und/oder Verweise auf diese Tabelle kannst Du ausschließlich über diese beiden Felder steuern.

Natürlich ist es technisch auch möglich ein Feld Status zu haben und dieses per Code in einem Formular zu aktualisieren. Doch es ändert nichts daran, daß Access es zulassen wird, daß Feld 1+2 "Nein" sind und Status trotzdem "Ja". In diesem Fall sind die Daten nicht mehr kohärent, was zu einer Fehlfunktion Deines Programms führen kann.

Bitte überprüfe noch mal, ob Du nicht mit einem Feld Status auskommen kannst.

Abgesehen davon kann ich mir eh nicht vorstellen, wie Du mit einem Ja/Nein-Feld den Status eines Auftrages bestimmen willst. Es gibt nur 2 Möglichkeiten, doch mir fallen auf Anhieb 3 Stati ein, in die ein Auftrag mindestens gesetzt werden können muß:

1. Neuer Auftrag / Offener Auftrag
2. Abgeschlossener Auftrag / Keine Bearbeitung mehr möglich
3. Annulierter Auftrag / Storniert, gelöscht, etc.

Dies ist mit einem Ja/Nein-Feld nicht möglich.

Wenn Du allerdings auf Deine 3 Felder bestehen solltest, bin ich gerne bereit Dir auch dabei zu helfen, den Code - so sicher, wie möglich - zu erstellen.

Kannst mir auch die Datei mal mailen, dann hab ich ne bessere Vorstellung.

Gruß

Johnny

Antwort 4 von martin

Hi Johnny,

Du liegst richtig mit der Darstellung. Ferner habe ich dieses Beispiel sehr vereinfacht dargestellt, damit jeder leicht nachvollziehen kann. Natürlich könnte es in einem Auftrag mehrere Stati geben.

Allerdings mir ging es um folgendes: ich habe ein Formular, einige Felder sind auszufüllen (Text), andere sind binär (Ja/Nein).
GESUCHT: wenn alle Ja/Nein-Felder NEIN haben, mache diesen Datensatz als bearbeitet (closed). Und dabei habe ich an das Extra-Feld STATI in der Haupttabelle gedacht.

Gruß

Mb

Antwort 5 von JohnnyLoser

Hi Martin,

hier eine vereinfachte Version, wie Du nach der Änderung eines Datensatzes im Formular das Feld Status "setzen" kannst.


Private Sub Form_BeforeUpdate(Cancel As Integer)
If Feld1 And Feld2 Then Status = True 'Else Status = False
End Sub


Nur denke daran: Du kannst danach immer noch in der Tabelle die Werte für Feld1 und Feld2 ändern und der Status ändert sich nicht.

Gruß

Johnny

Antwort 6 von martin

Johnny,

sorry die dummste Frage noch: an welcher Stelle soll ich diese Formel im A97 setzen? Soll zuerst ein Modul geschrieben werden oder sonst wo?

Vielen Dank

M



Antwort 7 von JohnnyLoser

Oops! Habe wahrscheinlich zuviel vorausgesetzt.

Öffne Dein Formular in der Entwurfsansicht, wähle im Menü Ansicht|Code und es öffnet sich ein Fenster, in dem Du folgende Zeilen siehst:

Option Compare Database
Option Explicit

Möglicherweise gefolgt von ein paar Prozeduren (Sub ...)

Ganz am Ende, hinter dem letzten "End Sub" kannst Du den Code schreiben.

Alternativ kannst Du auch in den Formulareigenschaften unter Ereignis den Eintrag "Vor Aktualisierung" wählen und den dann rechts daneben erscheinenden Button "..." anklicken. Im darauf erscheinenden Dialog "Code-Editor" auswählen, worauf sich das Code-Fenster öffnet und der Prozedurrumpf schon vorgegeben ist.

Gruß

Johnny

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: