Entwickler-Ecke

Datenbanken - Datum automatisch ind dbgrid Feld einfügen


The_Tremendous - Do 30.12.04 14:14
Titel: Datum automatisch ind dbgrid Feld einfügen
Ich möchte jedes mal, wenn das dbgrind im edit modus gesetzt wird, das aktuelle Datum in das Feld Datum im Grid automatisch einfügen.


Wie kann ich das machen??


The_Tremendous


Tino - Do 30.12.04 14:23

Hallo!

Wo liegt genau das Problem? Weist du nicht wie du genau darauf regagieren kannst wenn sich der Status Edit vom DBGrid ändert oder weißt du nicht wie man das aktuelle Datum in die Spalte einer DB-Tabelle einfügt?

Gruß
Tino


The_Tremendous - Do 30.12.04 14:48

Also in dem moment, indem die Form mit dem Grid geöffnet wird setzte ich das grid in den edit modus. Dann kann der Nutzer nen neuen Datensatz in die Tabelle Speichern, in dem er, wenn er die Daten in die Felder Des Grids eingegeben hat auf den Butten Speichern klickt. Das funktioniert auch.

Ich möchte aber nun, das der Nutzer das Datum im Grid nicht eingeben kann (also die Eingabe für das Feld gesperrt ist) und das das Datum da schon Drinne steht.


Gruß
The_Tremendous


grayfox - Do 30.12.04 16:07

hallo tremendous!

Zitat:
setzte ich das grid in den edit modus

ist es nicht eher so, dass du das dataset in den edit-modus setzt, welches dem dbgrid dahinterliegt? daher brauchst du lediglich zum eintragen es datums das betreffende feld im dataset zu befüllen

zb:

Delphi-Quelltext
1:
DeinDataSet.FieldByName('Datum').asTDateTime:= Date                    


und somit wird das aktuelle tagesdatum im dbgrid angezeigt

mfg, stefan


jasocul - Do 30.12.04 18:56

Und das passende Ereignis ist OnStateChange der TDataSource.
Dort kannst du dann sogar prüfen, ob eine Datensatz erfasst oder geändert wird.


The_Tremendous - Do 30.12.04 20:04

Hi.

Das mit dem Datum einfügen Klappt soweit. Ich wollte nun noch die Sache so gestalten, das der Nutzer auch nichts in das Feld Datum eintragen kann.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Table1.Active := True;
  DBGrid1.DataSource.DataSet.Edit;

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Table1.Active := False;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin

  DBGrid1.DataSource.DataSet.Delete;
end;


procedure TForm1.BitBtn1Click(Sender: TObject);
begin
   DBGrid1.DataSource.DataSet.Insert;
end;

procedure TForm1.Table1NewRecord(DataSet: TDataSet);
begin
  DataSet.FieldByName('Datum').AsDatetime := Now;
  DataSet.FieldByName('Datum').ReadOnly := true;
end;

end.


Nun bekomme ich immer beim Speichern die Fehlermeldung:

Im Projekt Project1.exe ist eine Exception der Klasse EDatabaseError aufgetreten.
Meldung: 'Feld 'Datum' kann nicht verändert werden'.


Was stimmt da nicht?? und Was könnte ich noch ändern oder so um Fehler abzufangen??

The_Tremendous


grayfox - Do 30.12.04 20:16

was spricht eigentlich dagegen, DBGrid1.DataSource.DataSet durch table1 zu ersetzen? oder machst du gerne solche verrenkungen?

die fehlermeldung könnte daher stammen, dass du ReadOnly auf true setzt.

mfg, stefan


The_Tremendous - Do 30.12.04 20:22

Das mit Table1 schreiben ist akzeptiert :lol:

Ich habe das read only doch extra reingesetzt, damit der user das Datum welches ich automatisch erzeuge net ändern kann. Deshalb ja meine Frage, wie ich den Fehler verhindern kann.


grayfox - Do 30.12.04 21:22

dann setz das datumsfeld im spalteneditor des dbgrid auf 'read-only', das sollte helfen.
btw: macht es überhaupt sinn, ein feld im dbgrid anzuzeigen, auf dessen inhalt der user keinen zugriff haben soll?

mfg, stefan