Joanna J.

Joanna J. Ryzyko kredytowe,
Bank Pekao S.A.

Temat: Makra w accessie

Witam,

Mam problem z makrami w accessie.
Stworzyałam sobie bazę i chciałam aby marko uruchamiało mi kilka kwerend. Stworzyłam takie 2 makra. Po wykonaniu makra i próbie zamknięcia bazy - Access zawieszsza się.
Nigdy wcześniej nie korzystałam z makr w Accessie, więc nie wiem w czym jest problem. Zdarza się też ze wyskakuje konunikat "Błąd argumentu"(jak kilka razy włączę makra) i próbując naprawić taką bazę dostaję komunikat "Nie można kompaktować otwartej bazy danych, kiedy wykonywane jest makro lub kod systemu Visual Basic".
Da się coś zrobić z tymi makrami, aby baza działała właściwie?

Z góry dziękuję za wskazówki.

Pozdrawiam.

konto usunięte

Temat: Makra w accessie

Joasiu mozesz podeslac kod makra?
Joanna J.

Joanna J. Ryzyko kredytowe,
Bank Pekao S.A.

Temat: Makra w accessie

Ale to jest makro stworzone z wykorzystaniem wbudowanych akcji dostępnych w accessie....:)chyba, że da się jakoś podejrzeć ten kod.Joanna Jemioł edytował(a) ten post dnia 03.08.12 o godzinie 14:22

konto usunięte

Temat: Makra w accessie

Joanna Jemioł:
Ale to jest makro stworzone z wykorzystaniem wbudowanych akcji dostępnych w accessie....:)chyba, że da się jakoś podejrzeć ten kod.

zaznacz kilka linii w makrze
skopuj
wklej do notatnika i zobacz co się stanie
Joanna J.

Joanna J. Ryzyko kredytowe,
Bank Pekao S.A.

Temat: Makra w accessie

Tylko najpierw trzeba było przekonwertować makra na język Visual Basic, żeby dało się przekopiować:)

Poniżej kody obu makr. Może ta moja baza jest jakaś uszkodzona, makra niby działają dobrze, ale po wykonaniu ich i próbie zamknięcia Accessa - program wieszsza się.
W poprzedniej bazie w makrze ustawiłam akcję Uruchom polecenie - Napraw Bazę i wtedy cała baza się popsuła, nic już nie działało, pojawił się komunikat błąd argumentu i jedyne co udało mi się zrobić, aby nie stracić całej pracy, to wyeksportowanie tabel i kwerend do nowej bazy accessowej. A makra całkiem gdzieś przepadły. Ma to jakiś związek z moim problemem?
Może po prostu powinnam utworzyć wszystkie obiekty od samego początku, a nie eksportować gotwowe i wtedy nic by się nie zawieszszało?

'------------------------------------------------------------
' Makro1__KARTY
'
'------------------------------------------------------------
Function Makro1__KARTY()
On Error GoTo Makro1__KARTY_Err

DoCmd.RunCommand acCmdLinkedTableManager
DoCmd.OpenQuery "KT_dodatkowe_pola_karty_1", acViewNormal, acEdit
DoCmd.OpenQuery "Karty__polaczenie_1", acViewNormal, acEdit
DoCmd.OpenQuery "DO_TWORZENIA_BAZY_KART_2", acViewNormal, acEdit
DoCmd.OpenQuery "KW_kolumny_obliczeniowe_3", acViewNormal, acEdit
DoCmd.OpenQuery "KW_dodajaca_kolejne_kol_4", acViewNormal, acEdit
DoCmd.OpenQuery "KW_Dni_przeterm_6", acViewNormal, acEdit
DoCmd.OpenQuery "KW_Dni_przeterm_6", acViewNormal, acEdit
DoCmd.OpenQuery "KW_grupa_BOI_7", acViewNormal, acEdit
DoCmd.OpenQuery "Przypisanie_Grup_8", acViewNormal, acEdit
DoCmd.OpenQuery "KT_cała_baza_9", acViewNormal, acEdit
DoCmd.OpenQuery "KT_GOTOWE_KARTY_OST_11", acViewNormal, acEdit
DoCmd.Close acQuery, "Przypisanie_Grup_8"
DoCmd.Close acQuery, "KW_grupa_BOI_7"
DoCmd.Close acQuery, "KW_Dni_przeterm_6"
DoCmd.Close acQuery, "KW_dodajaca_kol_5"
DoCmd.Close acQuery, "KW_dodajaca_kolejne_kol_4"
DoCmd.Close acQuery, "KW_kolumny_obliczeniowe_3"
DoCmd.OpenTable "Karty_OSTATECZNE", acViewNormal, acEdit

