Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DBEdit auf Form "Abschalten" weil Feld nicht in der DB (https://www.delphipraxis.net/178792-dbedit-auf-form-abschalten-weil-feld-nicht-der-db.html)

DelTurbo 28. Jan 2014 08:46

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

DeddyH 28. Jan 2014 09:00

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.

DelTurbo 28. Jan 2014 09:09

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:

sx2008 28. Jan 2014 09:49

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:
{
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;
Die Funktion
Delphi-Quellcode:
FieldExistsInTable
musst du selbst bereitstellen.
Im Event FormCreate braucht man dann nur noch pro Feld eine Zeile:
Delphi-Quellcode:
// ältere Versionen der Tabelle Kundenstamm haben kein Feld Telefon2
DisconnectDBControls(DBTelefon2, 'Kundenstamm');
Wichtig ist, dass man die Funktion aufruft bevor die Query geöffnet wird.

himitsu 28. Jan 2014 10:18

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:

Tabelle2 ist genauso aufgebaut wie Tabelle1 plus diesen 2 Extrafeldern (VarChar(100)).
Daß hier noch keiner nach einer Normalisierung geschrien hat?

DeddyH 28. Jan 2014 10:56

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.

p80286 28. Jan 2014 10:56

AW: DBEdit auf Form "Abschalten" weil Feld nicht in der DB
 
[OT]
Zitat:

Zitat von himitsu (Beitrag 1245627)
Zitat:

Tabelle2 ist genauso aufgebaut wie Tabelle1 plus diesen 2 Extrafeldern (VarChar(100)).
Daß hier noch keiner nach einer Normalisierung geschrien hat?

Wer datensensitive Controls nutzt, sucht bei Normalisierung auch bei der ISO nach.

[/OT]

Gruß
K-H

DelTurbo 28. Jan 2014 12:03

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