Zapis godziny poprzez ParamByName do bazy FireBird

0

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 :(

0

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.

0

... 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 ???

0

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.

0

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 <<--
0

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?

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