Makro1__KARTY_Exit:
Exit Function

Makro1__KARTY_Err:
MsgBox Error$
Resume Makro1__KARTY_Exit

End Function

'------------------------------------------------------------
' Makro2_TRANSAKCJE
'
'------------------------------------------------------------
Function Makro2_TRANSAKCJE()
On Error GoTo Makro2_TRANSAKCJE_Err

DoCmd.RunCommand acCmdLinkedTableManager
DoCmd.OpenQuery "KT_dodatkowe_pola_trans_kredytowe_1", acViewNormal, acEdit
DoCmd.OpenQuery "KA_LORO_2", acViewNormal, acEdit
DoCmd.OpenQuery "KT_zerowe_pozycje_trans_2", acViewNormal, acEdit
DoCmd.OpenQuery "KT_zerowe_pozycje_trans_2", acViewDesign, acEdit
DoCmd.RunCommand acCmdQueryTypeDelete
DoCmd.RunCommand acCmdRun
DoCmd.Close acQuery, "KT_zerowe_pozycje_trans_2"
DoCmd.OpenQuery "KT_transakcje_kredytowe_20", acViewNormal, acEdit
DoCmd.OpenQuery "KT_TS_21", acViewNormal, acEdit
DoCmd.OpenQuery "KW_Grupowanie_TS_22", acViewNormal, acEdit
DoCmd.OpenQuery "Znajdź duplikaty dla: KW_Grupowanie_TS_22_23", acViewNormal, acEdit
DoCmd.OpenQuery "KD_Wyrzuca_Duplikaty_TS_24", acViewNormal, acEdit
DoCmd.OpenQuery "KD_Wyrzuca_Duplikaty_TS_24", acViewDesign, acEdit
DoCmd.RunCommand acCmdQueryTypeDelete
DoCmd.RunCommand acCmdRun
DoCmd.Close acQuery, "KD_Wyrzuca_Duplikaty_TS_24"
DoCmd.OpenQuery "KW_polaczenie_IDKS_25", acViewNormal, acEdit
DoCmd.OpenQuery "KD_polaczone_IDKS_do_tran_26", acViewNormal, acEdit
DoCmd.OpenQuery "DO_TWORZENIA_BAZY_TRANSAKCJI", acViewNormal, acEdit
DoCmd.OpenQuery "KW_kolumny_obliczeniowe_3", acViewNormal, acEdit
DoCmd.OpenQuery "KW_dodajaca_kolejne_kol_4", acViewNormal, acEdit
DoCmd.OpenQuery "KW_dodajaca_kol_5", acViewNormal, acEdit
DoCmd.OpenQuery "KW_Dni_przeterm_6", acViewNormal, acEdit
DoCmd.OpenQuery "KW_grupa_BOI_7", acViewNormal, acEdit
DoCmd.OpenQuery "Przypisanie_Grup_8", acViewNormal, acEdit
DoCmd.OpenQuery "KT_cała_baza_9", acViewNormal, acEdit
DoCmd.OpenQuery "KT_GOTOWE_TRANSAKCJE_OST_11", acViewNormal, acEdit
DoCmd.Close acQuery, "KW_polaczenie_IDKS_25"
DoCmd.Close acQuery, "KW_Grupowanie_TS_22"
DoCmd.Close acQuery, "KW_kolumny_obliczeniowe_3"
DoCmd.Close acQuery, "KW_dodajaca_kolejne_kol_4"
DoCmd.Close acQuery, "KW_dodajaca_kol_5"
DoCmd.Close acQuery, "KW_Dni_przeterm_6"
DoCmd.Close acQuery, "KW_grupa_BOI_7"
DoCmd.Close acQuery, "Przypisanie_Grup_8"
DoCmd.OpenTable "Transakcje_OSTATECZNE", acViewNormal, acEdit

