AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Herausfinden, ob ein DB-Feld ein Pflichtfeld ist
Thema durchsuchen
Ansicht
Themen-Optionen

Herausfinden, ob ein DB-Feld ein Pflichtfeld ist

Offene Frage von "torud"
Ein Thema von torud · begonnen am 19. Mai 2005 · letzter Beitrag vom 23. Mai 2005
Antwort Antwort
Seite 2 von 2     12   
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#11

Re: Herausfinden, ob ein DB-Feld ein Pflichtfeld ist

  Alt 20. Mai 2005, 09:26
Hallo!

Danke für den Tipp!

Natürlich gibt es in der DB auch Bereiche, die selbst den Admin nichts angehen, aber die bekommt der gar nicht zu sehen. Da mir diese Bereiche bekannt sind, kann ich auch das Handling dafür beeinflussen.

Ich will das Problem nicht herunterspielen, aber es schon so, dass ich denke zu wissen, was ich tue.

Es gibt, wie schon weiter oben erwähnt, die property Required die eigentlich bei einem Feld, welches als Not Null deklariert ist auf True stehen sollte. Ich habe nun extra ein solches Testfeld erzeugt, aber noch kein Erfolgserlebnis erfahren. Vielleicht finde ich den Fehler noch...
Danke
Tom
  Mit Zitat antworten Zitat
nieurig

Registriert seit: 26. Apr 2004
113 Beiträge
 
Delphi 6 Professional
 
#12

Re: Herausfinden, ob ein DB-Feld ein Pflichtfeld ist

  Alt 20. Mai 2005, 09:27
Hallo Tom,
was die einfache Frage für eine Debatte auslöst

Jeder der ein Admin-Tool schreibt, dürfte die Gefahren kennen. Aber ohne Admin-Tools ist das Leben schwerer und die Fehlermöglichkeiten sind trotzdem da. (Wer hindert denn den User, Access direkt zu starten und eine Tabelle oder ein Feld zu löschen?)

Zu Deiner eigentlichen Frage:

Wie Jasucol gesagt hat, hast Du die Möglichkeit die Requiered Eigenschaft des Feldes zu prüfen. Diese ist auch bei Access vorhanden, wenn das Feld mit NOT NULL (im Designer: Eingabe erforderlich) erstellt wurde. Weitere Möglichkeit zur Erstellung von Pflichtfeldern gibt es ja eigentlich auch nicht.

Wenn Du prüfen willst, ob das Feld ein FK Feld ist wird es schwieriger. Entweder versuchst du einfach den Datensatz mit dem aktuellen Wert zu speichern und fängst bei einem falschen FK die Exception ab, oder Du befaßt die mit den Systemtabellen (die gibt es auch in Access). Zumindest beim SQL-Server kann man mit Hilfe dieser Tabellen herausfinden, ob sich ein FK auf ein bestimmtes Feld bezieht.

Frohes Schaffen.
Niels
Erspare Dir die Gedanken über ungelegte Eier !!!
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#13

Re: Herausfinden, ob ein DB-Feld ein Pflichtfeld ist

  Alt 20. Mai 2005, 11:37
Hallo Leute!

Hier mal mein Code, mit dem ich die DB-Objekte dynamisch erzeuge. Da zu finden ist auch der Code, wo ich die Abfrage mit dem Require mache. Komischerweise ist der NIE auf true, obwohl ich extra zum Testen einige solcher Felder angelegt habe.

Habe ich da einen Fehler im Code???

Delphi-Quellcode:
             for i:=0 to dm.ADODataSet1.FieldCount-1 do
               begin
                 case Dm.ADODataSet1.Fields.Fields[i].DataType of
                   ftString,ftWideString,ftDate,ftDateTime,ftCurrency,ftInteger, ftSmallint, ftFloat,ftWord :
                     begin
                      //label erzeugen
                      Labels:= TLabel.Create(new_ds);
                      Labels.Parent := new_ds;
                      Labels.Left :=10;
                      Labels.Width:=85;
                      Labels.Alignment:=taRightJustify;
                      Labels.Top := int_gesamt_top + 3;
                      Labels.Caption:=dm.ADODataSet1.FieldList.Strings[i];
                      //dbfeld erzeugen
                      DBEdit:= TDBEdit.Create(new_ds);
                      DBEdit.Parent := new_ds;
                      DBEdit.Left :=100;
                      DBEdit.Top := int_gesamt_top;

                      //und hier die abfrage, des aktuellen db-feldes
                      if dm.ADODataSet1.Fields.Fields[i].Required=True then
                      begin ShowMessage('not null'); DBEdit.Color:=clRed; end;

                      DBEdit.DataSource:=dm.DataSource1;
                      DBEdit.Name:=dm.ADODataset1.FieldList.Strings[i];
                      DBEdit.DataField:=dm.ADODataset1.FieldList.Strings[i];
                      int_gesamt_top:=int_gesamt_top + 30;
                    end;
                 //usw...
