Microsoft Office Access
uređuje Branislav Mihaljev, MVP

 Office Praktikum | Mapa sajta 

 
Bookmark and Share
Matična strana sajta
Novo na sajtu
Mapa sajta
Beleške
Knjiga posetilaca
Kontakt

Prethodna stranica
Pretraga sajta
Pretraga MSKB

Blog Praktikuma
RSS feed 
 
Office Praktikum

Još o Accessu
 


Skoro svakodnevno slušamo
  Radio Paradise:
  eklektični muzički online radio bez reklama!
 

   

Sponzori sajta

  Connectivity by SBB
 
Connectivity by SBB

 

Informacije

NOVOSTI
Novi prilog o Wordu
Tri nova autorska članka
Četiri priloga o Accessu
Opis i uputstvo za alatku YuCirLat '08 (Word)

SADRŽAJ ZA PREUZIMANJE
YuCirLat '08 unapređena alatka za konverziju kodnih rasporeda u Wordu

SKREĆEMO PAŽNJU
Beleške: B(l)oga li ti tvoga!- prilog koji će nekog možda čak i da naljuti
Kako pretraživati MSKB
* a pronaći ćete i još mnogo novih sadržaja...

USKORO SERIJA ČLANAKA O OFFICEU 2010

POZIVAMO VAS
* i prenesite svoja iskustva. Najbolji prilozi će biti objavljeni.



  (C) 2000-2009 Praktikum na Webu
 

Oštećena baza

Nivo:  NIVO 3 - klinite za objašnjenje


Veliki broj pitanja koje dobijam od vas odnosi se na popravak oštećene baze. To su zaista nemile situacije, a problem je u tome što postoji mnogo mogućih razloga koji dovode do narušavanja integriteta baze. Prvi problem je da otkrijete i otklonite uzrok oštećenja, a zatim i da spasete šta se spasti može...

Svako ko iole duže radi sa Accessovim bazama će se naći u situaciji kada se od njega očekuje da spase što je moguće veći deo podataka i objekata i time ne samo da uštedi vreme, već povrati i podatke koji ne postoje na drugom mestu. Određenim mehanizmima se može uticati na bezbednost, ali se nikada ne mogu predvideti sve moguće situacije. Pogledajmo neke od situacija kada može doći do oštećenja baze i moguće načine spašavanja podataka.

Pre nego što bilo šta započnete da radite, napravite kopiju baze i to ne na istom disku gde se nalazi sama baza već najbolje na disku drugog računara ili na CD-u. Pretpostavka je da disk na kome se baza nalazi nije sasvim ispravan, pa se može desiti da u toku rada ostanete i bez same kopije. Druga stvar koju valja imati na umu je da "popravljena" baza ne garantuje ispravnost podataka. Nakon popravke treba da zadate operaciju sažimanja, a najbolje od svega je da prenesete podatke u potpuno novu bazu.

Uzgred... Vi redovno pravite zaštitne kopije svojih baza, zar ne?...
 
 

Znakovi raspoznavanja problema

Osim očiglednih znakova da je baza neispravna, postoje i manje očigledni od kojih određeni spadaju u kategoriju upozoravajućih - onih koji alarmiraju da može doći do skorog većeg oštećenja. Različitih simptoma po kome prepoznajete oštećenu bazu ima zaista mnogo, a njihovo opisivanje ne bi bilo lako; bilo bi dobro da raspolažete nekom od biblioteka znaja Microsofta (MSDN ili TechNet) u tu svrhu. Najčešću poruku sa greškom koju ćete videti je ona sa oznakom 2239 - baza se mora popraviti, ili poruku da datoteka nije Microsoft Access baza, ili pak treću sa oznakom 3343 - nepoznat format baze. Greška 3343 se može pojaviti kada pokušate da otvorite bazu novijeg formata u starijoj verziji programa, što ne znači da je baza oštećena. Ponekad Access neće ništa izveštavati: kada ga pokrenete i pokušate da učitate bazu, ne desi se baš ništa.

Određena radna stanica može izazvati oštećenje baze. Razlozi mogu biti raznoliki i kreću se od oštećenog softvera do neispravnog hardvera. Situacije su raznolike: moguće je čak da je napajanje neispravno ili da je korisnik nemaran, pa gasi računar bez regularne procedure ili ga samovoljno resetuje usred rada programa. Da biste utvrdili koja radna stanica uzrokuje probleme, preuzmite datoteku Jetutils.exe (za bazu Accessa verzije 97) sa stranice baze znanja KB176670 ili pogledajte članke pod oznakama KB198755 (Access 2000), odnosno KB285822 (Access 2002). Članak koji objašnjava kako možete uposliti ADO biblioteku da biste utvrdili korisnike koji imaju aktivnu konekciju sa bazom možete pronaći u MSDN bazi znanja pod nazivom Use ADO to Return a List of Users Connected to a Database.

