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
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
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.
co ma 13500 do 16:45 bo kompletnie tego nie rozumiem? Podaj konkretny wyliczony wynik i to czego oczekujesz.
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.
w załaczniku przedstawiam to o co mi chodzi
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.
time : TTimeSpan; wyskakuje błąd czegos zapewne brakuje w uses
teraz pokazuje ze brakuje timeSpan.dcu
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ń.
to poprosze o link skad mogę pobrać delphi o którym mówisz i z góry dziekuję za pomoc
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.
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
dziękuję za pomoc wszystko działa :)