Witam.
Mam w bazie FireBird pole z danymi typu Time.
Chcę zapisać tam godzinę poprzez ParmByName komponentu IBQuery z palety IB.
...
ParamByName('godzina').AsTime:=StrToTime(5':'+15+':00.0000');
Niestety tu wywala błąd konwersji :(
Witam.
Mam w bazie FireBird pole z danymi typu Time.
Chcę zapisać tam godzinę poprzez ParmByName komponentu IBQuery z palety IB.
...
ParamByName('godzina').AsTime:=StrToTime(5':'+15+':00.0000');
Niestety tu wywala błąd konwersji :(
Dziwisz się, że wyrzuca błąd? To się nawet skompilować nie powinno, bo funkcja StrToTime przyjmuje jako argument głównie String (przeładowana wersja oferuje także możliwość podania struktury typu TFormatSettings), a Ty podajesz:
StrToTime(5':'+15+':00.0000');
czyli i liczby i łańcuchy, które razem nie zbudują jednego spójnego ciągu; Musisz skorzystać z funkcji, która skonwertuje liczbę na ciąg znaków, który możesz połączyć z innymi łańcuchami przez operator +
i przekazać jako parametr; Funkcją tą jest np. IntToStr i należy ją wywołać np. tak:
StrToTime(IntToStr(5) + ':' + IntToStr(15) + ':00.0000');
lub skorzystać z ułatwiającej to zadanie fukncji Format:
StrToTime(Format('%d:%d:00.0000', [5, 15]));
Poczytaj coś na temat tych funkcji i przede wszystkim czytaj komunikaty błędów kompilacji, bo w nich jest napisane co jest źle w kodzie.
Przypominam także o sensownym tytułowaniu wątków, tak aby ten nieszczęsny tytuł opisywał Twój problem.
... no chyba nie o to chodzi jak konwertuję do typu string i do typu Time.
Chodzi tu o format tej danej potrzebnej do zapisu w polu bazy tu jest istota ......... więc może ktoś wie ???
Chodzi tu o format tej danej potrzebnej do zapisu w polu bazy tu jest istota
A to:
StrToTime(5':'+15+':00.0000');
to już nie jest istotne..? Tu masz błąd składni więc musisz to poprawić, bo program w ogóle się nie skompiluje, już nie mówiąc o jakimkolwiek dopasowaniu typów...
Jak już potrzebujesz skleić czas ze składowych to skorzystaj z funkcji EncodeTime podając jako liczby ilość godzin, minut i sekund, bez kombinowania w konwersje; A jeśli nie o to chodzi to zadaj sensowne pytanie; A jak nie dowierzasz moim słowom to podaj treść błędu i linijkę w której występuje.
To....
StrToTime(5':'+15+':00.0000');
w kodzie jest dobrze z cudzysłowem z przodu, błąd powstał przy przepisywaniu na forum dlatego piszę, że sposób zapisu nie jest tu istotny.
Błąd który wywala to błędne zapytanie SQL a konkretnie błąd konwersji:
SQL error code -303 conversion error string "00:00:00.0000".
Czyli jak dla mnie niewłaściwa wartość dla parametru
ParamByName('godzina').AsTime <<--
No i co rozumiesz z tego błędu:
SQL error code -303 conversion error string "00:00:00.0000".
Tłumaczy on, że wystąpił błąd konwersji; Poza tym coś za dużo tych zer po kropce; Ustaw najpierw w rekordzie TFormatSettings pole ShortDateFormat
na hh:nn:ss.zzz
i spróbuj przekonwertować łańcuch;
Ponadto próba kompilacji takiej instrukcji:
StrToTime(5':'+15':00.0000');
zakończy się błędęm kompilacji:
Fatal: Syntax error, ")" expected but "const char" found
z ustawiownym kursorem zaraz po pierwszej cyfrze 5
; Pod Delphi może być nieco inny komunikat, ale nadal jest to błąd składniowy, więc jeśli nie dostajesz takiego komunikatu to znaczy, że coś jest nie tak z Twoim środowiskiem;
Błąd który wywala to błędne zapytanie SQL a konkretnie błąd konwersji:
Skoro taki pewny jesteś, że konwersja się powiodła, to dlaczego w komunikacie błędu jest łańcuch z samymi zerami?