Sumowanie czasów z zadanej kolumny i wyświetlenie wyniku w Edit

0

Zwracam się z prośbą (choć wiem, że to było-ae nie mogę nigdzie znaleźć) o pomoc w napisaniu procedury, która sumuje wiersze kolumny czas_praca tabela w postgres (typ danych time without time zone) i wynik przedstawi w edit'cie jako konkretna sume czasów (tj 12300 itp). z góry dziekuje za zainteresowanie i pomoc

0

Dałeś trochę za mało konkretów.

Czy chcesz to obliczenie wykonać na poziomie SQL? W takim razie to, że działasz w Delphi, nie ma nic do gadania, wątek powinien być w "bazach danych" bo de facto dotyczy sposobu stworzenia zapytania SQL, który jest uniwersalny i nie ma związku z językiem/środowiskiem, które wykorzystujesz do podłączenia się do bazy (czyli SELECT * FROM.... wygląda zawsze tak samo).

Czy może chcesz sobie wszystkie wartości wczytać, a potem je sumować z poziomu aplikacji?

Nie dałeś żadnych konkretów - ani z jakich komponentów/w jaki sposób chcesz się łączyć z SQL, ani też jak wygląda sama tabela.

Jeśli chcesz, żeby ktoś Ci pomógł to przyłóż się trochę bardziej do tematu, porządnie zadaj pytanie oraz daj nam materiały, w oparciu o które mamy działać. Póki co to mamy praktycznie zero konkretów i (być może) wątek w błędnej kategorii :P

0

Sumowanie wierszy kolumny mam zrealizowane, tylko wynik przedstawiony w edit'ie zamiiast pokazywać wynik np 13500 pokazuje mi 16:45 i tego niestety nie potrafie przekształcić w oczekiwany wynik.

0

co ma 13500 do 16:45 bo kompletnie tego nie rozumiem? Podaj konkretny wyliczony wynik i to czego oczekujesz.

0

Przy sumowaniu dat dostajesz UNIX timestamp. Musisz to przerzucić na sekundy a później formatujesz według uznania. Może to wyglądać np. tak:

var
    sqlSumTime : tdatetime;
    seconds : int64;
    
begin
    sqlSumTime := strtodatetime('6-1-1970 15:55:00');  //<- to co dostajesz z sumowania, wyświetlasz tylko time dlatego masz 16:45 
//BTW coś masz za przeproszeniem zwalone skoro z 135:55:00 wychodzi godzina 16:45
    seconds := Round((sqlSumTime - 25569) * 86400);
    Edit1.caption := format('%d:%d:%d',[seconds div 3600, (seconds mod 3600) div 60, (seconds mod 86400) mod 60]);  
end.
0

w załaczniku przedstawiam to o co mi chodzi

0

zamienić czas na liczbę sekund możesz także w ten sposób:

procedure TForm1.Button1Click(Sender: TObject);
var
  time: TTimeSpan;
begin
  time := TTimeSpan.Parse('16:45:10');
  ShowMessage(Format('%f', [time.TotalSeconds]));
end;

oczywiście operujesz na danych typu datetime więc nie może być do parsowania przekazane więcej niż 24 godziny (no ale nie da się pracować w ciągu doby dłużej niż 24 godziny). Jak już masz sekundy to spokojnie możesz to przeformatować. Zresztą przykład masz powyżej.

0

time : TTimeSpan; wyskakuje błąd czegos zapewne brakuje w uses

teraz pokazuje ze brakuje timeSpan.dcu

0

teraz zauważyłem że wpisałeś w tagach delphi 7. Zapewne to powoduje problem - ciężko mi to jednak sprawdzić. Mam jednak nadzieję że nie używasz delphi 7? Masz za darmo najnowsze delphi i to nawet do komercyjnych zastosowań (do określonej sumy) w którym masz FireDac obsługujące bez problemu bazy postgres, masz niezły FastReport no i setki jak nie tysiące usprawnień.
Naprawdę polecam przesiadkę i piszę to jako jeszcze nie dawno zatwardziały zwolennik starych rozwiązań.

0

to poprosze o link skad mogę pobrać delphi o którym mówisz i z góry dziekuję za pomoc

0

Chciałbym zauważyć że w moim rozwiązaniu ze względu właśnie na starą wersje Delphi nie ma niczego co by nie zadziałało (trzeba dodać dateutils do uses).
A nowe Delphi wpisz Community Edition Delphi i pobierz że strony embarcadero.

0

dokładnie, rozwiązanie @Clarc załatwia wszystko a poza tym jak już potrzebny ci konkretny link to proszę: https://www.embarcadero.com/products/delphi/starter/free-download oczywiście musisz się zarejestrować ale to nie jest duża cena za takie rozwiązanie. Poza tym będziesz miał legalne, zarejestrowane na siebie oprogramowanie

0

dziękuję za pomoc wszystko działa :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1