Discussion:
Nieistniejące formularze i raporty (Access 2003prof)
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
d***@fest.pl
2009-05-21 11:43:57 UTC
Permalink
Witam.
Od jakiegoś czasu męczę się z zabugowaną bazą, proszę o pomoc. Da się
na niej pracować, ale to coraz bardziej uciążliwe.

Na starcie bazy, jak włączam formularz lub raport, wyskakuje długa
seria okienek:

I seria:
Tytuł okna: Microsoft Visual Basic
Treść: An error occured while loading 'FormularzRaz'. Do you want to
continue loading the project? [Tak/Nie/Pomoc]
(okienko pyta po kolei o 6 różnych formularzy i 4 różne raporty)

II seria na przemian z III i IV:
Tytuł okna: Microsoft Office Access
Treść okna: Nie wprowadzono zmian w tabeli, gdyż doprowadziłoby to do
powtórzenia wartości w indeksie, kluczu podstawowym lub relacji. Zmień
dane w polach zawierających powtarzające się dane, usuń indeks lub
zdefiniuj go tak, aby umożliwić powtarzanie się danych. [Ok/Pomoc]

III seria na przemian z II i IV:
Tytuł okna: Microsoft Office Access
Treść okna: Brak bieżącego rekordu. [Ok/Pomoc]

IV seria na przemian z II i III:
Tytuł okna: Microsoft Office Access
Treść okna: Wprowadzona nazwa formularza 'FormularzX' jest błędna lub
odwołuje się do formularza, który nie istnieje.
Jeśli nieprawidłowa nazwa formularza dotyczy makra, po naciśnięciu OK,
w oknie dialogowym Akcja nieudana, zostanie wyświetlona nazwa makra
oraz jego argumenty. Otwórz okno Makro i wprowadź poprawną nazwę
formularza. [Ok]

Wszystkie okienka da się przeklikać i baza działa. Jednak czasami po
uruchomieniu nie ma w niej żadnego formularza, co jest naprawdę
frustrujące, gdyż trzeba parę razy dziennie robić kopie i je
przywracać. Ten błąd musi się generować przy zamykaniu bazy,
testowałam to: robię 4 kopie zapasowe, jak coś się zepsuje to nie
działa żadna, ponowne prób otwierania nie skutkują.
Ponadto trudny w bezawaryjnej edycji jest jeden z formularzy
(największy i chyba najstarszy zarazem), tam ciężko o dodanie
jakiegokolwiek elementu. Kiedyś utworzyłam go od nowa, ale to nie
rozwiązało sprawy. Obecnie baza jest stanowczo zbyt duża, by ją
tworzyć od nowa lub przesyłać.

Najlepsze jest to, że wszelkie zgłaszane w komunikatach formularze i
raporty naprawdę nie istnieją. Poza jednym formularzem, nigdy ich nie
tworzyłam. Kiedyś odkryłam, że nazwy obiektów są zbieżne z nazwami z
bazy zrobionej w automatycznym kreatorze. Szukałam odniesień do nich w
Kodzie, w końcu udało mi się zlokalizować ich listę w Object Browser.
Któregokolwiek na tej liście nie kliknę, pisze że go nie ma. Żaden nie
ma modułów ani makr, nie tworzyłam takich rzeczy, nie znam VBA.
Chciałam pousuwać te obiekty, w nadziei że przestanie zgłaszać błędy,
ale File->Remove jest w ich przypadku nieaktywne.

Nie mam pomysłu co robić, za rok będę pół godziny przeklikiwać
komunikaty o błędach... Nie wiem czemu,ale wydaje mi się, że to
wszystko jest powiązane i razem psuje się bardziej z czasem.

Gdyby ktoś potrafił choć trochę zmniejszyć zabugowanie bazy, to zawsze
będzie sukces ;)
Maciej Tokarz
2009-05-21 12:59:22 UTC
Permalink
Witaj,

1. Import obiektów do nowej bazy...
2. Wczoraj czytałem o czary mary z wyciananiem zawartości modułów i
wklejaniem ich z powrotem:
http://www.utteraccess.com/forums/showflat.php?Access-2007-crashes-if-VBE-is-not-opened-first-&Number=1830303
3. Śledzenie kodu F8

pozdrawiam
Maciej
Krzysztof Naworyta
2009-05-21 16:31:29 UTC
Permalink
Juzer Maciej Tokarz <***@hotmail.com> napisał

| 1. Import obiektów do nowej bazy...