Makro2_TRANSAKCJE_Exit:
Exit Function

Makro2_TRANSAKCJE_Err:
MsgBox Error$
Resume Makro2_TRANSAKCJE_Exit

End FunctionJoanna Jemioł edytował(a) ten post dnia 06.08.12 o godzinie 09:51
Monika M.

Monika M. PROGRAMISTA VBA,
Excel, Access,
Outlook, Word -
SZKOLENIA

Temat: Makra w accessie

Pani Joanno,

Tak na szybko sprawdzając zapis pierwszego makra (drugie jeszcze muszę sprawdzić), to widzę, że dwa razy uruchamia Pani tą samą kwerendę "KW_Dni_przeterm_6", a zamyka kwerendę, która nie została otwarta (przynajmniej przez to makro): "KW_dodajaca_kol_5".
Być może wszystko jest OK i tak ma być, bo same makra nie mówią jeszcze o funkcjonalności bazy, ale może tu jest problem - proszę sprawdzić.
Pewnie są to kwerendy funkcjonalne, choć nie jestem pewna, skoro je Pani zamyka?Monika M. edytował(a) ten post dnia 06.08.12 o godzinie 10:21
Joanna J.

Joanna J. Ryzyko kredytowe,
Bank Pekao S.A.

Temat: Makra w accessie

Witam Panią,

Dziękuję za uwagę:) Rzeczywiście dwa razy otwieram tą samą kwerendę, pomyłka, powinno być "KW_dodajaca_kol_5".
Ale dalej to nie rozwiązuje mojego problemu z wieszszaniem się Accessa.

Pozdrawiam.Joanna Jemioł edytował(a) ten post dnia 06.08.12 o godzinie 10:58
Monika M.

Monika M. PROGRAMISTA VBA,
Excel, Access,
Outlook, Word -
SZKOLENIA

Temat: Makra w accessie

No to drążymy dalej! :)

Zacznijmy od tego, że przydałoby się wiedzieć, w której wersji Accessa Pani uruchamia bazę.
Druga sprawa: możliwość uruchomienia makra krokowo, z analizą każdej linijki, czy zwraca błąd itd. - czy próbowała już Pani?

Dalej mamy:
DoCmd.OpenQuery "KT_zerowe_pozycje_trans_2", acViewNormal, acEdit
DoCmd.OpenQuery "KT_zerowe_pozycje_trans_2", acViewDesign, acEdit
DoCmd.RunCommand acCmdQueryTypeDelete

Dlaczego kwerenda najpierw otwierana jest w widoku normalnym, a zaraz potem w trybie projektu?
Jak nazywa się argument "UruchomPolecenie" w zapisie makra, bo acCmdQueryTypeDelete, to mi wygląda na wywołanie polecenia z menu usuwającego kwerendę (?), ale nie mogę znaleźć takiego argumentu na liście (przynajmniej w 2007)?

Myślę, że najlepiej będzie spróbować analizy podczas krokowego wykonywania makra, sprawdzać numer błędu. Nic nie wiemy, czy podczas zamykania bazy wykonywane jest jakieś makro lub kod.
Być może jakiś formularz albo raport pozostaje w tle albo ma jakiś kod przy zamykaniu?
Joanna J.

