jak automatycznie otworzyć kolejny plik accessa, po zakończeniu aklualizacji obecnie otwartego.

Odpowiedz Nowy wątek
2019-06-05 10:17
0

Pytanie jak w tytule, a sprawa wygląda następująco. Muszę codziennie aktualizować pliki/bazy access-owe, które ze względu na wielkość są podzielone na kilka plików. Każdy plik musi się aktualizować w odpowiedniej kolejności. Do tej pory mam to ustawione w harmonogramie w godzinach nocnych, kiedy sieć nie jest mocno obciążona i każdy plik ma szytwno ustawioną godzinę. Każdy plik posiada autoexec, który uruchamia makro, utworzone poprzez wybranie akcji z listy, a nie VBA. Dzięki temu forum wiem już, że można takie makro konwertować na VBA, które dla przykładowego pliku wygląda jak poniżej.

Function aktualizacja()
On Error GoTo aktualizacja_Err

    DoCmd.SetWarnings False
    DoCmd.OpenQuery "00_czysci tabela_moje_kody", acViewNormal, acEdit
    DoCmd.OpenQuery "00_aktualizuje tabela_moje_kody", acViewNormal, acEdit
    DoCmd.OpenQuery "00_czysci tabela_sprzed_dzienna_30", acViewNormal, acEdit
    DoCmd.OpenQuery "00_aktualizuje tabela_sprzed_dzienna_30", acViewNormal, acEdit
    DoCmd.OpenQuery "00_tworzy tabela_regulacji_mag_surowe", acViewNormal, acEdit
    DoCmd.OpenQuery "00_czysci tabela_MEA_teraz", acViewNormal, acEdit
    DoCmd.OpenQuery "00_nowe_aktualizuje tabela_MEA_teraz", acViewNormal, acEdit
    DoCmd.OpenQuery "00_czysci tabela_MEA", acViewNormal, acEdit
    DoCmd.OpenQuery "00_nowe_dodaje tabela_MEA_his", acViewNormal, acEdit
    DoCmd.OpenQuery "00_nowe_dodaje tabela_MEA_teraz", acViewNormal, acEdit
    DoCmd.OpenQuery "00_nowe_czysci tabela_sprzed_surowe_teraz", acViewNormal, acEdit
    DoCmd.OpenQuery "00_nowe_aktualizuje tabela_sprzed_surowe_teraz", acViewNormal, acEdit
    DoCmd.OpenQuery "00_nowe_czysci tabela_sprzed_surowe", acViewNormal, acEdit
    DoCmd.OpenQuery "00_nowe_dodaje sprzed_surowe_his", acViewNormal, acEdit
    DoCmd.OpenQuery "00_nowe_dodaje sprzed_surowe_teraz", acViewNormal, acEdit
    DoCmd.SetWarnings True
    DoCmd.Quit acSave

aktualizacja_Exit:
    Exit Function

aktualizacja_Err:
    MsgBox Error$
    Resume aktualizacja_Exit

End Function

Jest sposób na zmodyfikowanie takiego kodu, żeby po zakończeniu aktualizacji otwierał kolejny plik, który powinien być aktualizowany w następnej kolejności?

edytowany 2x, ostatnio: malay, 2019-06-05 10:19

Pozostało 580 znaków

2019-06-07 15:37
0

Odpowiednikiem kodu SQL który masz w poście, jest taki SQL:

drop table 02_prognoza_fin

Pozostało 580 znaków

2019-06-07 16:15
0

Panczo, dziękuję. Czuje się jakbym chciał się nauczyć jeździć rowerem, a nauczyłem się prowadzić rakiety!!! Rozwiązanie działa bez zarzutu. W kodzie finalnym zrezygnowałem z kopii zapasowej.

Bedzie dużym nadużyciem jak poproszę o wytłumaczenie części kodu, której nie rozumiem? Otóż nie wiem jak posługiwać się tym zapisem:

strLckFile =  Replace(p,".accdb",".laccdb")
strSrcName =  p
strDstName =  Replace(p,".accdb","_compacted.accdb")
strBackup =  Replace(p,".accdb","_backup.accdb")

czyli jak działać na plikach bez podawania ich nazwy, tylko jako zdefiniowaną zmienną. Od razu zaznaczę, że jestem bardzo początkujący jeżeli chodzi o rozwiązania automatyzacji od strony kodu.

Pozostało 580 znaków

2019-06-07 16:27
0

Do funkcji kompaktującej baze przekazujesz ściezke pliku (p), tak naprawdę kompaktowanie to w dużym skrócie i uproszczeniu kopiowanie pliku porządkujące kolejnośc danych w plik i pomijanie "pustych" danych.

Wiec musimy poznać sciezke do pliku laccdb , nowej kopii i backupu.
Funkcja replace, zamienia w podanym ciągu jeden ciąg znakow na drugi, czyli:
Replace(p,".accdb",".laccdb") znaczy tyle: w ciągu c:\roboczy\baza1.accdb znajdź .accdb i podmień na .laccdb i analogicznie dla reszty, czyli wartości po zmianach będą takie:

strLckFile =  "c:\roboczy\baza1.laccdb"
strDstName =  "c:\roboczy\baza1_compacted.accdb"
strBackup =  "c:\roboczy\baza1_backup.accdb"

Pozostało 580 znaków

2019-06-12 11:42
0

wrócę do tematu, skrypt często zwraca błąd na różnych liniach ale zawsze przy tej samej instrukcji

objConn.open connStr & plik

błąd nie wynika ze złej części kodu, bo po uruchomieniu skryptu ponownie bez wykonania żadnych korekt, przechodzi poprawnie. Z czego może wynikać błąd otwarcia pliku i czy obsługą błędu on Error dam radę wykonać poprawnie skryp, jeżeli on Error będzie dobrym rozwiązaniem to wykonać cały skrypt od nowa czy cofnąć się tylko o jedną linie?

Pozostało 580 znaków

2019-06-12 11:44
0

Komunikat błędu?

Pozostało 580 znaków

2019-06-12 13:09
0

jak na złość, żaden nie chce wyjść. Jak tylko się pojawi to zapiszę.

Pozostało 580 znaków

2019-06-12 13:34
0

jednak błędy wychodzą w różnych miejscach i przy różnych instrukcjach, ale zawsze kolejne uruchomienie skryptu bez modyfikacji powoduje, że przejdzie cały bez błędu. Ekran błędu poniżej

 .Execute "aktualizuje_tabela_do_analizy"

komunikat_12062019.png

edytowany 1x, ostatnio: malay, 2019-06-12 13:34

Pozostało 580 znaków

2019-06-12 13:51
0

..... i kolejny

objConn.open connStr & plik

komunikat_12062019_v2.png

Pozostało 580 znaków

2019-06-12 14:04
0

... oraz kolejny

    .Execute "04_dodaje_sprzed_surowe_his"

komunikat_12062019_v3.png

Pozostało 580 znaków

2019-06-12 14:46
0

Pytanie to jak to jest uruchamiane, moze wcześniejsze uruchomienie się nie zakończyło i sta te błedy?

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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