Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Problem mit Uhrzeit in Access und einer SQL-Querey... (https://www.delphipraxis.net/37981-problem-mit-uhrzeit-access-und-einer-sql-querey.html)

Killerloop 13. Jan 2005 10:04


Problem mit Uhrzeit in Access und einer SQL-Querey...
 
Das Problem:

Eine MDB mit einem Feld "ZEIT" in der eine Zeit im kurzformat z.B. "00:30" für 30 Minuten steht.

Wenn ich in einer ADO-Query jetzt das feld selectiere gibt er mit logischerweise immer

"30.12.1899 00:30:00" zurück. Ich brauche aber nur die Zeit. Was muss ich in die Query schreiben damit er mir

tatsächlich nur "00:30" zurückgibt ? Ich habs schon mit

select Datepart('h',zeit)

probiert, aber der gibt mir nur EINEN teil eines datum wieder, stunden ODER Minuten.

Hat jemand ne Idee ?

Gollum 13. Jan 2005 10:53

Re: Problem mit Uhrzeit in Access und einer SQL-Querey...
 
Hallo,

wie wäre es damit?
SQL-Code:
SELECT Datepart('h', zeit) & ":" & Datepart('n', zeit) AS MeineZeit, ...

shmia 13. Jan 2005 11:03

Re: Problem mit Uhrzeit in Access und einer SQL-Querey...
 
Zitat:

Zitat von Killerloop
Eine MDB mit einem Feld "ZEIT" in der eine Zeit im kurzformat z.B. "00:30" für 30 Minuten steht.
Wenn ich in einer ADO-Query jetzt das feld selectiere gibt er mit logischerweise immer
"30.12.1899 00:30:00" zurück. Ich brauche aber nur die Zeit. Was muss ich in die Query schreiben damit er mir
tatsächlich nur "00:30" zurückgibt ?

Nicht die Query muss geändert werden, sondern die Darstellung in deiner Anwendung!
Du musst das DisplayFormat des Felder auf 'hh:nn' ändern:
Delphi-Quellcode:
procedure ....AfterOpen(Dataset:TDataset);
begin
   (Dataset.FieldByName('Uhrzeit') As TDateTimeField).DisplayFormat := 'hh:nn';
end;

Killerloop 13. Jan 2005 11:51

Re: Problem mit Uhrzeit in Access und einer SQL-Querey...
 
Danke euch, das funkioniert soweit wunderbar.

Eine Frage hätte ich da noch: Ich habe also das ADODataset, eine Datasource und ein DBDgrid.

Wenn ich jetzt im DBdgrid einen einen neuen Datensatz erzeuge, gibt es einen Möglichkeit das er diesen "automatisch" mit dem aktuellen datum versieht damit man in der tabelle später sieht wann genau der datensatz angelegt wurde ?

Analog dazu müsste bei jedem neuen datensatz die nummer des aktuell angeldeten benutzers mit rein die in einer globalen variable steht. Damit man auch noch sehen kann WER den datensatz angelegt hat.

Ist sowas machbar ?

Danke schonmal.

shmia 13. Jan 2005 12:18

Re: Problem mit Uhrzeit in Access und einer SQL-Querey...
 
Zitat:

Zitat von Killerloop
Wenn ich jetzt im DBdgrid einen einen neuen Datensatz erzeuge, gibt es einen Möglichkeit das er diesen "automatisch" mit dem aktuellen datum versieht damit man in der tabelle später sieht wann genau der datensatz angelegt wurde ?

Analog dazu müsste bei jedem neuen datensatz die nummer des aktuell angeldeten benutzers mit rein die in einer globalen variable steht. Damit man auch noch sehen kann WER den datensatz angelegt hat.

Die Daten werden im Event AfterInsert gesetzt:
Delphi-Quellcode:
procedure .....AfterInsert(Dataset: TDataset);
begin
   Dataset['CreateDateTime'] := SysUtils.Now;

   Dataset['CreatedBy'] := globaluserName;
end;
Wenn du den Zeitpunkt der letzten Änderung setzen möchtest:
Delphi-Quellcode:
procedure .....BeforePost(Dataset: TDataset);
begin
   Dataset['LastChange'] := SysUtils.Now;
end;

Killerloop 13. Jan 2005 12:22

Re: Problem mit Uhrzeit in Access und einer SQL-Querey...
 
Danke schön .ci habs ziwschenzeitlich andres gemacht, funktioniert komischerweise trotzdem:

Im ADODatase bei OnNewRecord einfach


Dataset.FieldByName('sz_datum').AsDateTime:=Now;
Dataset.FieldByName('sz_Pid').AsInteger:=Benutzer. NutzerKennZahl;

Hat Diese mthode einen nachteil gegenüber der von dir beschriebenen ?

shmia 13. Jan 2005 12:54

Re: Problem mit Uhrzeit in Access und einer SQL-Querey...
 
Zitat:

Zitat von Killerloop
Danke schön .ci habs ziwschenzeitlich andres gemacht, funktioniert komischerweise trotzdem:

Im ADODatase bei OnNewRecord einfach

Dataset.FieldByName('sz_datum').AsDateTime:=Now;
Dataset.FieldByName('sz_Pid').AsInteger:=Benutzer. NutzerKennZahl;

Hat Diese mthode einen nachteil gegenüber der von dir beschriebenen ?

OnNewRecord zeitlich wird vor AfterInsert aufgerufen.
Im Sourcode sieht das so aus:
Delphi-Quellcode:
procedure TDataSet.EndInsertAppend;
begin
  SetState(dsInsert);
  try
    DoOnNewRecord;  // <------
  except
    UpdateCursorPos;
    FreeFieldBuffers;
    SetState(dsBrowse);
    Resync([]);
    raise;
  end;
  FModified := False;
  DataEvent(deDataSetChange, 0);
  DoAfterInsert;  // <------
  DoAfterScroll;
end;
In OnNewRecord kann man durch Erzeugen einer Exception den Einfügevorgang noch abbrechen,
in AfterInsert ist dies nicht möglich.
Ansonsten kann man beide Events als gleichwertig betrachten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:17 Uhr.

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