Einzelnen Beitrag anzeigen

Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

AW: DBEdit auf Form "Abschalten" weil Feld nicht in der DB

  Alt 28. Jan 2014, 10:49
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 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.
fork me on Github

Geändert von sx2008 (28. Jan 2014 um 10:52 Uhr)
  Mit Zitat antworten Zitat