Šta je novo?

Access i slike

grunf

Čuven
Učlanjen(a)
12.07.2002
Poruke
324
Poena
619
Ima li neki nacin da slike koje se ugrade ili linkuju u Access bazu ne povecaju drasticno velicinu same baze?
Primjer: ako u 1 tabelu ubacim 130 slika , jpg format, svaka od 10-15 kB, povecaju bazu sa pocetnih 4-5 MB na 56 MB??!?!?!
Tip polja u kome je slika je OLE object, nista ne mijenja stvar i ako se slika samo linkuje i ako se ugradi u tabelu, jednostavno, ne kontam...

Vidio sam jedno rjesenje da se u polju tabele cuva samo putanja do slike kao txt polje, ali ne znam kako onda sliku ucitati da se vidi na Access formi...
 
Slike su jako malene (70x100 tacaka), a otprilike je isto i sa bmp formatom, s tim sto je slika u tom slucaju oko 120-150 kB, a baza je iste velicine (50 MB) ?!?

Cudno...
 
Za Access je karakteristicno da je baza dosta veca nego sto bi morala da bude. Zato u Tools meniju pod "Database Utilities" imas "Compact and Repair Database" sto bi trebalo drasticno da smanji velicinu baze. E sad, nakon ponovnog pokretanja baze i malo duze upotrebe ona ce opet da "naraste", pa ako ti je bitno da uvek bude mala mozes da ubacis u npr. Autoexec makro RunCommand naredbu i izaberes CompactDatabase u samom Command polju. Mada, ako si vec video da je neko to odradio samo preko putanje do fajla onda ne vidim zasto ne "pozajmis" :) to resenje.
 
Imam trogodisnje iskustvo sa Accessom, i znam sve o fragmentovanju zapisa i baze tokom rada, kompaktovanju, itd., ali me je ovo bas iznenadilo...

Baza je kompaktovana, ali je to smanjilo samo za 1 MB, znaci, to ne pomaze...
Ovo rjesenje sa ucitavanjem slike preko putanje fajla sam vidio u klijentu koji je vjerovatno VB ili Delphi a kaci se na Access bazu (u polja Access tabele su upisane putanje svake pojedine slike), ali ne znam kako da izvedem u Accessu da se slika ucitava na formu preko putanje slike?
Zna li neko konkretno nesto o tome?

Ajde, mozgajte malo, valjda vam je kosarka popravila raspolozenje

cheers
(Castim pivom za rjesenje)
 
Iz VB-a ili Delphija je druga prica. Stvar je u tome kako postavis koje elemente na formi i kako se oni "pune" - automatizovano ili "rucno". Access nije takav standard koji bi diktirao bilo sta kod programskih jezika, a oni tretiraju baze preko malo univerzalnijeg interfejsa. Dakle, druge baze (uglavnom) imaju BLOB (binary large objects) vrstu polja, koja moze da sadrzi bilo sta u binarnom formatu - bilo da je slika, zvuk, dokument, itd. Posto je sam tip sadrzaja takvog polja u runtimeu nepoznat, ne moze se ocekivati da se takav sadrzaj automatski prikaze, posto polje na formi nije univerzalni viewer za sve vrste podataka. Za neke mozes da postavis ActiveX kontrolu ili tako nesto, ali sta ako je u polju sacuvan neki format koji nije na klijentovom sistemu ni registrovan ? Za bazu je to i dalje binarni zapis i nista vise od toga.
Dakle, najbolje je napraviti polje na formi, koje bas predstavlja sadrzaj BLOB polja (Image, etc), pa obradis jedan event- kada se pomeri cursor u tabeli, da ucita BLOB polje (ili path/hyperlink ukoliko je polje varchar), te "napuni" taj Image objekat. Mozes da napravis svoju wrapper klasu koja ce to raditi autmatizovano, ali nema elegancije ili fleksibilnosti bez imalo dodatnog kodiranja (access basic, u ovom slucaju).

Nisam bas toliki strucnak za access (koliko za neke druge baze), ali pretpostavljam da baza toliko raste zbog toga sto pokusava da se snimi i neka dodatna OLE informacija o container klasi oko tog binarnog fajla. Kao kad saljes attachment od 500K, pa vidis da je mail ispao 750K. Kako i koliko moze access da iskoristi te dodatne informacije, ne znam, ali prethodno opisani "univerzalni" nacin bi trebao uvek da upali, bez obzira koja je baza i sta je snimljeno u blob polje.
 
Ja sam takođe imao problema sa drastičnim porastom baze, kad se u nju ubacuju slike... i došao sam do dva prihvatljiva rešenja:

1) Ubacivanje slike kao OLE (BMP 256 boja - Microsoft Photo Editor)
2) Preko tekstualne putanje do slike

Za drugi način koristio sam tekstualno polje koje sadrži samo ime slike (bez kompletnog path-a - sve slike sam čuvao u podfolderu foldera baze), da bi smanjio probleme u eventualnom 'seljenju' baze na drugu mašinu.. (do kompletnog path-a dolazis ispitivanjem svojstva CurrentDb.Name).
Da bi se slika prikazivala na formi, potrebno je u sve kritične evente ubaciti kod za prikaz slike u odabranom image box-u.

Kod izgleda otprilike ovako:

Me.Slika1.Picture = Slika

Gde je Slika1 Image box, a Slika, string promenljiva sa kompletnom putanjom do slike koju želiš da prikažeš.
Kritični eventi su recimo 'On Current' forme, ili 'After Update' tekstualnog polja sa imenom slike.

U eventualnoj daljoj razradi funkcije za prikaz slika treba uraditi obradu grešaka (npr. ako je tekstualno polje prazno, ili navedeni fajl ne postoji)
 
Kad se male ruke sloze... cheers

Proradilo je po radax-ovom receptu (broj 2).
Rjesenje ja jako jednostavno (i logicno) samo sto sam ja pokusavao to odraditi sa Object Frame (umjesto sa Image) kontrolom, a Object Frame nema ono ".picture" svojstvo pa mu se i nije mogla pridruziti putanja preko vrijednosti nekog txt polja.
Inace, nakon izbacivanja slika baza je sa 56MB pala na 3,2 MB

Hvala na pomoci :wave;
 
Vrh Dno