Šta činiti

Nakon što ste napravili kopiju oštećene baze, pokušajte da obrišete LDB datoteku ako postoji. Kada postoji, LDB datoteka označava da je baza u upotrebi. Ako je ne možete obrisati, to znači da neko od korisnika trenutno koristi bazu ili je server jednostavno zaključao datoteku zbog nasilnog prekida u radu sa bazom. Pre nego što resetujete server, proverite još jednom da li neko od korisnika zaista koristi bazu, kako biste izbegli još veće oštećenje.

Napravite kopije baze, ali sada pod drugim imenom, kako biste osigurali da niko od korisnika ne pokrene FrontEnd deo kojim pristupa bazi i načini još veća oštećenja. Zatim proverite da li ste intalirali poslednje verzije zakrpa za Access i njegove mehanizme.

NAPOMENA
Sve zakrpe i nove verzije mašine Jet su obavezne za apliciranje!
 

Čudno ponašanje u radu sa bazom često ima uzrok neažurnih verzija softvera, npr. Access se nenadano zatvara kada dodajete zapis u tabelu pomoću upita samo ako se na računaru nalazi Windows 2000 SP2 i kada je Jet mašina u verziji za instaliran SP5 ili SP6. Uzgred, za SP4 ili SP5 zakrpe Jet mašine je dokumentovano da nisu sasvim sigurne: npr. ako imate jednu od ove dve zakrpe i koristite Access 2000, polje AutoNumber može ponavljati poslednji broj ako ste prethodno popravljali i komprimovali bazu, što zaista može proizvesti vrlo neprijatne posledice.

Pokušajte da prenesete objekte baze u novu bazu: ovo često rešava problem. Ako operacija uspe, preuzmite sa adrese www.trigeminal.com/lang/1033/utility.asp besplatnu alatku pod nazivom SysRel kojim ćete preneti i stablo relacija u novu bazu. Ukoliko Access ne dozvoli da prenesete objekte u praznu bazu, sledeće što treba pokušati je da pokrenete kopiju oštećene baze u novijoj verziji programa. Dozvolite Accessu da konvertuje bazu u noviji format, a zatim vratite bazu u pređašnji format. Ako je pređašnji format baze verzije 97, proverite u VBA oknu da li je aktivna DAO biblioteka u verziji 3.51 (meni Tools / References).

Nad naizgled ispravnom bazom, Access će dozvoliti da se ona otvori, ali ne i da se aplicira operacija popravke i sažimanja. U ovakvoj bazi najmanje jedan objekat je oštećen, pa bi se prebacivanje objekata u praznu bazu završilo neuspešno. Iako u Accessu postoji mogućnost importovanja objekata, morali biste jedan po jedan da ih prenosite dok ne utvrdite tačno koji je oštećen. Iz baze znanja preuzmite programe koji će importovati sve objekte i prijaviti one koji su neispravni sa stranica KB298176 za Access 97, odnosno KB298174 za Access 2000.


Jet Compact Utility za oporavak baze

Još neke "čudne" situacije

Konfliktnih situacija ima zaista mnogo, ali je njihov broj ipak konačan i (većinom) dokumentovan. Podaci u tabelama imaju najveću vrednost, jer se oni obično drže samo na jednom mestu (najčešće na serveru), a njima se pristupa pomoću FrontEnd dela baze koji sadrže ostale objekte. FrontEnd delovi se nalaze na radnim stanicama i samim tim oni su redundantni - to su kopije koje treba da budu identične.

Objekti na formi ili izveštaju mogu biti oštećeni tako da se greška manifestuje upozorenjem ili nasilnim prekidom u radu aplikacije, bilo tokom operacije prenošenja objekta u drugu bazu bilo tokom upotrebe. Grešku ignorišite, a zatim prenesite objekte forme ili izveštaja u prazan formular. Operacija može biti zamorna jer morate prenositi jedan po jedan objekat iz jednog u drugi formular, a zatim naknadno morate obraditi VBA programe vezane uz predviđene događaje. Nažalost, apliciranjem operacije popravke i sažimanja baze ne možete uvek otkriti objekat koji je neispravan, kako je primetio jedan od učesnika diskusione grupe posvećene Accessu. Iako su i FrontEnd i BackEnd delovi baze zasebno bili potpuno ispravni, a operacije sažimanja i popravke nisu prijavljivale grešku, aplikacija nije radila. Neispravan objekat na formi otkriven je tek naknadnim primenjivanjem operacije popravke i sažimanja baze i to tek nakon što su preneti svi objekti iz stare, "ispravne" baze u novu MDB datoteku!