Danke
Tom
  Mit Zitat antworten Zitat
marabu

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

Re: Herausfinden, ob ein DB-Feld ein Pflichtfeld ist

  Alt 21. Mai 2005, 20:42
Zitat von marabu:
die TField-Komponente importiert die "NOT NULL" Klausel in der Eigenschaft Required.
Dumm ist nur, dass ADO diese Eigenschaft nicht verwendet - das tut nur die BDE. Als nächstes verfällt man dann auf die Idee, die field properties von ADOTable.RecordSet.Fields[index] zu durchforsten. Nicht nötig - habe ich schon gemacht - nicht umsonst, aber dafür ohne Erfolg.

Der einzige mir momentan bekannte Weg führt über die ADO Extension Library. Ich habe dann zuletzt im AfterOpen-Ereignis des ADO-Dataset Code eingebaut, der die Required-Eigenschaft der Fields korrekt initialisiert. Wenn jemand eine komfortablere Lösung kennt, lerne ich gerne dazu.

Grüße vom marabu
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#15

Re: Herausfinden, ob ein DB-Feld ein Pflichtfeld ist

  Alt 21. Mai 2005, 22:59
Zitat von marabu:
Der einzige mir momentan bekannte Weg führt über die ADO Extension Library. Ich habe dann zuletzt im AfterOpen-Ereignis des ADO-Dataset Code eingebaut, der die Required-Eigenschaft der Fields korrekt initialisiert. Wenn jemand eine komfortablere Lösung kennt, lerne ich gerne dazu.
Hallo Marabu!

Interessanter Ansatz!

Könntest Du mir mit etwas Code auf die Beine helfen???
Danke
Tom
  Mit Zitat antworten Zitat
marabu

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

Re: Herausfinden, ob ein DB-Feld ein Pflichtfeld ist

  Alt 21. Mai 2005, 23:40
Hallo Tom,

hier eine kleine Demo - ich habe mit der Northwind-Datenbank für Access 2000 getestet.

marabu
Angehängte Dateien
Dateityp: zip torud_329.zip (4,4 KB, 30x aufgerufen)
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#17

Re: Herausfinden, ob ein DB-Feld ein Pflichtfeld ist

  Alt 22. Mai 2005, 09:33
Hallo Marabu!

Vielen Dank für das Extra-Beispiel!
Es läuft zwar bei mir nicht, weil ADOX und TCatalog nicht gefunden wurde, aber ich denke, dass ich mit Hilfe einiger anderer Beispiele, in denen zur Laufzeit ein Catalogobjekt erzeugt wird mir helfen werden, Dein Beispiel umzuzusetzen.
Danke
Tom
  Mit Zitat antworten Zitat
marabu

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

Re: Herausfinden, ob ein DB-Feld ein Pflichtfeld ist

  Alt 22. Mai 2005, 09:51
Hallo Tom,

im Projektmenü kannst du die ADOX Typbibiliothek (Microsoft ADO Ext. 2.8 ...) importieren. Dabei solltest du das Präfix ADOX vor die angezeigten Komponenten setzen, damit es zu keinen Namenskonflikten mit der BDE kommt. Aus Table wird dann AdoxTable, ...
Ich speichere die erstellte Unit dann nochmal als ADOX.pas, weil mir der generierte Name ADOX_TLB.pas nicht gefällt. Dann kannst du die Unit ADOX als Komponenten in einem neuen Package oder wo du willst installieren (Menü Komponente).
Danach sollte mein Demo-Code auch bei dir laufen.

marabu
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#19

Re: Herausfinden, ob ein DB-Feld ein Pflichtfeld ist

  Alt 23. Mai 2005, 06:22
Hallo Marabu!

Danke für die Hinweise!

Ich hatte mir die TypeLibary schon importiert und Dein Projekt eigentlich nur dahingehend geändert, dass ich aus Uses Adox - Uses Adox_Tlb gemacht habe und aus TCatalog ein TAdoxCatalog. Die Komponenten sind da und ich kann Sie mir auch auf ein Formular ziehen, aber mit Deinem Projekt funzt es leider nicht.

Aber wie gesagt, ich denke, dass ich es nun hinbekommen werde.
Danke
Tom
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 17:20 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