Avatar billede overchord Nybegynder
17. juni 2003 - 14:30 Der er 13 kommentarer og
2 løsninger

OLE Objeckt - link/embed - Access 97

Hej!
Har en database hvor jeg opbevarer billeder som OLE objekter. Tidligere skulle strukturen af DB'en vaere mobil (eks kopierbar til CD osv.), men nu skal projektet udbygges til at kunne ligge paa en server hvor billederne tilfoejes server-side, mens brugeren linker til back-enden med tabeller og linkede OLE-objekter. Eller det troede jeg da ihvertfald :-)
Jeg bruger en form til at tilfoeje nye billeder, hvor brugere laver drag'n drop med billeder ind paa en boks i formen. Dette OLE-objekt er sat til kun at have linked OLE Type tilladt i den nye version af DB'en.
Men problemet er nu at hvis jeg begynder at slaebe billeder ind vokser stoerrelsen paa DB'en lige saa hurtgit som da billederne blev embedded.
Hvis jeg flytter billederne viser de sig stadig i DB'en hvilket staerkt indikerer at de stadig bliver embedded. Men hvordan hulen kan de det naar det OLE-objekt de bliver placeret igennem kun har linked som tilladt type?
Er der nogle generelle seeting for DB'en jeg har glippet. Er der ikke noget der kan aendres paa tabel-niveau der kun vil tillade linkede objekter istedet?
Avatar billede henrik13 Nybegynder
17. juni 2003 - 14:37 #1
Har du husked at komprimer databasen efter billederne er blevet slettede.
Vh Henrik
Avatar billede overchord Nybegynder
17. juni 2003 - 14:57 #2
Jeps - det har jeg gjort. Saa den gik fra 270mb til 4.3mb. Derefter smed jeg to bmp-filer ind i hvad der skulle vaere den linkede struktur, men DB'en hoppped til 12.6 mb. Efter endnu en komprimering endte den paa 10.6.......
Avatar billede henrik13 Nybegynder
17. juni 2003 - 15:12 #3
Hvis det kan hjælpe dig kan du se hvordan teknolisk institut har løst problemet:
http://erfa.teknologisk.dk/erfaaccess/videnbase/Kodeeksempler/Billeder/default.asp
Vh Henrik
Avatar billede henrik13 Nybegynder
17. juni 2003 - 15:14 #4
Kan den db ikke kører access 97. Konvatere jeg den gerne for dig.
Avatar billede overchord Nybegynder
17. juni 2003 - 15:26 #5
henkrik -> tak for det. Det er en rimelig loesning hvis man skal bruge billeder som ligger paa ens egen computer/taster path til billedet ind.
Men jeg er noed til at bibeholde drag & drop effekten, da db'en skal kunne benyttes uden at skulle til at skrive UNC-stier til serveren osv.
Det kunne maaske lade sig goere vha. en eller anden form for "openfile boks" hvor man tager stien og laegger i en string, men saa forsvinder UNC-stien til fordel for computeren egen mapping af netvaerk.
Jeg forstaar stadig ikke hvorfor OLE-objektet lader til at blive embedded naar jeg har sat det til kun at maate blive linket.
Jeg koerer win2k paa et lamt bruger-nivaeu hvor jeg faar nogle halv-gustne fejl-meldinger omkring OLE naar jeg starter visse programmer men ikke Access!
Jeg kan pt heller ikke viewe jp og gif filer pga fil-associering, men det skulle ikek anedre noget hvis jeg arbejder med et bmp billede.
Avatar billede overchord Nybegynder
17. juni 2003 - 17:10 #6
ok, jeg har nu forsoegt at benytte noget a' la henriks foreslag. Men for at bevare drag'n drop funktionalitet ligger stien til en fil som et hyperlink i tabellen istedet. Dette virker fint naar man traekker et billede ned, og der benyttes automatisk en UNC-sti.
Men naar jeg saa indsaetter et Picture og proever at faa billedet vist ved at string hyperlinket som sti til billedet, virker skidtet ikke:

Dim strPath As String
strPath = Me.path
Me.imgPic.Picture = strPath

hvor me.path er en usynlig tekstboks som indeholder hyperlinket. Men fremfor at bibeholde UNC-stien ser den ud til at blive fordoblet, og billedet vil ikke vises da den ikke kan finde stien:

"Run-time error 2220

Microsoft access can't open the file '\\servernavn\shared\billeddb\mitbillede.tif#\\servernavn\shared\billeddb\mitbillede.tif' "

what in Bob's name is going on?? ( skal nok laegge flere point hvis det bliver en lang loesning)
Avatar billede overchord Nybegynder
17. juni 2003 - 17:13 #7
Skal lige tilfoeje at billedet aabner fint hvis jeg klikker paa hyperlinket, men jeg skal have billedet vist i selve formen!
Avatar billede mugs Novice
17. juni 2003 - 17:49 #8
Jeg har ikke tid til lige nu, at nærlæse indlæggende, men kan forstå at en del af problemet er at "omsætte" en del af en hyperlink til en tekststreng. Jeg indsætter denne kode i en formular:

Me.Kommandoknap20.HyperlinkAddress = LaunchCD(Me)
Me.felt1 = Me.Kommandoknap20.HyperlinkAddress
'Hvis der er et billede, så hvis det ellers et tomt felt
If Not IsNull(Me!felt1) Then
Me!Billede.Picture = Me.felt1
Else
Me!Billede.Picture = ""
End If

Og modulert ser således ud:

Option Explicit
Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _
"GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Private Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type

Function LaunchCD(strform As Form) As String
Dim OpenFile As OPENFILENAME
Dim lReturn As Long
Dim sFilter As String
OpenFile.lStructSize = Len(OpenFile)
OpenFile.hwndOwner = strform.Hwnd
sFilter = "All Files (*.*)" & Chr(0) & "*.*" & Chr(0) & _
"bmp Files (*.BMP)" & Chr(0) & "*.BMP" & Chr(0)
OpenFile.lpstrFilter = sFilter
OpenFile.nFilterIndex = 1
OpenFile.lpstrFile = String(257, 0)
OpenFile.nMaxFile = Len(OpenFile.lpstrFile) - 1
OpenFile.lpstrFileTitle = OpenFile.lpstrFile
OpenFile.nMaxFileTitle = OpenFile.nMaxFile
'OpenFile.lpstrInitialDir = "c:\company shared folders\relief"
OpenFile.lpstrInitialDir = "D:\VBA funktioner\VBA"

OpenFile.lpstrTitle = "Vælg en fil og tryk på Åbn."
OpenFile.flags = 0
lReturn = GetOpenFileName(OpenFile)
If lReturn = 0 Then
MsgBox "Manglende fil!", vbInformation, _
"Du har ikke valgt en fil fra Stifinderen."
Else
LaunchCD = Trim(OpenFile.lpstrFile)
End If
End Function

Koden åbner stifinderen hvor brugeren vælger et billede, der ligger udenfor databasen.

Koden er oprindelig skrevet i Access97, men fungerer også i 2000 / xp. Jeg skal gerne senere idag sende en konverteret version. Blot læg din e-mail.
Avatar billede overchord Nybegynder
17. juni 2003 - 18:06 #9
hey mugs
Jeps, men at faa billedet ind som et hyperlink var egentligt ikke problemet laengere (jvf. 17/06-2003 17:10:34) da man kan drag'n drop filen for at faa et hyperlink, som agiver UNC-stien fint.
Problemet ligger i at konvertere dette link til en streng bagefter - naar man skal se billederne i en form. Hyperlinket ligger i tabellen, men kan aabenbart ikke konverteres direkte til string - for saa bliver stien/linket fordoblet med"#" i midten.
Alternativet kan selvf. blive at bruge din metode hvis jeg ikke kan faa drag & drop til at virke, men det skal helst vaere en relativt nemt og hurtigt metode som lader brugeren tilfoeje billeder.
Databasen er designet til at indeholde taksonomisk information om en raekke marine arter (smaa dyr), og man skal vaere istand til at smide billeder ind under hver art naar man har taget et digitalt billede via ens mikroskop. Disse skal derfor helt kunne behnadles hurtigt da dette kun er et "side-projekt" til hoved-analysen :-)
Avatar billede mugs Novice
17. juni 2003 - 18:15 #10
Jeg gentager: Jeg har ikke haft tid til at nærlæse indlæggene, så måske ved jeg slet ikke hvad jeg taler om.

Men så vidt jeg kan se, konverterer "min" kode ("eller hvor jeg nu har stjålet den fra" netop en hyperlink til en tekststreng. Der er et tekstfelt i tabellen der oberført til formularens OnCurrent event henter billedet fra billedmappen. Hvis brugeren så vil skifte billede, trykkes blot på en kommandoknap, og stifinderen å¨bner i en default mappe for valg af billede. Denne adresse overføres så til formularens tekstfelt, som herefter angiver hvor det nye billede skal hentes.
Avatar billede overchord Nybegynder
17. juni 2003 - 21:26 #11
Ja, det goer den godt nok, men jeg er ikke helt 100 paa at jeg forstaar tricket i koden....
OpenFile.lpstrFile = String(257, 0)
...
LaunchCD = Trim(OpenFile.lpstrFile)

hvad foregaar der lige der?  Min string-length er varaible pga filnanve..
Avatar billede mugs Novice
17. juni 2003 - 21:36 #12
Jeg forstår heller ikke det hele i koden. Det var et spørgsmål på e, der handlede om at indsætte billeder der ligger udenfor db. Det svarede jeg på, hvorefter der kom et andet spørgsmål der gik ud på at indsætte et valgfrit, eller at skifte et eksisterende billede via stifinderen. Jeg søgte på e, og fandt denne kode der åbner stifinderen.

Og siden har jeg ikke beskæftiget mig med koden, da jeg ikke skal bruge den til noget.

Bortset fra idag, da jeg synes den kunne relatere til dit spørgsmål
Avatar billede overchord Nybegynder
18. juni 2003 - 01:26 #13
Det tror jeg ogsaa den goer, jeg mener bare at den arbejder med at fastsat laengde af string, hvilket ikke er saa godt i mit tilfaelde. Hmmm... eftersom jeg ved at strengen dobles og at der er et "#" i midten kunne jeg vel traekke end fra, og tage halvdelen...
noget i retning af:

strHlink = me.Hyperlinkthingy

strHlink = left(strHlink,((strhlink-1)/2))

Det vil jeg lige afproeve imorgen naar jeg kommer paa arbejde, og laegger en post med hvordan det gik.
Avatar billede overchord Nybegynder
18. juni 2003 - 12:39 #14
Jeps det virkede! Det er ikke en optimal loesning, da det bliver svart svaert af verificere eller "previewe" billederne paa samme tidpunkt som de bliver lagt ind, men det burde kunne virke alligevel.
Saa bare for reference:

Jeg skifter fra et OLE-objekt, som tidligere blev brugt til at opbevare billederne direkte i databasen i en anden version, til hyperlink til billederne.
Problemet med hyperlink var at jeg fik en "dobbeltsti" ud naar jeg proevede at konvertere det til en streng der kunne bruges som sti-inidkator for mit billede paa en formular.
For at omgaa dette bliver streng-udtrykket istedet:
strHlink = left(me.path, (len(me.path)-2)/2)
hvor me.path indeholder hyperlinket, og strHlink bliver stien til mit billede
Tak til baade Henkrik og mugs for hjaelpen, i faar begge point :-)
Avatar billede mugs Novice
18. juni 2003 - 16:31 #15
"svaert af verificere eller "previewe" billederne paa samme tidpunkt som de bliver lagt ind"

Når jeg skifter et billede kommer det omgående på skærmen. Må jeg sende min testdb, der er lavet efter princippet fra Teknologisk Institut.
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