Wyjątek przez zapytanie z datą - o co chodzi?

0

Czysty Delphi 5 ( tak musi być )
Baza Oracle 12c

Kładę na New Application: TADOConnection, TADOQuery, TDataSource, TDBGrid.
Łączę tę czwórkę komponentów w "łańcuszek" i po wpisaniu w TADOQuery SQLki:

select id, data_od from tabela

i przełączeniu TQuery na Ative=True w DBgrid'zie widzę zawartość z bazy danych.
Zmieniam SQL na

select id, to_date ( data_od, 'dd-mm-yyyy' ) data_od from tabela

i przy przełączaniu TQuery na True dostaję:

Project1.exe raised exception class EOLEException with message: Wielokrokowa operacja wygenerowała błędy. Sprawdź wszystkie wartości stanu

Google tego komunikatu praktycznie nie zna. Po przetłumaczeniu na angielski wyników jest trochę, ale albo nic mi nie pasuje, albo po prostu ni w ząb nie rozumiem co do mnie gadają :)
O co może chodzić?

0

jakiego typu jest pole data_od, co się w nim znajduje i dlaczego chcesz go konwertować przy użyciu to_date? Obstawiam, że ten SQL nie wykona się po prostu i to generuje błąd.

0

Przedmówca ma rację prawdopodobnie zapytanie zwraca błąd. Spróbuj odpalić sqlplus i sprawdzić jaki numer błędu zwraca Ci oracle. Pewnie będzie to błąd konwersji do daty ale trzeba się upewnić.
Druga rzecz nie używaj ADO są lepsze narzędzia jak choćby darmowy ZeosLib.

0

Sprawdzałem oczywiście to zapytanie w Toad i się wykonywało ( choć nie zauważyłem, że w tej dacie którą zwracał, był błąd na poziomie jednej cyfry roku, to swoją drogą jakiś poważny błąd Toad'a, skoro nieprawidłowe zapytanie z punktu widzenia Oracle'a potrafi niby wykonać ... )
Niemniej w końcu sprawdziłem zapytanie w SQL Developer i faktycznie, krzyczał błędem. Poprawiłem je najpierw konwertując na to_char a potem na to_date i poszło dalej, tzn wyświetla się zawartość zapytania prawidłowo w Gridzie, ale kurcze przy aktualizacji wiersza dalej ten sam komunikat.
Co do ZeosLib to sobie poczytam i może ( jak będzie czas ) potestuję skoro darmowy, ale w sumie to cudów nie potrzebuję i ADO raczej spełni moje potrzeby w zupełności.

0

@jury68000: jeśli dobrze rozumiem masz grida w trybie edycyjnym i zmieniasz dane z grida oraz np przy wykorzystaniu dbnavigatora robisz zmianę na bazie.
Jeśli tak to są dwie opcje dlaczego nie działa

  1. Masz jakieś ograniczenie na po stronie bazy, które uniemożliwia zmianę rekordu (np jaki check - w co wątpię)
  2. ADO sobie nie radzi z konwersją gdybyś zrobił select data_od from tabela to zwykły post by zadziałał natomiast przy konwersji na char i na date prawdopodobnie ado próbuje wstawić nieprawidłowy typ danych do danej kolumny przez co znowu zwraca Ci wyjątek.

Dlatego poleciłem Ci zeosy bo tam do komponentu TZQuery (zamiast twojego TADOQuery) możesz sobie podpiąć dodatkowy komponent o nazwie TZUpdateSQL gdzie możesz sobie zdefiniować całe zapytanie, które ma się odpalać na zmianie rekordu/dodaniu rekordu/usunięciu rekordu

Jest to trochę wygodniejsze bo na ADO również się da ale musisz pokombinować ze zdarzeniami. Jeśli czegoś nie zrozumiałeś z mojej wypowiedzi to pisz.

0

Dzięki, jak najbardziej zrozumiałem i przyznam, że faktycznie, własny update SQL to dość przydatna sprawa, ale jednak Zeos odpada gdyż nie tylko ja 'opiekuję' się aplikacją i dodatkowe komponenty były by kłopotem niestety. Przysiadam do tego ADO znów.

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