Wpis z mikrobloga

Zaraz coś ciężkiego mnie trafi. Potwierdza się, że językiem najlepiej znanym wszystkim programistom są przekleństwa.

Piszę sobie programik korzystający z sql lite. C++ i qt. Otwieram bazę no i wypada sprawdzić, czy się dobrze otworzyła. Więc standardowe
if(db.open()) no i dupa, za każdym razem dobrze, nawet jak źle ścieżka wpisana. Kombinuje jak koń pod górę co nie tak, włącznie ze strace. Doszedłem w końcu!!!!! @#$%^ Biblioteka radośnie tworzy sobie pusty plik bazy, zupełnie pusty jeśli nie ma pliku o takiej nazwie. Utworzenie się udaje, więc radośnie zwraca zero błędów. W dokumentacji ani słowa o tym, i nie ma też opcji don't create. Za każdym razem po prostu tworzy pusty plik i jeszcze radośniej obwieszcza, że wszysko ok, bo otworzył plik bazy danych. Można otworzyć z sukcesem nawet binarkę i będzie twierdził, że otworzył bazę. Funkcja isValid też olewa co jest w pliku. Jest plik to za każdym #$%^& razem twierdzi, że valid. Obsługę sqllite dodali chyba na kolanie. Dopiero można zweryfikować, że coś nie tak przy query. Żeby było ciekawiej przy inicjalizacji QSqlQuery query; jeśli zainicjalizuje zmienną przed ustawieniami zmiennej bazodanowej to wali komunikat database not open. Niezależnie czy jest otwarty i prawidłowy plik czy nie. W innym przypadku nic nie wywala. Obsługa sqllite w qt to jakaś pomyłka.

#komputery #c++ #programowanie #informatyka #qt
  • 11
  • Odpowiedz
@Rasteris: no właśnie bardzo widać jak wygodniej xD

W ogóle Qt to jest jeden wielki NIH syndrome. C++ ma przecież swój własny std::string. Po co wynajdować koło na nowo, w dodatku kwadratowe?
  • Odpowiedz
@Rasteris: No nie byłbym taki pewien czy tak bardzo udała. QString ma ten sam problem co Java String - nie jest w stanie przechować dowolnego znaku unicode, bo reprezentacja znaku jest ograniczona tylko do 16 bitów, a unicode wymaga 24 bitów.
  • Odpowiedz
  • 0
@lionbest: dostałem już poradę żeby korzystać QMimeType. A db.open w qt robi śmieszną rzecz, otwiera pusty plik, bez niczego, dopiero jak zrobisz create table to dodaje wszystko inne. Problemu by nie było, gdyby open można było użyć z opcją don't create new file.
  • Odpowiedz
  • 0
@lionbest: i najśmieszniejsze, wszelkie example w sieci mają: if(!db.open()), żeby to się wywaliło to tylko jak nie masz praw do odczytu pliku albo nie istnieje katalog. W innych przypadkach zawsze udanie.
  • Odpowiedz
  • 0
@lionbest: QmimeType sprawdza ciąg SQLite w pliku, Można i na upartego zrobić osobną tabelę z jednym rekodem gdzie jest wersja bazy i sprawdzać czy zgadza się zakres obsługiwanych wersji. Tylko z tego wychodzi kilka warunków. W sumie, żeby było porządnie trzeba sprawdzić czy plik istnieje, jakie ma prawa ro czy rw, czy jest plikiem bazydanych. Użytkownikowi trzeba dać konkretny komunikat, a nie database open file error. Ale to powinno być obsługiwane
  • Odpowiedz
  • 0
@lionbest: aha, komunikaty błędów sqllite też są takie średnie. Niezależnie czy nie otwarta baza, plik bez bazy czy np brak tabeli to komunikat z query jest "no query" i trzeba zgadywać o co chodzi.
  • Odpowiedz