AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Abhängigkeiten von DBCheckboxen

Ein Thema von Printe · begonnen am 29. Jan 2007 · letzter Beitrag vom 2. Feb 2007
Antwort Antwort
Printe

Registriert seit: 29. Jan 2007
Ort: Heiden
5 Beiträge
 
Delphi 5 Professional
 
#1

Abhängigkeiten von DBCheckboxen

  Alt 29. Jan 2007, 16:24
Aufgabe:

in einer GroupBox sind 5 DBCheckBoxen platziert. Diese 5 DBCheckboxen sollen sich bei Neueingabe von Daten gegenseitig ausfüllen.

Beispiel:

Jemand ist im Besitz der Füherescheinklasse BE somit ist er auch gleichzeitig im Besitz der Füherescheinklasse B.
Das gleiche gilt für die Klassen C, CE usw die dann andere Klassen beinhalten.


Füge ich nun mit Append einen leeren Datensatz an und versetze die Tabelle in den Edit Modus werden trotz Vorbelegung aller Checked Felder mit False die DBCheckBox'en FS_B, FS_BE und FS_CE mit True angezeigt.

Welche Einstellungen habe ich falsch gesetzt oder muss ich noch setzten
Oder habe ich einen Gedankenfehler????

Wer kann mir dabei helfen

mfg
Printe
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Abhängigkeiten von DBCheckboxen

  Alt 29. Jan 2007, 17:38
Zitat von Printe:
Füge ich nun mit Append einen leeren Datensatz an und versetze die Tabelle in den Edit Modus
Entweder [dataset].Edit oder [dataset].Append, aber nicht beides hintereinander.
Die Default-Belegung für Felder nach dem Einfügen eines neuen Datensatzes sieht so aus:
Delphi-Quellcode:
procedure TForm1.Query1AfterInsert(Dataset:TDataSet);
begin
   Dataset['FS_B'] := false;
   Dataset['FS_BE' ] := ..........
end;
PS:
Und die Abhängigkeiten der Führersccheinklassen bildet man in BeforePost ab:
Delphi-Quellcode:
procedure TForm1.Query1BeforePost(Dataset:TDataSet);
begin
   // Wenn jemand Klasse BE hat, dann muss er auch Klasse B haben
   if Dataset.FieldByName('FS_BE').asBoolean then
      Dataset['FS_B'] := True;
    := ..........
end;
Andreas
  Mit Zitat antworten Zitat
Printe

Registriert seit: 29. Jan 2007
Ort: Heiden
5 Beiträge
 
Delphi 5 Professional
 
#3

Re: Abhängigkeiten von DBCheckboxen

  Alt 29. Jan 2007, 22:50
Hallo shmia

Die Vorbelegung in der Tabelle "TabPersonal" mit der Procedur
TDataModuStamPer.TabPersonalAfterInsert(DataSet: TDataSet)
funktioniert. Danke.

Aber beim Posten der Daten ist bei den Abhängigkeiten leider keine Reaktion.

procedure TDataModuStamPer.TabPersonalBeforePost(DataSet: TDataSet);
begin

if DataModuStamPer.TabPersonal.FieldByName('FS_CE').A sBoolean then
DataModuStamPer.TabPersonal['FS_B'] := True;
DataModuStamPer.TabPersonal['FS_BE'] := True;
DataModuStamPer.TabPersonal['FS_C'] := True;

if DataModuStamPer.TabPersonal.FieldByName('FS_C').As Boolean then
DataModuStamPer.TabPersonal['FS_B'] := True;
DataModuStamPer.TabPersonal['FS_BE'] := True;

if DataModuStamPer.TabPersonal.FieldByName('FS_BE').A sBoolean then
DataModuStamPer.TabPersonal['FS_B'] := True;
end;
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Abhängigkeiten von DBCheckboxen

  Alt 30. Jan 2007, 07:53
Herzlich willkommen in der Delphi-PRAXiS, Printe.

Wenn du mehrere Anweisungen in Abhängigkeit von einer Bedingung ausführen möchtest, dann musst du sie zu einem Anweisungsblock zusammenfassen:

Delphi-Quellcode:
with DataModuStamPer.TabPersonal do
  if FieldByName('FS_CE').AsBoolean then
  begin
    FieldValues['FS_B'] := True;
    FieldValues['FS_BE'] := True;
    FieldValues['FS_C'] := True;
  end;
Wenn du die Feldabhängigkeiten erst beim Ereignis OnBeforePost() behandelst, dann bringst du dich um eine visuelle Kontrolle. Wäre es nicht schöner, wenn die Abhängigkeiten schon vor dem Speicherauftrag sichtbar gemacht würden?

Freundliche Grüße
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: Abhängigkeiten von DBCheckboxen

  Alt 30. Jan 2007, 10:29
Zitat von Printe:
Aber beim Posten der Daten ist bei den Abhängigkeiten leider keine Reaktion.
Delphi-Quellcode:
procedure TDataModuStamPer.TabPersonalBeforePost(DataSet: TDataSet);
begin
   if DataModuStamPer.TabPersonal.FieldByName('FS_CE').AsBoolean then
      DataModuStamPer.TabPersonal['FS_B']    := True;
      DataModuStamPer.TabPersonal['FS_BE']    := True;
      DataModuStamPer.TabPersonal['FS_C']    := True;

   if DataModuStamPer.TabPersonal.FieldByName('FS_C').AsBoolean then
      DataModuStamPer.TabPersonal['FS_B']    := True;
      DataModuStamPer.TabPersonal['FS_BE'] := True;

   if DataModuStamPer.TabPersonal.FieldByName('FS_BE').AsBoolean then
      DataModuStamPer.TabPersonal['FS_B']    := True;
