06. oktober 2005 - 11:15 Der er 19 kommentarer og
2 løsninger

Ændre stien i OLE-objeter (Billeder)

Hej Eksperter,

Jeg har det klassiske problem med at skulle gemme nogle billeder i Access. Hvis jeg embedder billederne i tabellen, så vil 10 billeder á ca 100K få databasen til at fylde 40 MByte :o(

Og da der skal være 100-200 billeder i databasen, så har jeg behov for en anden model. Jeg ønsker derfor at linke til billederne. Men da databasen skal distribueres, skal jeg kunne ændre stien til billederne.

Så jeg skal kunne opdatere alle min poster i tabellen, således at OLE-objektet ikke længere pejer på samme mappe.

Men jeg kan simpelthen ikke finde nogle oplysninger om dette!
Hvis det var en ubundet objektramme på en formular, kan jeg skifte stien, da der er en egenskab til det.
Men på tabelniveau er der ikke noget tilsvarende.

Et eks:
Jeg har 200 poster, hvor der er linket til 200 billeder i mappen C:\Dokumenter\Billeder

Herefter flyttes hele databasen samt billederne til et nyt miljø, hvor billederne placeres i X:\database\mindatabase\billeder

Vha VBA-funktion eller opdateringsforespørgsel skal jeg således ændre stien i hver post.

Nogle forlsag?

Hvis nogen har hørt/set om en løsning, som koster lidt penge, har det også interesse (men der gives kun point, hvis jeg synes at pris og kvalitet hænger sammen)
Avatar billede arne_v Ekspert
06. oktober 2005 - 11:31 #1
Ikke en løsning til det du spørger om.

Men har du overvejet at:
  - gemme de rå bytes + filnavn uden dir
  - i Access vise dem med extract til TEMP og ShellExecute

Ingen OLE embedded overhead - en fil på 100KB fyder 100KB.

Ingen sti problemer.

Nem at tilgå via web interface på et senere tidspunkt, hvis det måtte
ønskes (ikke helt usandsyneligt idag).

Langt nemmere at portere til f.eks. VB.NET mod MSDE, hvis det en dag
måtte ønskes.
Avatar billede ldanielsen Nybegynder
06. oktober 2005 - 12:01 #2
En anden løsning er at du gemmer filnavnet uden sti, og så har en Tabel med indstillinger, hvor du har billedstien i et felt.

Du kan så når programmet starter checkke om den forventede mappe findes, og ellers bede brugeren om at angive hvor billederne findes.

Du kan også lave et installationsprogram der kopierer tingene ind og registrer placeringen i tabellen
06. oktober 2005 - 12:12 #3
Tak for jeres alternative forslag.

Men jeg søger ikke andre løsninger end den, som jeg spørger om.

Sagen er, at der skal laves en fortløbende formular i Access, hvorpå billederne vises. Derfor er det nødvendigt at have bundet billederne til et OLE-objekt, da man ellers ikke kan vise dem i en fortløbende formular (hvis du har et ubundet felt, som du styrer vha VBA, så vil alle poster skifte, når du blot skifter stien på én objektramme/billede)

Jeg kan også omformulere spørgsmålet: Hvordan indsætter jeg et billedet i et OLE-objekt vha VBA?
Avatar billede terry Ekspert
06. oktober 2005 - 12:46 #4
Hi Thomas
I think I have some code which can do this

"Jeg kan også omformulere spørgsmålet: Hvordan indsætter jeg et billedet i et OLE-objekt vha VBA?"

if your interested then I can send it this evening

mvh
Terry
Avatar billede jind Nybegynder
09. oktober 2005 - 12:11 #5
Hvad med at give brugeren mulighed for at indtaste stien i en formular som er baseret på tabel_Sti

DErnæst skal du blot hente stien (billedsti) fra tabel_sti og sætte den ind før \billede.jpg i din billedtabel
Nu ligger billedet nok som fx C:\accessDB\billeder\Billede14.jpg

Du kan så lave en kode som gemmer de sidste fx 14 tegn som en variabel fx X.
Alternativt indtil et "\"
Dernæst henter du billedsti fra et recordset

sætter
sti = billedsti & X
Opdaterer nu sti til din billedtabel
voila
09. oktober 2005 - 23:00 #6
Terry-> Den kode, vil jeg MEGET gerne se :o)
Du må meget gerne sende mig et eksempel, tak :o)

Jind-> Alt det har jeg helt styr på. Undtagen din sidste sætning: "Opdaterer nu sti til din billedtabel". Det er lige præcis det, som jeg forespørger! HVORDAN opdaterer jeg stien i et OLE-objekt?
Avatar billede terry Ekspert
10. oktober 2005 - 08:22 #7
Avatar billede terry Ekspert
10. oktober 2005 - 08:31 #8
This maye be waht your looking for Thomas

http://www.jamiessoftware.tk/imagealbums/ia_developers.html
10. oktober 2005 - 12:38 #9
Hej Terry,

Jeg kan ikke få Microsofts eksempel til at virke. Den indsætter et eller andet i tabellen, men jeg kan ikke se det fra Access.

Kan du selv indsætte et billede vha ReadBLOB-funktionen, og derefter få det vist i en Access-formular?`


Jamie's Imagealbum lader heller ikke til at kunne gøre det rigtigt. Jeg tror bare, at den gemmer stien og så viser det i en singlecolumn-formular, hvor det jo ikke er noget problem.
Avatar billede arne_v Ekspert
10. oktober 2005 - 12:41 #10
BLOB svarer til hvad jeg snakkede om - gemme rå bytes ikke OLE objekt
Avatar billede terry Ekspert
10. oktober 2005 - 13:00 #11
An OLE object contains other information besides the actual picture. I seem to recall that there is a number of bytes at the start of the file.

So you could try the following.

Using the same picture as the source, first put the picture in an OLE object as you normally do.

Now save the picture to disk using WriteBLOB

Now compare these two files, and I think you will see that the OLE object contains extra bytes at the start.

Not sure you can use that for much at all, but if you can append these bytes first and then the picture you may have what your after.
Avatar billede terry Ekspert
10. oktober 2005 - 14:14 #12
Just had a play around with this, and it doesnt seem to work as I had hoped.

I was hoping to be able to be able to save an OLE objecting using WriteBlob and then load it again expecting it to work as an OLE object again. That doesnt seem to be the case.
10. oktober 2005 - 14:15 #13
Hej Terry,

I eksemplet, som følger med imdlæses en fil, hvorefter der genereres en nøjagtig kopi med et andet navn. Metoden er at benytte ReadBLOB og WriteBLOB, således filen har været gennem OLE-objektet.
Og de 2 filer er fuldstændig identiske (bortset fra oprettelsesdatoen)

Så funktionerne gemmer dataene godt nok, men det er bare ikke læseligt for Access selv.
Jeg har prøvet både med billeder og dokumenter

Arne->De rå data skal vel gemmes i et OLE-felt? Hvordan vil du ellers vise billederne i en formular (fortløbende)?
Avatar billede terry Ekspert
10. oktober 2005 - 14:32 #14
Not sure I understand that Thomas "I eksemplet, som følger med imdlæses en fil..."

what example?
Did you purchase the developer version or have youdownloaded the demo?

As I understand it, an OLE object can be used for storing binary (BLOB) files and and also OLE images. When you place a file in as an OLE object you choose the program which is used to display the object. And maybe also a link to the actual object.
I would have thought that this extra information will be stored in the file too, so that if it was saved using WriteBlob then the same file could be loaded againg using ReadBlob and it would be displayed as an OLE image again. But it desont seem to work.

If you have JPG file and load this using ReadBlob then it doesnt contain the OLE information, so I can undertand that it cant be displayed as an OLE object.
Avatar billede terry Ekspert
10. oktober 2005 - 14:35 #15
I can remember (years ago) that there was a question in Access which mentioned that it was necessary to remove a number of byes from the OLE object before it could again be viewed as the original file, for example a JPG. But I dont seem to be able to find the question :o(
10. oktober 2005 - 15:05 #16
Hej Terry,

Med "I eksemplet, som følger med imdlæses en fil..." mener jeg bare det eksempel, som følger med i Microsoft's kode. Der ligger en procedure, som hedder "Copyfile" og som indlæser en fil og gemmer den som ny fil (via OLE-objektet).
12. oktober 2005 - 12:35 #17
Hmm, jeg fandt ikke nogen løsning, men har nu valgt et helt andet miljø at lave programmet i.

Terry skal dog have lidt point for et nyttigt link, som jeg godt kan se lidt andre muligheder i.
Avatar billede terry Ekspert
12. oktober 2005 - 16:27 #18
thanks Thomas

What are you going over to, .NET?
12. oktober 2005 - 16:33 #19
ikke mig!
Men en af mine konsulenter :)
Avatar billede terry Ekspert
12. oktober 2005 - 18:13 #20
sounds like a hard life you have there Thomas :o)
12. oktober 2005 - 21:23 #21
Jeg arbejder på det :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester