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.