To podstawa! Jak gdzieś zawisły _nieistniejące_ klasy/formularze, to
należy spróbować tego właśnie w pierwszej kolejności.
Chyba, że import się wywali na tych obiektach. Ale chyba nie ma takiej
możliwości...
Zawsze można je pominąć na liście obiektów importowanych (?)

Inny sposób (jeśli jakims cudem import nie przejdzie) to użycie
przełącznika /Decompile

Czyli tworzymy skrót windows:

"C:\...\msaccess.exe" "D:\...\baza_kopia.mdb" /decompile

Uwaga! Zawsze na kopii, bo po /decompile plik może (!) ulec trwałemu
uszkodzeniu.
Mnie się to jeszcze nie zdarzyło, ale inni kazali dmuchać!
(zdarzyło się, że po jednym /decompile nie zadziałało, ale po drugim już
tak! Ale trzeba mieć oryginał na wszelki wypadek!)

Ważne jest aby po /decompile baza sama nie wstała (autoexec, formularz
startowy)
Czyli wywołując skrót (z prawego musza, a nie przez podwójne kliknięcie
czy enter) trzymamy shift !
Potem zamykamy, otwieramy z Shiftem, przechodzimy do modułów i
kompilujemy!


| 2. Wczoraj czytałem o czary mary z wyciananiem zawartości modułów i
| wklejaniem ich z powrotem:
|
http://www.utteraccess.com/forums/showflat.php?Access-2007-crashes-if-VBE-is-not-opened-first-&Number=1830303

Czasami próbujesz kompilować jakiś kod i wyskakuje zupełnie niezrozumiały
błąd.
Zatrzymuje się na linijce gdzie absolutnie wszystko jest w porządku!
Zgłasza np., że jakaś zmienna lub metoda nie istnieje. A ty przeglądasz i,
kurde, przecież jest!

Powód: gdzies jest inny błąd, ale VBE sie pogubiło!
Wtedy czasami pomaga jakakolwiek edycja w tym module.
Dopisz spację, przekompiluj!
Najczęściej to wystarczy aby VBE wskazał rzeczywisty powód błędu.

W tym sensie "przeklejenie" modułu niczym nie różni się od dodania owej
jednej-jedynej spacji.

Zdarza się, że sama próba otwarcia VBE kończy sie wylotką!
Na to zawsze pomagał reimport obiektów do nowej bazy.
Niestety podczas importu giną rzeczy, które mogą być ważne.
Są to chociażby własne niestandardowe właściwości bazy.
Ale chodzi też o własne paski narzędzi czy specyfikacje importu/eksportu
(te da się zaimportować, ale łatwo o nich zapomnieć)
Dlatego ja najpierw odtwarzam plik bez kwerend/formularzy/raportów/modułów
przy pomocy:

SaveAsText 6, "", CurrentProject.Path & "\NowaNazwa.mdb"

Następnie otwieram NowaNazwa.mdb i do niego importuję całą resztę
obiektów.
Wbrew nazwie funkcji, SaveAsTest z pierwszym parametrem =6 nie tworzy
jakiegoś dokumentu tekstowego, lecz zwykłe mdb/adp z tabelami, paskami,
niestandardowymi właściwościami itd.
Jedynie bez formularzy/raportów/makr/kodu/stron dostępu...
Te importujemy ręcznie.
Uwaga! Po otwarciu NowaNazwa.mdb przechodzimy do opcji i każemy pokazywać
obiekty ukryte i systemowe!
Jeśli jakiś formularz nazywa się USysCośTamCośTam, to jest przez access'a
traktowany jako systemowy i ukryty!
Nie chcemy o nim zapomnieć przy imporcie, prawda? ;)


Ostatnia metoda, bardzo fajna, ale wymagająca dużej ostrożności, to
rzeczona wyżej SaveAsText ale z innymi argumentami, a potem LoadFromText.
Kto chce, ten wygoogla więcej informacji.
Funkcje oficjalnie prawie wcale nie są udokumentowane.
Są pułapki z wersją access'a kontra domyślna wersja access'a (opcje!)
Muszą być zgodne!

Nic co powyżej nie było testowane na a'2007 !

Do decora:
- ilu uzytkowników korzysta z Twojej bazy równocześnie?
- czy baza rozdzielona jest na dane i aplikację?
- czy aplikację każdy użytkownik ma lokalnie na swoim komputerze ?

Coś mi mówi, że nie...
Jeśli mam rację, to błąd, to bardzo wielki błąd !
--
KN

