Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Verwaltung & Überwachung von Pflichtpfeldern einer o. mehrerer DB-Tabellen (https://www.delphipraxis.net/171738-verwaltung-ueberwachung-von-pflichtpfeldern-einer-o-mehrerer-db-tabellen.html)

RWarnecke 22. Nov 2012 13:21

Datenbank: Firebird • Version: 2.5.1 • Zugriff über: UniDAC

Verwaltung & Überwachung von Pflichtpfeldern einer o. mehrerer DB-Tabellen
 
Hallo zusammen,

ich überlege gerade, wie ich die Pflichtpfelder einer Datenbanktabelle (deklariert mit NOT NULL) an meine normalen Edit-Felder binden kann. Ich hole mir über eine Query die entsprechenden Daten in eine Klasse und verbinde dann die Edit-Felder mit den entsprechenden Properties der Klasse. Die Änderungen in der Datenbank werden ebenfalls über die Klasse gesteuert.

Jetzt ist meine Frage welche Möglichkeiten habe ich zu einer zentralen Überprüfung von den Plichtpfeldern außer der manuellen Überprüfung ?

Ich hatte mir überlegt, eventuell eine zweite Klasse zu erstellen, was mir aber nicht sinnvoll erscheint.

Lemmy 22. Nov 2012 13:33

AW: Verwaltung & Überwachung von Pflichtpfeldern einer o. mehrerer DB-Tabellen
 
Hi,

die reine OOP Lösung wäre anstelle der Properties einfach Felder zu verwenden, dort kann man dann die zusätzlichen Eigenschaften ablegen (Required)

Grüße

p80286 22. Nov 2012 15:02

AW: Verwaltung & Überwachung von Pflichtpfeldern einer o. mehrerer DB-Tabellen
 
was verstehst Du unter zentral?
Um keine Fragen aufkommen zu lassen würde ich diese Prüfung in die DB verlegen.

Gruß
K-H

Sir Rufo 22. Nov 2012 15:16

AW: Verwaltung & Überwachung von Pflichtpfeldern einer o. mehrerer DB-Tabellen
 
Haben deine Datenklassen direkten Zugriff auf die Datenbank oder über einen Service?

Ich lasse das alles von einem DatenService abtüten:
Delphi-Quellcode:
TDataService = class
public
  function Validate( ASubject : TSubject ) : Boolean;
  function Update( ASubject : TSubject ) : Boolean;
  function Retrieve( ASubject : TSubject; AID : Variant ) : Boolean;
end;

function TDataService.Update( ASubject : TSubject ) : Boolean;
begin
  if not Validate( ASubject ) then
    Exit( False );
  ...
end;
Der entscheidet dann auch, ob die Prüfung lokal oder auf dem Server erfolgt

RWarnecke 22. Nov 2012 16:52

AW: Verwaltung & Überwachung von Pflichtpfeldern einer o. mehrerer DB-Tabellen
 
Zitat:

Zitat von p80286 (Beitrag 1192407)
was verstehst Du unter zentral?
Um keine Fragen aufkommen zu lassen würde ich diese Prüfung in die DB verlegen.

Gruß
K-H

Unter Zentral verstehe ich, dass ich einen eventuell max. zwei feste Stellen habe, wo ich die Felder der Tabellen verwalte und dort auch festlege, ob das Feld der Tabelle ein Pflichtfeld ist oder nicht. Das Programm soll dann beim Anklicken von Speichern genau diesen Punkt ansteueren und schauen, ob die Pflichtfelder entsprechend mit Werten bestückt sind.

Der Aufbau, den ich im Moment habe ist folgender :

Datenbanktabellen mit Daten --> TUniQuery (diese fragt die entsprechenden Daten ab) --> Die einzelnen Daten aus der Query werden in ein Klasse geschrieben und diese ist wieder in einer TObjectList.

Die TObjectList reagiert jetzt auf das Hinzufügen eines neuen Datensatzes, das Ändern eines Datensatzes und auf das Löschen eines Datensatzes und führt dann automatisch entsprechend die dazugehörigen SQL-Befehl in der Datenbank aus. Im Programm selber greife ich nur auf die Daten der Klasse in der TObjectList zu.

Nun möchte ich, bevor ich irgendwelche neuen oder geänderten Daten in die Klasse der TObjectList schreibe überprüfen, ob das Feld ein Pflichtfeld ist oder nicht ? Die Eingabekomponenten haben weitestgehend den gleichen Namen wie das Tabellenfeld nur mit einem entsprechend Suffix vorne dran. Die Eingabekomponenten, die das nicht haben, ändere ich einfach noch. Nur wie bekomme ich die Definition des Datenbankfeldes NOT NULL von der Datenbank in mein Programm ohne DB-Komponenten ?

shmia 22. Nov 2012 17:00

AW: Verwaltung & Überwachung von Pflichtpfeldern einer o. mehrerer DB-Tabellen
 
Wenn man "ganz normal" mit Datasets arbeitet (also ohne abgehobene Konzepte) dann kann man
im Event [TDataset].BeforePost eine Schleife über alle Felder ausführen:
Delphi-Quellcode:
for i := 0 to Dataset.Fields.Count-1 do
begin
  f := Dataset.Fields[i];
  if f.Required and not f.ReadOnly and (f.IsNull or (Trim(f.AsString)='')) then
  begin
    f.FocusControl;
    raise Exception.CreateFmt('Feld <%s> muss einen Inhalt haben', [f.DisplayName]);
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:22 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