Nedokumentovane funkcije SaveAsText i LoadFromText mogu vam pomoći kada su objekti, kao što su forme ili izveštaji, neispravni ili se čudno ponašaju - npr. predugo se učitavaju ili ih je nemoguće prikazati na ekranu u obliku za štampu. Kada formu ne možete preneti komandom Import, sačuvajte je u tekstualnom obliku tako što ćete u oknu Immediate VBA prozora otkucati sledeću naredbu:

Application.SaveAsText acForm, "NazivForme", "c:\forma.txt"

Formu možete naknadno učitati u novu bazu komandom:

Application.LoadFromText acForm, "NazivForme", "c:\forma.txt"

Sa Web stranice http://www.datastrat.com/Code/DocDatabase.txt možete preuzeti funkciju kojom ćete izvesti sve objekte baze, osim tabela, u tekstualni format. Ove objekte naknadno možete uvesti u novu bazu funkcijom LoadFromText, kako je prethodno navedeno.

Greške u VBA

Interesantna greška se može javiti i u VBA modulu. Access može i dalje izvršavati funkciju koju ste obrisali ili koju ste zamenili novom! Od verzije Accessa 2002, forma ili izveštaj ne dobijaju odmah po kreiranju pridruženi modul, već im se on dodeljuje naknadno kada otvorite ekran modula (dugme Code na traci alatki) ili kada vrednost HasModule postavite na vrednost True. Problem sa izvršavanjem fantomske funkcije možete razrešiti tako što module procedure eksplicitno kompajlirate odmah nakon kreiranja ili izmene. Naime, Access prilikom učitavanja modula za izvršavanje proverava da li je on već kompajliran. Ukoliko nije, modul se prvo kompajlira, a tek nakon toga izvršava. U neodređenim situacijama ovo pravilo ne važi - Access će izvršiti ranije kompajlirani modul i zapravo izvršiti funkciju koju ste ranije izbrisali! Osim što potencijalno izbegavate ovakvo čudno ponašanje, eksplicitnim kompajliranjem ubrzaćete i rad same aplikacije.

Tabelu sa podacima ponekada možete otvoriti iako ste utvrdili da je oštećena, što ukazuje na neki defektan zapis unutar same tabele (najčešće je to sadržaj polja tipa Memo ili OLE). Jednostavan način da locirate oštećeni zapis je da otvorite tabelu u režimu izmene sadržaja i da pregledate sadržaj pomeranjem vertikalnog klizača. U momentu kada neispravni zapis treba da se prikaže na ekranu, Access će prijaviti grešku. Iskopirajte ispravne zapise u novu tabelu, a zatim pokušajte da rekonstruišete sadržaj neispravnog zapisa - ukoliko nemate kopiju baze.

Uzgred, da ne zaboravim da vas pitam... Vi redovno pravite zaštitne kopije svojih baza, zar ne?...
 
 

Ukoliko ipak ne uspevate da ovim načinom eliminišete oštećene zapise, kreirajte novu bazu. Proširite izgled dijaloga File / Import pritiskom na dugme Options i unesite samo definiciju neispravne tabele odabirom opcije Definition Only u novu bazu. Neispravnu tabelu pridružite novoj bazi i kreirajte upit tipa Append, kojim ćete sadržaj tabele sa neispravnim zapisom preneti u tabelu nove baze. Uporedite broj zapisa obe tabele i utvrdite koliko zapisa nedostaje, a zatim utvrdite neispravne zapise na osnovu ID broja slogova.

U pronalaženju grešaka polja tipa Memo, pomoći će vam sledeća funkcija:

Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("NazivTabele")

With rs
  Do While Not .EOF
    If IsError(!MemoPoljeTabele) Then
      Debug.Print !IDTabele
    End If
    .MoveNext
  Loop
End With
rs.Close
Set rs = Nothing

Funkciju pokrenite u oknu Immediate, a kao rezultat ćete dobiti ID brojeve neispravnih zapisa.

Poslednji korak

Najzad, kada ništa od navedenog ne pomogne, preostaje vam da svoju bazu predate nekoj kompaniji specijalizovanoj za oporavak podataka. Jedna od najboljih se nalazi na adresi www.pksolutions.com, a oporavljenu bazu, u obimu u kome je oporavak bio moguć, možete očekivati za manje od 24 časa.

 

  (C) 2000-2009 Praktikum na Webu

Branislav Mihaljev, Access bajtovi, PC 97, PC 98


 
 

Vrh stranice  Prethodna stranica  Naslovna strana  Mapa sajta  Pretraga

AFORIZAM ZA DANAS OVIH DANA SLUŠAMO...

Copyright © Praktikum na Webu, 2000-2009; Valinor Design; sva prava pridržana.