end;
Lass doch "DataModuStamPer.TabPersonal" weg und verwende stattdessen den Übergabeparameter "DataSet", so wie in meinem Beispiel!!
Du schreibst "keine Reaktion" - vielleicht hast du die Reaktion nur übersehen. Sie wird erst dann sichtbar, nachdem der Datensatz gerade gespeichert wurde.
Ein Breakpoint am Begin des Eventhandlers bringt Gewissheit.
Andreas
  Mit Zitat antworten Zitat
Printe

Registriert seit: 29. Jan 2007
Ort: Heiden
5 Beiträge
 
Delphi 5 Professional
 
#6

Re: Abhängigkeiten von DBCheckboxen

  Alt 30. Jan 2007, 11:57
Hallo shmia
Als Kontrolle hatte ich mir ein DBGRID mit den dazugehörenden Daten aufs Form gezogen um die Reaktion nach dem Speichern sofort sichtbar zu machen.
Aber keine Reaktion. Daher meine nochmalige Nachfrage.
Du schreibst ich solle statt "DataModuStamPer.TabPersonal" den Parameter "DataSet" benutzen. Aber wie verhält es sich dann wenn anderen Tabellen die eventuel die gleiche Feldbezeichnung haben in dem Datenmodul eingearbeitet sind ?

Na ja ich habe zwischenzeitlich mal den Lösungsvorschlag von "marabu" ausprobiert und siehe da nach dem Abspeichern habe ich die Reaktionen die ich haben wollte.

Schönen Dank an marabu
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: Abhängigkeiten von DBCheckboxen

  Alt 30. Jan 2007, 12:58
Hallo Printe,

der an den event handler übergebene DataSet ermöglicht dir event sharing, eine Programmiertechnik, bei der du denselben handler für mehrere Komponenten einsetzen kannst, wenn du ihn entsprechend entwirfst:

Delphi-Quellcode:
procedure TDemoForm.EditEnter(Sender: TObject);
begin
  with Sender as TEdit do
    Color := clYellow;
end;
Diesen handler für das event OnEnter() kannst du an alle Edit-Komponenten anhängen und es wird trotzdem die richtige Komponente eingefärbt - siehst du aber erst, wenn du auch einen handler für OnExit() bereit stellst, der die Farbe wieder wegnimmt.

Hier noch ein Beispiel anhand deines Problems, wobei ich von vier DBCheckBoxen für B, BE, C, CE ausgehe:

Delphi-Quellcode:
procedure TDemoForm.DBCheckBoxClick(Sender: TObject);
var
  ds: TDataSet;
  index: Integer;
begin
  if Active then
    with (Sender as TDBCheckBox) do
    begin
      ds := DataSource.DataSet;
      if Checked and (ds.State <> dsBrowse) then
      begin
        index := AnsiIndexText(DataField, ['FS_B','FS_BE','FS_C','FS_CE']);
        if index > 2 then ds.FieldValues['FS_C'] := True;
        if index > 1 then ds.FieldValues['FS_BE'] := True;
        if index > 0 then ds.FieldValues['FS_B'] := True;
      end;
    end;
end;
So werden die Änderungen sofort sichtbar.

Hast du die gleichen Datenbankfelder in verschiedenen DataSets (aus welchen Gründen auch immer) aktiv, dann müssen die DataSets sich untereinander synchronisieren. Dazu kannst du Methoden wie Refresh() oder Requery() verwenden.

Freundliche Grüße
  Mit Zitat antworten Zitat
Printe

Registriert seit: 29. Jan 2007
Ort: Heiden
5 Beiträge
 
Delphi 5 Professional
 
#8

Re: Abhängigkeiten von DBCheckboxen

  Alt 2. Feb 2007, 10:13
Hallo marabu

ich habe jetzt ein paar Tage versucht Dein Demobeispiel umzusetzten. Leider hackt es immer wieder an der Stelle

"index := AnsiIndexText(DataField, ['FS_B','FS_BE','FS_C','FS_CE']); "

Dabei kommt immer die Fehlermeldung

"[Fehler] PerStamm.pas(654): Undefinierter Bezeichner: 'AnsiIndexText'"

Ich habe in all meinen Büchern und auch in der Hilfe nach "AnsiIndexText" gesucht aber nichts gefunden

kannst Du mir noch einmal auf die Sprünge helfen
Danke

mfg
printe
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: Abhängigkeiten von DBCheckboxen

  Alt 2. Feb 2007, 12:04
Hallo,

kann es sein, dass ich die Delphi-Version in deinem Profil bisher übersehen habe?

Delphi-Quellcode:
function AnsiIndexText(const AText: string;
  const AValues: array of string): Integer;
var
  I: Integer;
begin
  Result := -1;
  for I := Low(AValues) to High(AValues) do
    if AnsiSameText(AText, AValues[I]) then
    begin
      Result := I;
      Break;
    end;
end;
Viel Erfolg.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz