Datum

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
BlueWollThingy
Beiträge: 5
Registriert: Fr 5. Feb 2016, 11:17
OS, Lazarus, FPC: Win(8.1,10) Laz 1.4.4
CPU-Target: 32/64Bit
Wohnort: Dresden

Datum

Beitrag von BlueWollThingy »

Hallo!
Achtung Noob! :oops: :roll:
Ich will einen Schichtplan programmieren und habe das Problem, dass ich die Zeiten in ein Editfeld eintragen will. Ich habe für dein eigentlichen Plan ein Grid in dem zwei Wochen angezeigt werden sollen. Diese Wochen will ich möglichst dynamisch gestalten, so das sie sich an die Datenbank anpassen. Daher wollte ich in die Editfelder ( 2) Woche.. geht vom ... bis ... eintragen um das nicht ins Grid zu bringen.

Ich hab mich hiermit mal versucht:

Code: Alles auswählen

edStartdatum.text:='03.04.2016';
 edWoche1.Text:=edStartdatum.Text+' bis '+strtodate(datetoint(edstartdatum.Text))+6


Der Kompiler sagt es gibt kein datetoint, hat jemand eine Idee, wie ich das hinbekomme?

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Datum

Beitrag von mschnell »

In FPC ist ein Datum kein int, sondern ein TDateTime (was eingentlich ein Floatinpoint ist).

Die Umwandelfunktionen dafür findest du in der Doku.

Für einen Tag eine 1 zu addieren ist trotzdem richtig :D

-Michael

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: Datum

Beitrag von wp_xyz »

Außerdem gibt es auf der Komponenten-Seite "Misc" das Control TDateEdit, sowie auf "Common controls" TDateTimePicker (für letzteres musst du das Package DateTimeControls installieren). Bei beiden kannst du das Datum aus einem Kalender-Popup auswählen und im Programm über die Eigenschaft "Date" schon als TDateTime auslesen.

Die Umwandlung eines Strings in einen TDateTime-Wert machst du z.B. mit StrToDate().

BlueWollThingy
Beiträge: 5
Registriert: Fr 5. Feb 2016, 11:17
OS, Lazarus, FPC: Win(8.1,10) Laz 1.4.4
CPU-Target: 32/64Bit
Wohnort: Dresden

Re: Datum

Beitrag von BlueWollThingy »

Vielen Dank euch beiden! Das hilft mir sehr. :D

SoE
Beiträge: 84
Registriert: Mo 31. Aug 2015, 01:51

Re: Datum

Beitrag von SoE »

Probier' doch mal folgendes:
Eingabe: DateTo und anschließend STRG+SPACE...

BlueWollThingy
Beiträge: 5
Registriert: Fr 5. Feb 2016, 11:17
OS, Lazarus, FPC: Win(8.1,10) Laz 1.4.4
CPU-Target: 32/64Bit
Wohnort: Dresden

Re: Datum

Beitrag von BlueWollThingy »

Ich hätte da nun ein weiteres Problem.
Das eintragen des Datums klappt soweit und mein Grid ist nun auch damit verbunden. Allerdings soll die Schicht für eine ganze Woche angezeigt werden, steht aber nur im Montag. Anfang und Ende der Woche (Mo bis Fr) sind in der Datenbank vorhanden, allerdings schaffe ich es nicht die Tage bis Freitag ausfüllen zu lassen, da schmiert das Programm immer ab.
Ich leg euch mal meinen Quelltext hier rein, vielleicht sieht jemand meinen Fehler und eine Lösung.

Code: Alles auswählen

procedure TfmSchicht.FormActivate(Sender: TObject);
var query:ansistring;  x,y:integer;
begin
 
//Kopfzeile eintragen
sg.Cells[1,0]:='Mo'; sg.Cells[2,0]:='Di'; sg.Cells[3,0]:='Mi';
 sg.Cells[4,0]:='Do'; sg.Cells[5,0]:='Fr'; sg.Cells[6,0]:='Sa'; sg.Cells[7,0]:='So';
 sg.Cells[8,0]:='Mo'; sg.Cells[9,0]:='Di'; sg.Cells[10,0]:='Mi';
 sg.Cells[11,0]:='Do'; sg.Cells[12,0]:='Fr'; sg.Cells[13,0]:='Sa'; sg.Cells[14,0]:='So';
 
 //Schichtdaten und Mitarbeiternamen in ein Query speichern
dm.qPlan.Close;
dm.qPlan.SQL.Clear;
query:='select Mitarbeiter.MName, Abk from Schicht ';
query:=query+'inner join SPlan on SPlan.StID=Schicht.StID ';
query:=query+'inner join Mitarbeiter on Mitarbeiter.MNr=SPlan.MNr ';
query:=query+'where Anfang='+#39+dedStartD.Text+#39;
dm.qPlan.SQL.Add(query);  dm.qPlan.Open;
 //aus dem Query in das Grid
y:=1;
dm.qPlan.First;
sg.RowCount:=sg.RowCount+1;
while not dm.qPlan.EOF do
begin
 for x:=0 to dm.qPlan.FieldCount-1 do
  sg.Cells[x,y]:=dm.qPlan.Fields[x].AsString;
 sg.RowCount:=sg.RowCount+1;
 dm.qPlan.Next;
 inc(y)
end;
dm.qPlan.ApplyUpdates;
 update;
end;       

Antworten