Joanna J. Ryzyko kredytowe,
Bank Pekao S.A.

Temat: Makra w accessie

Pani Moniko,

Mój problem zniknął, gdy z obu makr usunęłam akcję "Uruchom polecnie - Menedżer tabel połączonych". Gdy choć w jednym z makr jest to polecenie, po wykonaniu makra i próbie zamknięcia Accessa, program wieszsza się. Czemu zatem to polecenie nie działa w moim makrze (zarówno w momencie tylko odświeżania tabeli połączonej jak również zmiany lokalizacji pliku tekstowego).

Pracuję niestety na Accessie 2003.
Co do analizy krokowej Access nie zwraca błędu.
W podanym przez Panią fragmencie kodu najpierw z tabeli głównej tworzę nową tabelę zawierającą określone dane, a następnie kwerendą usuwającą wyrzucam je z głownej tabeli, dlatego kwerendę otwieram w widoku projektu, zmieniam typ na usuwającą i uruchamiam.

Wojciech Gardziński

Wypowiedzi autora zostały ukryte. Pokaż autora
Monika M.

Monika M. PROGRAMISTA VBA,
Excel, Access,
Outlook, Word -
SZKOLENIA

Temat: Makra w accessie

Joanna Jemioł:
Mój problem zniknął, gdy z obu makr usunęłam akcję "Uruchom polecnie - Menedżer tabel połączonych". Gdy choć w jednym z makr jest to polecenie, po wykonaniu makra i próbie zamknięcia Accessa, program wieszsza się. Czemu zatem to polecenie nie działa w moim makrze (zarówno w momencie tylko odświeżania tabeli połączonej jak również zmiany lokalizacji pliku tekstowego).
Wywoływanie poleceń dostępnych w menu to nie jest najlepsze rozwiązanie.
Od czego zależy ta lokalizacja pliku tekstowego?
Lepiej byłoby, gdyby ścieżka do tego pliku była stała dla wszystkich użytkowników, np. znajdowałby się na serwerze plików, w sieci. Czyli dane dla wszystkich takie same, w jednym miejscu, stała ścieżka. Jeśli z pomocą łagodnej perswazji, błagania i wreszcie łomotu ;) nie da się przekonać odpowiednich osób do takiego rozwiązania, to lepiej będzie oprzeć to na kodzie VBA. Np. jeśli plik tekstowy jest zawsze w katalogu, gdzie znajduje się baza, to w kodzie można określić automatycznie ścieżkę do tego pliku.
No i wtedy - w zależności od tego, co tam robi Pani z tymi danymi - być może zamiast łączyć wystarczyłoby importować dane z pliku.
Nie wywoływalibyśmy wtedy menedżera tabel połączonych.
Pracuję niestety na Accessie 2003.
Dlaczego niestety? :) To bardzo fajna wersja :)
Może nie należy do moich ulubionych, bo wolałam wersję 97 i 2000, ale to i tak lepsza niż 2007, która mi wciąż podnosi ciśnienie ;)
Co do analizy krokowej Access nie zwraca błędu.
W analizie krokowej MAKRA wyświetla się takie okienko, gdzie jest napisany warunek, polecenie, kod błędu. Jeśli = 0, to OK, jeśli <>0, to polecenie do weryfikacji. Można też krokowo przeanalizować to przekonwertowane makro w VBA. Ale z tego, co zrozumiałam, to błąd pojawia się w momencie zamykania Accessa, więc tu gdzieś leży problem.
W podanym przez Panią fragmencie kodu najpierw z tabeli głównej tworzę nową tabelę zawierającą określone dane, a następnie kwerendą usuwającą wyrzucam je z głownej tabeli, dlatego kwerendę otwieram w widoku projektu, zmieniam typ na usuwającą i uruchamiam.
Jeśli mamy stałe kryteria, to przecież można od razu zrobić kwerendą usuwającą z danymi z tej utworzonej tabeli - bez takich kombinacji.
1 kwerenda funkcjonalna: tworząca tabelę, np. tblTemp
2 kwerenda funkcjonalna: usuwająca dane z tej drugiej tabeli - SQL pewnie się przyda
Wojciech Gardziński:
O ileż efektywniej byłoby, gdyby wysyłać do tej bazy SQLki z zewnątrz... tzw. rozdzielenie bazy i aplikacji...
Rozdzielenie bazy i aplikacji - tak, ale wysyłanie SQL do bazy z zewnątrz? Może jeszcze z Excela? ;>
Dobra, trochę się droczę ;) - efektywniej, to byłoby, gdyby ten plik tekstowy zawierał już odpowiedni zestaw rekordów, ale nie wszystko się da przeforsować w firmie, niektórzy admini boją się coś "popsuć" w MS SQL, czy też dane są eksportowane z jakiegoś CRM-a, np. CDN-a (choć to też oparte na MS SQL).
(To chyba najładniejszy wątek na GLu, nie mogłem się powstrzymać ;).)
Panie Wojtku, co się Pan tak podlizuje - no chyba nie chce Pan, żeby Pana ktoś polubił?! ;>
Przecież szczyci się Pan opinią człowieka nie lubianego ;>
Gniew Pani Moniki tutaj:
No nie mogę Pana zawieść, Panie Wojtku! ;)

No dobra, nie będę złośliwa, bo już Pan dzisiaj swoje dostał (nie ode mnie) ;>
A to jakaś przerwa pomiędzy jednym lewym sierpowym a prawym w wątku King Excel na BI czy już się zmęczyliście? ;> No bo doznałabym szoku, gdybyście się dogadali ;>
Dobra, dobra, już przestaję ;)

Teraz cięta riposta Pana Wojtka - o tu:

Wojciech Gardziński

Wypowiedzi autora zostały ukryte. Pokaż autora
Joanna J.

Joanna J. Ryzyko kredytowe,
Bank Pekao S.A.

Temat: Makra w accessie

Witam,

Dziękuję za pomoc.
Póki co pozostanę przy makrach bez polecenia - Menedżera tabel połączonych.
Pracuję niestety na Accessie 2003.
Dlaczego niestety? :) To bardzo fajna wersja :)
Może nie należy do moich ulubionych, bo wolałam wersję 97 i 2000, ale to i tak lepsza niż 2007, która mi wciąż podnosi ciśnienie ;

W poprzedniej pracy używałam Offica 2010, a z 2003 nigdy wcześniej nie miałam styku:)dopiero podejmując pracę w banku musiałam wrócić do przeszłości:) i przestawić się na starszą wersje Offica, co było dla mnie szokiem:)Ale znów niedługo czeka mnie powrót do 2010:)Choć przyzwyczajenie robi swoje:)

W podanym przez Panią fragmencie kodu najpierw z tabeli głównej tworzę nową tabelę zawierającą określone dane, a następnie kwerendą usuwającą wyrzucam je z głownej tabeli, dlatego kwerendę otwieram w widoku projektu, zmieniam typ na usuwającą i uruchamiam.
Jeśli mamy stałe kryteria, to przecież można od razu zrobić kwerendą usuwającą z danymi z tej utworzonej tabeli - bez takich kombinacji.
1 kwerenda funkcjonalna: tworząca tabelę, np. tblTemp
2 kwerenda funkcjonalna: usuwająca dane z tej drugiej tabeli - SQL pewnie się przyda

Rozumiem, że po prostu można utworzyć dwie kwerendy - tworzącą, a drugą usuwającą. Wiem, że tak mogłam, a jednak postanowiłam zrobić to na jednej kwerendzie:)

Pozdrawiam.Joanna Jemioł edytował(a) ten post dnia 09.08.12 o godzinie 09:46

Następna dyskusja:

Obliczenia w Accessie




Wyślij zaproszenie do