Open Object (PDF file) from a button (1 Viewer)

dirty

New member
Local time
Today, 08:51
Joined
Nov 9, 2018
Messages
2
I'm currently in the process of creating a calibration database for my company. In my table of calibration equipment i've added a column for 'OLE Object' which allows me to right click and insert the .pdf file. I've created a query from entering the equipment number which then shows me the datasheet where I can double click to open the pdf.


What i'd like to do is have the 'certificate' button in my form design directly open the pdf file based on the gauge number selected - but I can't work out how to do this.


Any help would be appreciated.
 

Attachments

  • caldatabase.png
    caldatabase.png
    13.5 KB · Views: 38

isladogs

MVP / VIP
Local time
Today, 16:51
Joined
Jan 14, 2017
Messages
18,216
Hi and welcome to AWF
Your post was moderated as new members are only allowed to attach files if they are zipped.
That restriction is lifted after 10 posts

I would strongly recommend you do not attach files to your database as it will rapidly grow in size, slow down and eventually reach the 2GB size limit.
Instead store the files externally and save the file paths in your database
 

Minty

AWF VIP
Local time
Today, 16:51
Joined
Jul 26, 2013
Messages
10,371
I would recommend storing the pdf's in a dedicated shared folder, and simply store the path to the pdf .

There are two reasons for this 1) Database bloat/size - storing documents IN the database leads to its size growing very quickly. 2) Storing the path makes opening the document a very trivial task.

So perhaps a folder \\YourNetwork\CalibrationDocs\12345.pdf where 12345 is your gauge number assuming it's unique? would give you all you need.

EDIT: see what happens when you pause for a Coffee and Kit-Kat - somebody types faster.... ;)
 

dirty

New member
Local time
Today, 08:51
Joined
Nov 9, 2018
Messages
2
Hi and welcome to AWF
Your post was moderated as new members are only allowed to attach files if they are zipped.
That restriction is lifted after 10 posts

I would strongly recommend you do not attach files to your database as it will rapidly grow in size, slow down and eventually reach the 2GB size limit.
Instead store the files externally and save the file paths in your database


I would recommend storing the pdf's in a dedicated shared folder, and simply store the path to the pdf .

There are two reasons for this 1) Database bloat/size - storing documents IN the database leads to its size growing very quickly. 2) Storing the path makes opening the document a very trivial task.

So perhaps a folder \\YourNetwork\CalibrationDocs\12345.pdf where 12345 is your gauge number assuming it's unique? would give you all you need.

EDIT: see what happens when you pause for a Coffee and Kit-Kat - somebody types faster.... ;)




Thanks both.


I have removed the OLE Object from my Table and have replaced it with hyperlinks to the certificates on our network drive.


How would I go about getting the button to open the file from the correct equipment number?


Thanks again,
 

isladogs

MVP / VIP
Local time
Today, 16:51
Joined
Jan 14, 2017
Messages
18,216
Your reply was also moderated though I've no idea why.
There are various methods

I use a function called fHandleFile as it can be used for a multitude of things.
For example:

'Open a file
' fHandleFile "C:\FilePath\MyFileName.pdf",WIN_NORMAL

'Open a folder:
' fHandleFile("C:\TEMP",WIN_NORMAL)

'Call Email app:
' fHandleFile("mailto:bpo@yahoo.com",WIN_NORMAL)

'Open URL:
' fHandleFile("http://uk.yahoo.com";, WIN_NORMAL)

'Handle Unknown extensions:
' fHandleFile("C:\TEMP\TestThis",Win_Normal)

Place the following code in a standard module

Code:
Option Compare Database
Option Explicit

'Code Courtesy of Dev Ashish

'###############################################
'Add PtrSafe - required for 64-bit Office (VBA7)
#If VBA7 Then
        Private Declare PtrSafe Function apiShellExecute Lib "shell32.dll" _
        Alias "ShellExecuteA" _
        (ByVal hWnd As Long, _
        ByVal lpOperation As String, _
        ByVal lpFile As String, _
        ByVal lpParameters As String, _
        ByVal lpDirectory As String, _
        ByVal nShowCmd As Long) _
        As Long