archiwum grupy:
http://groups.google.pl/advanced_group_search
(grupa: pl*msaccess)
Maciej Tokarz
2009-05-21 17:47:32 UTC
Permalink
Tak w zakresie tematu może się komuś przyda informacja... Kilka dni
temu utworzyłem formularz z podformularzem, pod oba podpinałem
rokordseta (Access 2007). Niestety w RunTime nie chciał się owy
formularz uruchomić zawieszając program. Pomógł Service Pack 2 wydany
całkiem niedawno bo pod koniec kwietnia:
http://www.microsoft.com/downloads/details.aspx?familyid=6F4EDEED-D83F-4C31-AE67-458AE365D420&displaylang=pl
Można sporo nerwów oszczędzić instalując :-)
pozdrawiam
Maciej
d***@fest.pl
2009-05-22 06:52:49 UTC
Permalink
Post by Krzysztof Naworyta
- ilu uzytkowników korzysta z Twojej bazy równocześnie?
- czy baza rozdzielona jest na dane i aplikację?
- czy aplikację każdy użytkownik ma lokalnie na swoim komputerze ?
Coś mi mówi, że nie...
Jeśli mam rację, to błąd, to bardzo wielki błąd !
Jestem załamana. Nie rozumiem większości haseł, którymi wszyscy tu
swobodnie się posługują. Wczytam się i spróbuję znaleźć któreś z
opisanych funkcji, choć nie jestem zbyt oblatana i boję się zepsuć
jeszcze bardziej (teraz przynajmniej działa...)
Odpowiedzi:
1) 1 użytkownik na 1 stanowisku
2) nie wiem, więc chyba nie
3) -

To zobaczę to importowanie.
d***@fest.pl
2009-05-22 10:27:22 UTC
Permalink
Zaimportowałam obiekty, nieistniejących nie było na liście.
Zaimportowałam też ukryte, ale potworzyły się ich drugie (nieukryte)
wersje, bo w nowej już takie były:
MSysObjects1
MSysQueries1
MSysRelationships1

Startowych komunikatów nie ma.

Nie działają mi kwerendy (ani ich raporty) z użyciem funkcji Round.
Czyli większość, bo to cenniki akurat. Katastrofa, bo nie mogę ich
drukować, chyba że z tej starej kopii tymczasowo. Wyrzuca komunikat:
Tytuł okna: Microsoft Office Access
Treść: Nie zdefiniowana funkcja 'Round' w wyrażeniu. [ok/pomoc]
(Błąd 3085)

Czy mam podczepić jakąś bibliotekę czy coś, by rozpoznawał tę funkcję?
Zawsze ją znał, więc pewnie to nie problem, ale nie wiem gdzie jej
szukać. Nie pamięta również funkcji "Now"...

Najbardziej awaryjny formularz czasami nadal się stawia, ale chyba
mniej.
Natomiast przy drukowaniu go (formularza) bez opcji "tylko dane"
Access wywala się za każdym razem, a tego nie robił. Zawsze coś musi
nie działać...

Nieistniejące obiekty nadal widzę w edytorze VBA i nadal wyskakuje
błąd, że ich nie ma, ale jest na to prosty sposób - nie zaglądam tam i
łudzę, się że się nie zbieszą i nie wyjdą do codziennej pracy.
d***@fest.pl
2009-05-22 11:58:42 UTC
Permalink
Próbowałam znaleźć coś sama i napotkałam w internecie wzmianki o dwóch
bibliotekach:
MS DAO oraz MS Jet, ale jak włączam ten edytor VBA (są tam
nieistniejące obiekty) i zaznaczę te biblioteki (albo wykonam
jakąkolwiek inna zmianę) to znowu zaczyna się cyrk - przy zamykaniu
bazy są komunikaty o braku rekordu i o niewprowadzaniu informacji,
która doprowadziłaby do powtórzenia się indeksu. Kiedy to przeklikam i
zamknę, to baza po otwarciu zgłasza, że ma uszkodzony program VBA:
Microsoft Office Access:
Projekt programu VBA w bazie danych jest uszkodzony [ok]

Potem sypią się któreś z nadrzędnych pól łączących formularzy i pisze,
że brak pamięci do zakończenia operacji. Jest strasznie dużo klikania,
choć wygląda na to, że podformularze pokazują prawidłowe dane, więc
nie wiem o co chodzi. :(
Krzysztof Naworyta
2009-05-22 20:40:35 UTC
Permalink
Juzer Użytkownik <***@fest.pl> napisał
| Zaimportowałam obiekty, nieistniejących nie było na liście.
| Zaimportowałam też ukryte, ale potworzyły się ich drugie (nieukryte)
| wersje, bo w nowej już takie były:
| MSysObjects1
| MSysQueries1
| MSysRelationships1

Tabele rodziny "MSys" są tabelami systemowymi (access'a), których akurat
nie należy importować.
Zawierają "binaria" wszystkich pozostałych obiektów, więc ich kopie z
sufixami są zupełnie nieużyteczne.
Możesz je śmiało skasować (te z sufixami)

| Nie działają mi kwerendy (ani ich raporty) z użyciem funkcji Round.
| Czyli większość, bo to cenniki akurat. Katastrofa, bo nie mogę ich
| drukować, chyba że z tej starej kopii tymczasowo. Wyrzuca komunikat:
| Tytuł okna: Microsoft Office Access
| Treść: Nie zdefiniowana funkcja 'Round' w wyrażeniu. [ok/pomoc]
| (Błąd 3085)
|
| Czy mam podczepić jakąś bibliotekę czy coś, by rozpoznawał tę funkcję?
| Zawsze ją znał, więc pewnie to nie problem, ale nie wiem gdzie jej
| szukać. Nie pamięta również funkcji "Now"...

To problem dość prosty. Po prostu zniknęła Ci jakaś biblioteka w
referencjach...
Tak, trzeba przejść do VBE i przekompilować kod. Wysypie się na braku
jakiejś referencji.
Albo wydedukujesz która to, albo przejdziesz do oryginału i tam sprawdzisz
co było zaznaczone.


| Najbardziej awaryjny formularz czasami nadal się stawia, ale chyba
| mniej.
| Natomiast przy drukowaniu go (formularza) bez opcji "tylko dane"
| Access wywala się za każdym razem, a tego nie robił. Zawsze coś musi
| nie działać...
|
| Nieistniejące obiekty nadal widzę w edytorze VBA i nadal wyskakuje
| błąd, że ich nie ma, ale jest na to prosty sposób - nie zaglądam tam i
| łudzę, się że się nie zbieszą i nie wyjdą do codziennej pracy.

Nie łudź się. Twój projekt jest po prostu zły. Coś tam jest nakaszanione.

Mam bardzo prostą propozycję:
Zrób kopię bazy, następnie wykasuj z tabel wszystko.
Zostaw co najwyżej zawartość tabel słownikowych, a jeszcze lepiej po parę
rekordów w każdej innej.
Skompaktuj, spakuj i wyślij do mnie.
Rzucę okiem i obiecuję, że przynajmniej określę czy jest jakaś szansa
naprawy...
--
KN

archiwum grupy:
http://groups.google.pl/advanced_group_search
(grupa: pl*msaccess)
d***@fest.pl
2009-05-25 07:23:07 UTC
Permalink
Post by Krzysztof Naworyta
| Zaimportowałam też ukryte, ale potworzyły się ich drugie (nieukryte)
| MSysObjects1
| MSysQueries1
| MSysRelationships1
Tabele rodziny "MSys" są tabelami systemowymi (access'a), których akurat
nie należy importować.
Zawierają "binaria" wszystkich pozostałych obiektów, więc ich kopie z
sufixami są zupełnie nieużyteczne.
Możesz je śmiało skasować (te z sufixami)
(...)
Nie łudź się. Twój projekt jest po prostu zły. Coś tam jest nakaszanione.
Zrób kopię bazy, następnie wykasuj z tabel wszystko.
Zostaw co najwyżej zawartość tabel słownikowych, a jeszcze lepiej po parę
rekordów w każdej innej.
Skompaktuj, spakuj i wyślij do mnie.
Rzucę okiem i obiecuję, że przynajmniej określę czy jest jakaś szansa
naprawy...
Naprawdę byś to zrobił? Jesteś super... Ale po tym jak napisałeś, że
Sys'ów się nie importuje, to nie skasowałam ich, tylko zrobiłam drugi
import bez nich. I wiesz? Wszystko chyba działa... Staram się jeszcze
nie wiwatować, ale baza chodzi, w edytorze vba jest pusto, nie
wyskakują błędy przy starcie, a funkcje Round i Now są raptem widoczne
(tam nie brakowało żadnej biblioteki przedtem).
Yeah :D

Dziekuję :*
Postaram się nic nie zepsuć. Pozdrawiam!

Loading...