Marian Kociołek

Marian Kociołek specjalista ds. SEM,
PKO Bank Polski

Temat: Kwerenda usuwająca dane z konkretnego dnia z wielu tabel...

Hej,

Może mógłby mi ktoś pomóc z następującym problemem. Codziennie dodaję za pomocą makra dane do kilkudziesięciu tabel. Gdy wywala jakiś błąd muszę usuwać wszystkie dane ręcznie. Czy zna ktoś sposób na skonstruowanie kwerendy, która po wpisaniu daty usunie dane za ten dzień z wszystkich tabel jednocześnie? Z góry dzięki za pomoc.

Pozdrawiam,
Marian
Marzanna Szulta

Marzanna Szulta właściciel, Usługi
Informatyczne
SZULTASET

Temat: Kwerenda usuwająca dane z konkretnego dnia z wielu tabel...

To może być raczej problematyczne. Proponowałabym wykorzystać raczej makro (procedurę VBA), które po prostu, po podaniu daty, przejdzie przez wszystkie te tabele kodem SQL usuwającym konkretne rekordy.
Sławomir Broda

Sławomir Broda VBA, Excel, Access,
SAP i wszystko
związane z
automatyzac...

Temat: Kwerenda usuwająca dane z konkretnego dnia z wielu tabel...

Jeżeli baza zaprojektowana jest prawidłowo to można to zrobić poprzez odpowiednio stworzone relacje z opcją kaskadowego zmieniania i usuwania.
Oskar Shon

Oskar Shon Dodatki do Office
www.VBATools.pl

Temat: Kwerenda usuwająca dane z konkretnego dnia z wielu tabel...

A dlaczego się wywala i dlaczego kasujesz wszytko?
Prawidłowo: Powinieneś łączyć się z bazą (np po ODBC czy ADODB) i wpychać ile wejdzie.
Jeśli zrywa Ci się połączenie, to sprawdzaj funkcją przed połączeniem z każdą tabelą czy jest ono w dalszym ciągu zawarte (nie musisz go zamykać i łączyć się ponownie). Jeśli zostało przerwane w trakcie procesu, to wywołaj połączenie i kasowanie tylko rekordów z ostatniej tabeli (a to przecież jeden selekt) i ponów realizację w pętli.

Do tego podziel sobie procedurę na segmenty z odwołaniami i obsługą będów

'deklaracje globalne takie jak nazwa połacznia, recordset, zmienne
'------------------------------------------------------------------------
sub import
powrot1:
dim p$, x&, max_row: max_row = .....
for x = 1 to max_row
If con.state <> 1 Then goto blad1
p = "insert into baza (gdzie...), .cells(x,1) '...warunki do rs lub procedury składowanej"
next
'następna pętla i następna baza i następna obsługa błędów

exit sub
blad1: 'obsługa błędu pierwszej pętli
' call polczenie
' call kasowanie1
resume powrot1
end sub
'------------------------------------------------------------------------
sub polaczenie
con.Open rodzaj_polaczenia
end sub
'------------------------------------------------------------------------
sub kasowanie1
dim p$: p = "delete from baza t where t.data_importu = " & date
'deklaracje
rs.open p, con
end sub

Względnie, można kasowanie o ile ma taką samą strukturę sparametryzować przekazując tylko jej nazwę lub rozwinąć je w case porając jakiś tam kolejny numerek
Karol Kowalczyk

Karol Kowalczyk Programista, Marsh
Sp z o.o.

Temat: Kwerenda usuwająca dane z konkretnego dnia z wielu tabel...

Dodać do każdej tabeli identyfikator importu. Może to być coś ala "20150629" albo numer ID z tabelki importy.

Następna dyskusja:

kwerenda wyszukujaca niepop...




Wyślij zaproszenie do