#ElseIf Win64 Then 'need datatype LongPtr
    Private Declare PtrSafe Function apiShellExecute Lib "shell32.dll" _
        Alias "ShellExecuteA" _
        (ByVal hWnd As LongPtr, _
        ByVal lpOperation As String, _
        ByVal lpFile As String, _
        ByVal lpParameters As String, _
        ByVal lpDirectory As String, _
        ByVal nShowCmd As LongPtr) _
        As Long
#Else '32-bit Office
    Private Declare Function apiShellExecute Lib "shell32.dll" _
        Alias "ShellExecuteA" _
        (ByVal hWnd As Long, _
        ByVal lpOperation As String, _
        ByVal lpFile As String, _
        ByVal lpParameters As String, _
        ByVal lpDirectory As String, _
        ByVal nShowCmd As Long) _
        As Long
#End If
'###############################################

Public Const WIN_NORMAL = 1         'Open Normal
Public Const WIN_MAX = 2            'Open Maximized
Public Const WIN_MIN = 3            'Open Minimized

Private Const ERROR_SUCCESS = 32&
Private Const ERROR_NO_ASSOC = 31&
Private Const ERROR_OUT_OF_MEM = 0&
Private Const ERROR_FILE_NOT_FOUND = 2&
Private Const ERROR_PATH_NOT_FOUND = 3&
Private Const ERROR_BAD_FORMAT = 11&

Dim gCount As Long 'CR v4611W

Function fHandleFile(stFile As String, lShowHow As Long)

On Error GoTo Err_Handler

Dim lRet As Long, varTaskID As Variant
Dim stRet As String
    'First try ShellExecute
    lRet = apiShellExecute(hWndAccessApp, vbNullString, _
            stFile, vbNullString, vbNullString, lShowHow)
            
    If lRet > ERROR_SUCCESS Then
        stRet = vbNullString
        lRet = -1
    Else
        Select Case lRet
            Case ERROR_NO_ASSOC:
                'Try the OpenWith dialog
                varTaskID = Shell("rundll32.exe shell32.dll,OpenAs_RunDLL " _
                        & stFile, WIN_NORMAL)
                lRet = (varTaskID <> 0)
            Case ERROR_OUT_OF_MEM:
                stRet = "Error: Out of Memory/Resources. Couldn't Execute!"
            Case ERROR_FILE_NOT_FOUND:
                stRet = "Error: File not found.  Couldn't Execute!"
            Case ERROR_PATH_NOT_FOUND:
                stRet = "Error: Path not found. Couldn't Execute!"
            Case ERROR_BAD_FORMAT:
                stRet = "Error:  Bad File Format. Couldn't Execute!"
            Case Else:
        End Select
    End If
    
    fHandleFile = lRet & _
                IIf(stRet = "", vbNullString, ", " & stRet)
                
Exit_Handler:
    Exit Function
    
Err_Handler:
    MsgBox "Error " & Err.Number & " in fHandleFile procedure : " & Err.Description, vbOKOnly + vbCritical
    Resume Exit_Handler

End Function

'Now all you need to do is call the application with the path of the file and let Windows do the rest.
'This code can be used to start any registered applications, including another instance of Access.
'If it doesn't know what application to open the file with, it just pops up the standard "Open With.." dialog.
'It can even handle URL's and mailto:

'Open a file
' fHandleFile "C:\FilePath\MyFileName.pdf",WIN_NORMAL

'Open a folder:
'  fHandleFile("C:\TEMP\",WIN_NORMAL)

'Call Email app:
'  fHandleFile("mailto:bpo@yahoo.com",WIN_NORMAL)

'Open URL:
' fHandleFile("http://uk.yahoo.com";, WIN_NORMAL)

'Handle Unknown extensions:
' fHandleFile("C:\TEMP\TestThis",Win_Normal)

HTH
 

Users who are viewing this thread

Top Bottom