![]() |
Re: Herausfinden, ob ein DB-Feld ein Pflichtfeld ist
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... |
Re: Herausfinden, ob ein DB-Feld ein Pflichtfeld ist
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 |
Re: Herausfinden, ob ein DB-Feld ein Pflichtfeld ist
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... |
Re: Herausfinden, ob ein DB-Feld ein Pflichtfeld ist
Zitat:
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 |
Re: Herausfinden, ob ein DB-Feld ein Pflichtfeld ist
Zitat:
Interessanter Ansatz! Könntest Du mir mit etwas Code auf die Beine helfen??? |
Re: Herausfinden, ob ein DB-Feld ein Pflichtfeld ist
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Tom,
hier eine kleine Demo - ich habe mit der Northwind-Datenbank für Access 2000 getestet. marabu |
Re: Herausfinden, ob ein DB-Feld ein Pflichtfeld ist
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. |
Re: Herausfinden, ob ein DB-Feld ein Pflichtfeld ist
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 |
Re: Herausfinden, ob ein DB-Feld ein Pflichtfeld ist
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz