Discussion:
Wstawianie i zapisywanie jpg
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
r***@wp.pl
2006-08-26 14:56:59 UTC
Permalink
Witam wszystkich

Muszę zrobić coś takiego:
W bazie access-owej zawierającej filmy, poprzez formularz wprowadzam
dany film, chcę dołączyć do niego jpg (zdjęcie z okładki). Po
kliknęciu na przycisk ma pojawić się okno z plikami jpg, wybieram
plik pokazuje mi się w formularzu, a następnie chciałbym aby cały
rekord został zapisany do tabeli. Jak macie jakieś pomysły chętnie
skorzystam.
pozdr

Rad
Krzysztof Naworyta
2006-08-26 16:06:41 UTC
Permalink
Juzer Użytkownik <***@wp.pl> napisał

| Muszę zrobić coś takiego:
| W bazie access-owej zawierającej filmy, poprzez formularz wprowadzam
| dany film, chcę dołączyć do niego jpg (zdjęcie z okładki). Po
| kliknęciu na przycisk ma pojawić się okno z plikami jpg, wybieram
| plik pokazuje mi się w formularzu, a następnie chciałbym aby cały
| rekord został zapisany do tabeli. Jak macie jakieś pomysły chętnie
| skorzystam.


W zasadzie powinienem Cię odesłać do archiwum ...

Ale może w formie pewnego podsumowania tematu ...

Są w zasadzie trzy sposoby na manipulowanie obrazkami w mdb:

1. Dowolny plik graficzny wstawiamy do pola OLE, przy pomocy interfejsu
"wstaw obiekt", bądź programowo, poprzez metody związanej ramki obiektu:
Ole.Verb, Ole.Action ...

zalety:
- Całą obsługę wyświetlania czy edycji takiego obrazka (czy, w ogólności,
dowolnego obiektu OLE) bierze na siebie access.
Wszystko co musisz zrobić Ty, to postawić na formularzu związaną ramkę
obiektu.
Jedyny prosty sposób na wyświetlanie różnych obrazków w kolejnych
rekordach, na formularzu ciągłym.

wady: póki co taki przykładowy skompresowany jpg jest dekompresowany do
DIP, oraz obudowywany dodatkowymi informacjami.
W wyniku czego baza mdb puchnie w zastraszającym tempie.
Paradoksalnie wybór obiektu połączonego (zamiast obiektu osadzonego)
powoduje jeszcze większą ilość informacji zapisaną w rekordzie (!)

Bodajże zmienia się to dopiero w wersji a'2007 - głównie dzięki nowemu
formatowi pliku, który pozwala zapisywać w bazie obrazki w ich oryginalnym
formacie ...

2. Zamiast zapisywać w tabeli pliki, zapisuje się jedynie ścieżki do tych
plików.
Wyświetlanie na formularzu czy raporcie odbywa sie poprzez ładowanie pliku
do kontrolki Image, poprzez manipulację jej właściwością Picture
(w OnCurrent formularza lub w OnFormat sekcji raportu)

zalety:
- nic nie puchnie
wady:
- możliwość "rozszycia" między ścieżkami zapisanymi w tabeli a
systemem plików na dysku
- konieczność manipulacji ścieżkami względnymi jeśli chcemy bazę
przenosić między komputerami czy katalogami
- trochę więcej programowania ...
- praktycznie niemożność wyświetlenia różnych obrazków w formularzu
ciągłym.

3. Próba połączenia zalet pkt. 1 i pkt. 2: Do tabeli do pola LongBinary
(Obiekt OLE/(lub Memo)) wprowadzamy obrazek "jak leci", jego bajty,
poprzez zwyczajny edit obiektu recordset.

W ten sposób wszystkie obrazki mamy w pliku mdb, baza rośnie o taki
rozmiar jak rozmiar pliku jpg, czyli stosunkowo niewiele.
Wada: czegoś takiego nie wyświetli Ci ramka OLE. Access nic nie wie z czym
w polu ma do czynienia.
Podobnie jak w pkt. 2, aby obrazek wyświetlić w Image czy ramce OLE,
musisz w OnCurrent formularza taki obrazek samodzielnie wypakować na dysk
(np. do katalogu TEMP) i załadować:
Image0.Picture = "C:\temp\obraz.jpg"

Sposób 3 wymaga nieco większej ilości programowania, o dodatkowe metody
czytania i zapisu pliku (Open ... For Input, Open ... For Output)
Ale bez przesady.

Podsumowując:
Metoda nr 1 dla plików skompresowanych, jest praktycznie nieakceptowalna
... Wszystko zależy od ilości tych obrazków i ich wyjściowej wielkości.
Dla dobrych jpg pochodzących z aparatu cyfrowego dekompresja idzie w
dziesiątki czy setki MB, a to powoduje, że w pojedynczym pliku mdb (max.
2GB) wiele zdjęć nie pomieścisz (góra kilkadziesiąt). A gdzie dane ?

Najpopularniejsza jest metoda 2. I chyba nie bezpodstawnie, bo baza
"puchnie" jedynie o długość stringu ze ścieżką, a ilość operacji
zapisu/odczytu na/z dysku jest wielokrotnie mniejsza niż w metodzie 3.

Zaletą metody nr. 3 jest to, ze bazę można udostępnić w sieci, a
"wypakowywanie" jpg z tabeli na dysk lokalny będzie dużo oszczędniejsze
niż ciągnięcie po tej sieci całego DIP'a (jak w met. 1) czy też mniej
problemowe niż zapewnienie wspólnego nazewnictwa do ścieżki sieciowej ze
wszystkich komputerów klienckich (jak w pkt. 2)
--
KN
(MVP, M$ Office Access)

archiwum grupy:
http://groups.google.pl/advanced_group_search
(grupa: pl*msaccess)
Loading...