![]() |
Datenbank: MySql • Version: 5.0 • Zugriff über: MyDac
DBEdit auf Form "Abschalten" weil Feld nicht in der DB
Hi,
ich stehe vor einem Problem. Ich habe mir eine Dialogbox gemacht wo man Vorname, Nachname, Adresse und so weiter eintragen kann. Das Gehört zu Tabelle1. Tabelle2 ist genauso aufgebaut wie Tabelle1 plus diesen 2 Extrafeldern (VarChar(100)). Nun wollte ich die Dialogbox für beide Tabellen nutzen. Wenn ich die beiden DBEdit Felder Disable bekommt ich eine Fehlermeldung, das die beiden Felder nicht in der Tabelle1 sind. Was ja auch stimmt. Dann habe ich versucht die DataSource der Felder auf nil zu setzen. Das klappt auch beim ersten mal. Trage ich aber die DataSource wieder ein, und gehe auf Tabelle2, meint er das die Felder nicht in der Tabelle sind. Nun zu meiner Frage. Wie kann ich das machen, das ich nur eine DialogBox habe, aber mit 2 unterschieldichen Tabellen arbeite??? Geht das überhaupt? Danke im voraus |
AW: DBEdit auf Form "Abschalten" weil Feld nicht in der DB
Wäre es nicht einfacher, die Controls erst zur Laufzeit zu erstellen und einzurichten? Dann könnte man über eine selbst definierte Formular-Property steuern, ob es diese beiden Edits geben soll oder nicht.
|
AW: DBEdit auf Form "Abschalten" weil Feld nicht in der DB
Achso, du meinst nur die beiden? Nicht das ganze Formular. Das könnte ich machen. Das ist eine Idee. Ich dachte halt, man kann das abschalten.
Ich habe es im moment so gemacht, das ich 2 Dummyfelder in der Tabelle1 habe, die zugeordnet werden. Nun muss ich aber noch einen fast gleichen Dialog machen, wo wieder ein Extrafeld enthalten ist. Das sieht dann in der DB etwas doof aus, wenn ich überall nun diese Dummys einbaue. Aber das mit dem erstellen werde ich machen. Vielen dank!!! :thumb: |
AW: DBEdit auf Form "Abschalten" weil Feld nicht in der DB
Es ist einfacher, die Datensensitiven Eingabefelder abzuschalten weil man dazu nur wenig Code benötigt und es angenehmer ist alle Controls im Formdesigner anzulegen.
Hier mal etwas Code zu Anregung:
Delphi-Quellcode:
Die Funktion
{
diese Funktion prüft, ob für ein bestimmte DB-Control in der angegebenen Tabelle ein passendes Feld vorhanden ist. Falls das Feld nicht vorhanden ist, wird das Control abgeklemmt und inaktiv gemacht } function DisconnectDBControls(control:TWinControl; const tablename:string):Boolean; var datafield : string; begin Result := False; if IsPublishedProp(control, 'DataField') then begin datafield := GetStrProp(control, 'DataField'); if not FieldExistsInTable(AdoConnection1, tablename, datafield) then begin SetObjectProp(control, 'DataSource', nil); // DataSource abklemmen // control.ParentColor := True; SetOrdProp(control, 'ParentColor', 1); // Feld grau machen // Hint setzen, damit man dem Anwender erklären kann dass bestimmte Felder für ihn // nicht verfügbar sind control.Hint := 'Feld "'+ datafield +'" nicht in Datenbank vorhanden'; control.ShowHint := True; control.TabStop := False; Result := True; end; end; end;
Delphi-Quellcode:
musst du selbst bereitstellen.
FieldExistsInTable
Im Event FormCreate braucht man dann nur noch pro Feld eine Zeile:
Delphi-Quellcode:
Wichtig ist, dass man die Funktion aufruft bevor die Query geöffnet wird.
// ältere Versionen der Tabelle Kundenstamm haben kein Feld Telefon2
DisconnectDBControls(DBTelefon2, 'Kundenstamm'); |
AW: DBEdit auf Form "Abschalten" weil Feld nicht in der DB
Du kannst natürlich auch die Fehler in dein SELECT aufnehmen und die Controls notfalls noch disablen, aber die DataSource abzuhängen wäre dennoch besser.
Zitat:
|
AW: DBEdit auf Form "Abschalten" weil Feld nicht in der DB
Redundanz muss ja nicht zwangsläufig immer falsch sein. Um das beurteilen zu können müsste man die Datenstruktur sowie die Absicht dahinter kennen.
|
AW: DBEdit auf Form "Abschalten" weil Feld nicht in der DB
[OT]
Zitat:
[/OT] Gruß K-H |
AW: DBEdit auf Form "Abschalten" weil Feld nicht in der DB
Vielen dank für eure Hilfe. Ich werde das mal probieren.
Zum VarChar sag ich nix :-D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:29 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-2025 by Thomas Breitkreuz