Błąd „SQLite error: CANTOPEN (14)” po aktualizacji programu
Opublikowano
Jak wygląda problem
Po zainstalowaniu nowej wersji programu, przy pierwszym uruchomieniu, program automatycznie aktualizuje bazę danych. Jeżeli ten krok nie może się wykonać, program traci połączenie z bazą, a operacja aktualizacji kończy się komunikatem:
SQLite error: CANTOPEN (14)
W praktyce oznacza to jedno: program nie był w stanie otworzyć lub utworzyć pliku bazy SQLite w miejscu, do którego próbował go zapisać. Najczęściej widać go właśnie na etapie aktualizacji bazy, ale ten sam błąd może pojawić się także przy zwykłym uruchomieniu programu — z tych samych powodów opisanych niżej (uprawnienia, antywirus, niedostępna lokalizacja).
Warto od razu uspokoić — Twoje dane nie są w tym momencie tracone. Zanim program zmieni bazę, próbuje najpierw założyć jej kopię zapasową — a sama kopia to również plik bazy SQLite. I to właśnie na tym etapie najczęściej pojawia się błąd: program próbuje zapisać kopię w katalogu wskazanym w opcjach jako miejsce kopii (domyślnie podkatalog kopie w katalogu roboczym, C:\Users\Public\Documents\TaxMachine\kopie), a jeśli w tym katalogu nie ma prawa zapisu — kopia nie powstaje i operacja zgłasza CANTOPEN (14).
Co ważne — dostęp do samej bazy jest w porządku; program bez przeszkód ją otwiera, a problem dotyczy wyłącznie zapisu kopii. Nowa wersja programu musi jednak przed pierwszym użyciem bazy zmienić jej strukturę (migracja), a tej zmiany nie wykonuje bez wcześniejszej kopii bezpieczeństwa — nieudana kopia przerywa migrację, a bez zakończonej migracji nowy program nie potrafi otworzyć bazy. Właśnie stąd objaw „brak połączenia z bazą” po aktualizacji, mimo że dane są całe i normalnie dostępne.
Dobra wiadomość: skoro operacja zatrzymuje się już na etapie kopii, dotychczasowa baza pozostaje nienaruszona — nic z niej nie ginie. Wystarczy usunąć przyczynę braku dostępu (najczęściej: wskazać miejsce kopii w katalogu z prawem zapisu — patrz niżej) i ponowić aktualizację.
Najczęstsza przyczyna: brak uprawnień
Zdecydowanie najczęstszym powodem tego błędu jest brak uprawnień do zapisu w miejscu, w którym program trzyma bazę i zakłada jej kopię. Program w trakcie aktualizacji musi:
- utworzyć kopię zapasową bazy (a wraz z nią, jeśli trzeba, sam podkatalog kopie),
- zapisać zmiany w pliku głównej bazy.
Jeżeli konto użytkownika Windows nie ma prawa zapisu w katalogu roboczym programu, żadna z tych czynności się nie powiedzie i pojawia się CANTOPEN (14). Typowe sytuacje:
- kopia zapasowa (albo sama baza) jest ustawiona w katalogu chronionym przez Windows — bezpośrednio w głównym katalogu dysku systemowego
C:\, wC:\Program FileslubC:\Program Files (x86)— gdzie zwykły użytkownik nie ma prawa zapisu bez uprawnień administratora; to jedna z najczęstszych przyczyn tego błędu (i najczęstszy powód, dla którego pomaga test „uruchom jako administrator” z kroku niżej), - baza lub katalog roboczy zostały przeniesione do lokalizacji, do której dane konto nie ma dostępu,
- w katalogu roboczym nie da się utworzyć podkatalogu kopie albo brakuje w nim prawa zapisu (samo ustawienie pliku bazy jako „tylko do odczytu” daje zwykle inny kod błędu, ale efekt dla użytkownika jest podobny),
- baza leży na dysku sieciowym lub nośniku USB, który w danym momencie jest odłączony albo tylko do odczytu,
- baza leży w folderze synchronizowanym do chmury (OneDrive, Dropbox, Google Drive), który chwilowo blokuje lub przenosi plik w trakcie synchronizacji,
- na dysku brakuje wolnego miejsca na zapis kopii.
Szczególnie często chodzi o katalog instalacyjny programu (domyślnie pod C:\Program Files). Część użytkowników celowo ustawia tam zapis kopii, a nawet przenosi do niego bazę SQLite, chcąc mieć „przenośną”, samowystarczalną wersję programu trzymaną w jednym folderze. W domyślnej lokalizacji instalacji to się nie uda — C:\Program Files jest katalogiem chronionym i program uruchomiony bez uprawnień administratora nie zapisze tam ani kopii, ani zmian w bazie, co kończy się właśnie błędem CANTOPEN (14). Jeśli zależy Ci na takim układzie „wszystko w jednym miejscu”, program wraz z bazą i kopiami trzeba trzymać w folderze, w którym masz prawo zapisu — np. na osobnym dysku (D:\TaxMachine) albo w katalogu w profilu użytkownika — a nie w C:\Program Files.
Możliwy udział programu antywirusowego
Drugą częstą przyczyną jest program antywirusowy, który blokuje lub przenosi do kwarantanny plik bazy w chwili, gdy program próbuje go otworzyć albo skopiować. Efekt jest taki sam — program nie może otworzyć pliku i zgłasza CANTOPEN (14). Bywa też, że antywirus nie kasuje pliku, tylko na krótko go blokuje, przez co aktualizacja raz się udaje, a raz kończy błędem. Warto pamiętać, że baza SQLite to nie jeden plik — obok głównego pliku pojawiają się też pliki pomocnicze (o nazwach kończących się na -wal i -shm); jeśli antywirus zablokuje któryś z nich, skutek jest ten sam. Dlatego do wyjątków dodaje się cały katalog roboczy, a nie pojedynczy plik.
Jak sprawdzić i naprawić
Krok 1 — upewnij się, że program nie jest już uruchomiony. Najprostszą przyczyną bywa druga, działająca w tle kopia programu (albo zawieszony proces), która wciąż trzyma plik bazy otwarty. Zamknij program, a jeśli to nie pomaga — otwórz Menedżer zadań (Ctrl+Shift+Esc), znajdź proces TaxMachine, zakończ go i spróbuj ponownie.
Krok 2 — test „uruchom jako administrator”. Zamknij program, kliknij jego ikonę prawym przyciskiem myszy i wybierz Uruchom jako administrator. Jeżeli po tym aktualizacja bazy przejdzie bez błędu, to potwierdza, że przyczyną był brak uprawnień.
Traktuj to wyłącznie jako test diagnostyczny. Uruchamianie programu na stałe „jako administrator” nie jest właściwym rozwiązaniem — należy zamiast tego skorygować uprawnienia albo trzymać bazę w dostępnym katalogu roboczym programu, domyślnie C:\Users\Public\Documents\TaxMachine, do którego użytkownik ma prawo zapisu. Jak to zrobić, opisano tutaj: Problemy wynikające z braku uprawnień.
Krok 3 — sprawdź program antywirusowy. Jeżeli test z uprawnieniami nie pomógł, na próbę wyłącz na chwilę ochronę antywirusa i ponów uruchomienie programu. Jeżeli błąd zniknie, dodaj cały katalog roboczy programu (C:\Users\Public\Documents\TaxMachine wraz z podkatalogiem kopie) do wyjątków antywirusa i sprawdź, czy plik bazy nie trafił do kwarantanny. Szczegóły: Problemy powodowane przez antywirusy.
Krok 4 — sprawdź lokalizację i dostępność bazy. Upewnij się, że dysk, na którym leży baza, jest podłączony i ma wolne miejsce, a plik bazy oraz podkatalog kopie nie są ustawione jako „tylko do odczytu”. Sprawdź też, gdzie program zapisuje kopie baz danych. Ustawienie znajdziesz na wstążce Konfiguracja → przycisk Opcje → zakładka Kopie baz danych. Zobacz, jaki katalog jest tam wskazany: jeśli to lokalizacja chroniona przez Windows (C:\Program Files\…, C:\Program Files (x86)\…, bezpośrednio główny katalog C:\ albo katalog instalacyjny programu), zmień go na folder, w którym masz prawo zapisu — najprościej domyślny katalog roboczy programu C:\Users\Public\Documents\TaxMachine, ewentualnie własny folder na innym dysku (np. D:\TaxMachine). Jeśli baza leży na dysku sieciowym, przenieś ją lokalnie — trzymanie bazy TaxMachine na udziale sieciowym to konfiguracja nieobsługiwana, która sama w sobie prowadzi do blokad i błędów dostępu. To samo dotyczy folderu synchronizowanego do chmury (OneDrive, Dropbox, Google Drive) — wyłącz synchronizację katalogu z bazą albo przenieś bazę do domyślnego katalogu roboczego programu.
Krok 5 — jeżeli błąd wraca mimo poprawnych uprawnień i wyjątków antywirusa. Wtedy warto sprawdzić, czy plik bazy nie jest uszkodzony — to jednak rzadka przyczyna akurat tego błędu (CANTOPEN (14) dotyczy zwykle dostępu do pliku, a nie jego zawartości), więc najpierw wyczerp poprzednie kroki. Jak zdiagnozować i naprawić uszkodzoną bazę, opisano tutaj: Uszkodzenia bazy danych.
Nadanie uprawnień do katalogu z linii poleceń
Jeśli wolisz zostawić bazę lub kopie w dotychczasowym katalogu i po prostu nadać sobie do niego prawo zapisu, otwórz Wiersz polecenia jako administrator i wykonaj poniższe polecenie, podstawiając pełną ścieżkę do katalogu z bazą/kopiami:
icacls "C:\ścieżka\do\katalogu" /grant "%USERNAME%:(OI)(CI)F" /T /C
Nadaje ono Twojemu kontu pełną kontrolę nad katalogiem wraz z podkatalogami i plikami. Pełny opis (znaczenie opcji, przykłady, ostrzeżenia oraz pozostałe sposoby naprawy uprawnień) znajdziesz w artykule Problemy wynikające z braku uprawnień.
Tematy pokrewne
- Problemy z automatyczną aktualizacją — gdy sama aktualizacja programu nie przebiega poprawnie.
- Program nie startuje po aktualizacji — gdy po aktualizacji nie uruchamia się cały program, a nie tylko krok aktualizacji bazy.
- Pobieranie i instalacja programu — jak ponownie zainstalować program, uruchamiając instalator „jako administrator”.