Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi TField "Sperren"? (https://www.delphipraxis.net/58889-tfield-sperren.html)

Angel4585 14. Dez 2005 10:29

Datenbank: Paradox • Version: 7 • Zugriff über: Table

TField "Sperren"?
 
Hallo,

ich habe eine Tabelle mit drei Feldern,

Feld[0] = Wochentag(String)
Feld[1] = Datum(TDateTime)
Feld[2] = Uhrzeit(TDateTime)

Jetzt möchte ich, das wenn in Feld[0] z.B. 'Unbestimmt' drin steht, dass mir die anderen beiden Felder nicht angezeigt werden, auch nicht wenn da jeweils ein Datum, bzw. eine Uhrzeit drin steht.

Gibt es da ne Möglicheit, dass man IsNull "setzt", obwohl ein Wert drin steht?

MfG :angel:

EDIT: Die Werte sollen in TDBEdits angezeigt werden.(=> Visible = False bringt nichts)

sh17 14. Dez 2005 12:28

Re: TField "Sperren"?
 
Zitat:

=> Visible = False bringt nichts
Warum nicht? :-D

mach es mit zwei normalen TEdits. Das Lesen und Schreiben der beiden Felder musst Du dann von Hand machen.

Angel4585 14. Dez 2005 12:33

Re: TField "Sperren"?
 
Ich habs jetzt so gemacht, das ich das "DataField" auf '' bzw. 'Feldname' setze.

marabu 14. Dez 2005 13:06

Re: TField "Sperren"?
 
Alternativ hättest du mit dem Ereignis OnGetText() des Tabellenfeldes arbeiten können.

Grüße vom marabu

Angel4585 14. Dez 2005 13:14

Re: TField "Sperren"?
 
@marabu :
ich weis jetzt nicht ob das dass ist was ich suche, scheint kompliziert zu sein. Ich meine, auch wenn z.B.
Delphi-Quellcode:
FieldByName('Datum').AsString = '01.01.2005'
soll, wenn
Delphi-Quellcode:
FieldByName('Wochentag').asstring = 'Unbestimmt'
FieldByName('Datum').AsString:='';
aber die Daten sollen gleichzeitig nicht in der Tabelle verändert werden.d.h. es soll einfach ein NULL Wert ausgegeben werden.

TeronG 14. Dez 2005 13:24

Re: TField "Sperren"?
 
Zitat:

Zitat von Angel4585
aber die Daten sollen gleichzeitig nicht in der Tabelle verändert werden.d.h. es soll einfach ein NULL Wert ausgegeben werden.

hmm :gruebel: und wenn du einfach deine DB in ein Stringgrid schreibst?
Kleine while-not-eof-Procedure die einfach die entsprechenden Felder leer lässt.

marabu 14. Dez 2005 13:30

Re: TField "Sperren"?
 
Kompliziert ist das sicher nicht.

Delphi-Quellcode:
procedure TDataForm.TableDatumGetText(Sender: TField;
  var Text: String; DisplayText: Boolean);
begin
  if Lowecase(Sender.DataSet.FieldByName('Wochentag').AsString) = 'unbestimmt'
    then Text := ''
    else Text := Sender.AsString;
end;
Wenn du jetzt noch verhindern willst, dass der Benutzer Eingaben in Datum macht, dann kannst du die property ReadOnly des Feldes kontrollieren:

Delphi-Quellcode:
procedure TDataForm.DataSourceDataChange(Sender: TObject; Field: TField);
begin
  if not Assigned(Field) or (Lowercase(Field.FieldName) = 'wochentag') then
    with Field.DataSet.FieldByName('Datum') do
      ReadOnly := (Lowercase(Field.FieldName) = 'wochentag')
        and (Lowercase(Field.AsString) = 'unbestimmt');
end;
Hoffentlich habe ich nicht zu viele Fehler reingebaut...

Grüße vom marabu

Angel4585 14. Dez 2005 13:43

Re: TField "Sperren"?
 
Hmm... mein Prob ist mom noch das die Tabelle in einem Thread ist und ich die ereignisse zur Laufzeit zuwesen muss.. ist normalerweise kein Problem aber irgendwie funzt das nicht richtig:
Delphi-Quellcode:
.
.
TDataSet(FTable).AfterOpen:=FTableAfterOpen;
.
.
procedure TWVThread.OnDatumGetText(Sender: TField; var Text: string;
  DisplayText: Boolean);
begin
if Sender.DataSet.FieldByName('WV_Wochentag').AsString = 'Unbestimmt' then
  Text:=''
else Text:= Sender.AsString;
end;
{******************************************************************************}
procedure TWVThread.OnUhrzeitGetText(Sender: TField; var Text: string;
    DisplayText: Boolean);
begin
if Sender.AsString = '23:59:59' then
 Text:=''
else Text:= Sender.AsString;
end;
{******************************************************************************}
procedure TWVThread.FTableAfterOpen(DataSet: TDataSet);
begin
FTable.FieldByName('WV_Datum').OnGetText:=OnDatumGetText;
FTable.FieldByName('WV_Uhrzeit').OnGetText:=OnUhrzeitGetText;
end;
Weis jemand wo da mein Fehler ist?


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz