Avatar billede -anders- Juniormester
14. oktober 2002 - 16:37 Der er 7 kommentarer og
3 løsninger

Link til filer fra accessdatabase

Hej
Jeg har udviklet en access2000 db som holder styr på alle mine midifiler og sangtekster.
Selve databasen køre faktisk udmærket, men jeg kunne godt tænke mig at der var en anden metode til at linke til filer på c: uden at feltet i db'en er defineret som et hyperlink. Først lidt om db,en:

Jeg har en tabel som hedder "tbl_data" hvor der er defineret 6 felter som hyperlink, felterne hedder "sc55,sc88,sc88pro,va, gm, sangtekst"
I formen har jeg for hvert felt sat en knap som køre en doCmd.EditHyperlink, dette virker perfekt.Når jeg klikker på et felt der linker til en midifil bliver min midifil afspillet, klikker jeg på et felt der linker til en txt-fil bliver min sangtekst vist.

Ude på mit c-drev er der 3 mapper:Database, Sangtekster, Filer, i mappen "database" ligger min mdb-fil, i mappen "filer" ligger mine midifiler, i mappen "sangtekster" ligger mine sangtekster. Alt dette køre perfekt, men spørgsmålet er nu:

Kan man lave disse link uden at benytte sig af hyperlinkfelter, vht. at bruge kode i stedet, og vil det være muligt at gøre det rimeligt nemt for en bruger at oprette nye poster og linke til midifiler og sangtekster i ovenstående mapper.

Jeg har droppet at benytte mig af OLE-felter, da db'en jo vokser til kæmpestørelse.

Mine sangtekster er af typen .txt, mine midifiler (musikfiler) er af typen .mid, er der nogen der kan hjælpe.

mvh Anders.
Avatar billede lasse_buck Nybegynder
14. oktober 2002 - 18:34 #1
De fleste foretrækker at undgå hyperlinks i databasen, men det kræver, at du selv 'håndterer' funktionaliteten af dine links. Prøv at kigge her:
http://www.eksperten.dk/spm/234510
Du skal ligeledes selv håndtere, når der klick'es på dit link.
Avatar billede mugs Novice
14. oktober 2002 - 18:59 #2
Jeg aner ikke hvordan du gør med lydfiler. Men jeg har det du søger blot med billeder. Billederne ligger i en særskilt mappe, og hver gang formularen skifter post, henter Access det tilhørende billede.
Det må være muligt at lave noget lignende med lyde.

Jeg har en lille testdb i Access97, fungerer også i 2000 ig XP. Blot læg din e-mail hvis du er interesseret.
Avatar billede terry Ekspert
14. oktober 2002 - 19:32 #3
Q)    How do I play a Wav/Midi/AVI file from Access?

(A)    Use the following sets of functions.  Note: Make sure you pass the complete file name including the extension.

'****************** Code Start *********************'
Public Const pcsSYNC = 0      ' wait until sound is finished playing
Public Const pcsASYNC = 1    ' don't wait for finish
Public Const pcsNODEFAULT = 2 ' play no default sound if sound doesn't exist
Public Const pcsLOOP = 8      ' play sound in an infinite loop (until next apiPlaySound)
Public Const pcsNOSTOP = 16  ' don't interrupt a playing sound

'Sound APIs
Private Declare Function apiPlaySound Lib "Winmm.dll" Alias "sndPlaySoundA" _
    (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long

'AVI APIs
Private Declare Function apimciSendString Lib "Winmm.dll" Alias "mciSendStringA" _
    (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, _
    ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long

Private Declare Function apimciGetErrorString Lib "Winmm.dll" _
    Alias "mciGetErrorStringA" (ByVal dwError As Long, _
    ByVal lpstrBuffer As String, ByVal uLength As Long) As Long


Function fPlayStuff(ByVal strFilename As String, _
            Optional intPlayMode As Integer) As Long
'MUST pass a filename _with_ extension
'Supports Wav, AVI, MID type files
Dim lngRet As Long
Dim strTemp As String

    Select Case LCase(fGetFileExt(strFilename))
        Case "wav":
            If Not IsMissing(intPlayMode) Then
                lngRet = apiPlaySound(strFilename, intPlayMode)
            Else
                MsgBox "Must specify play mode."
                Exit Function
            End If
        Case "avi", "mid":
            strTemp = String$(256, 0)
            lngRet = apimciSendString("play " & strFilename, strTemp, 255, 0)
    End Select
    fPlayStuff = lngRet
End Function
Function fStopStuff(ByVal strFilename As String)
'Stops a multimedia playback
Dim lngRet As Long
Dim strTemp As String
    Select Case LCase(fGetFileExt(strFilename))
        Case "Wav":
            lngRet = apiPlaySound(0, pcsASYNC)
        Case "avi", "mid":
            strTemp = String$(256, 0)
            lngRet = apimciSendString("stop " & strFilename, strTemp, 255, 0)
    End Select
    fStopStuff = lngRet
End Function

Private Function fGetFileExt(ByVal strFullPath As String) As String
Dim intPos As Integer, intLen As Integer
    intLen = Len(strFullPath)
    If intLen Then
        For intPos = intLen To 1 Step -1
            'Find the last \
            If Mid$(strFullPath, intPos, 1) = "." Then
                fGetFileExt = Mid$(strFullPath, intPos + 1)
                Exit Function
            End If
        Next intPos
    End If
End Function

Function fGetError(ByVal lngErrNum As Long) As String
    ' Translate the error code to a string
    Dim lngx As Long
    Dim strErr As String

    strErr = String$(256, 0)
    lngx = apimciGetErrorString(lngErrNum, strErr, 255)
    strErr = Left$(strErr, Len(strErr) - 1)
    fGetError = strErr
End Function
Function fatest()
Dim a As Long
    a = fPlayStuff("C:\winnt\clock.avi")
    'a = fStopStuff("C:\winnt\clock.avi")
End Function

'****************** Code End *********************'
Avatar billede lasse_buck Nybegynder
14. oktober 2002 - 19:37 #4
Jeg lader mugs og terry føre ordet:
http://www.eksperten.dk/spm/236567
:o)
Avatar billede mugs Novice
14. oktober 2002 - 19:42 #5
Her lader jeg dog mesteren tale uden protester :o)
Avatar billede terry Ekspert
14. oktober 2002 - 19:52 #6
lasse>I was actually concidering a solution using Shellexecute but found this other one instead.

Just out of interest shellexecute can be used for opening any file type in the program which is associated with it.
Avatar billede -anders- Juniormester
15. oktober 2002 - 13:33 #7
Hej, først undskyld den lange svartid på indlægende.
Terry>> Den kode du forslår kan bruges til at bygge videre på ,der skal tilrettes en del, men jeg kan komme videre, derfor 100 points til dig.

mugs>> Jeg vil meget gerne have din eks db tilsendt derfor 90 points til dig, den kan sendes til anjdata@get2net.dk

lasse buck>> 10 points til dig for dit link til et spørgsmål som var relevant.

Til alle: Mange tak for indlægende.

mvh Anders.
Avatar billede terry Ekspert
15. oktober 2002 - 13:42 #8
mange tak :o)
Avatar billede lasse_buck Nybegynder
15. oktober 2002 - 13:59 #9
Takker!
Avatar billede mugs Novice
15. oktober 2002 - 18:36 #10
Tak for point. Eksempel er sendt.
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