By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
437,913 Members | 1,305 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 437,913 IT Pros & Developers. It's quick & easy.

Storing BLOBs

P: 9
I am using some code developed by Alan Warren and modified by Armund Dezii. Using MS Access as a front end to an SQL Server backend, it allows me to import graphic files and store them in SQL Server as BLOBs. I can pass along all the code if desired.

This works fine but I would also like to import PDFs and DOCX files. When I modify the line below by adding *.pdf I get an error, see attached screenshot.
Expand|Select|Wrap|Line Numbers
  1. .Filters.Add "Images", "*.jpg; *.jpeg; *.tiff; *.gif; *.bmp; *.png; *.pdf; *.ico"

Attached Images
File Type: png Untitled picture.png (13.4 KB, 309 views)
3 Weeks Ago #1

✓ answered by ADezii

but I thought jumping in here quickly may prove helpful.
Always welcome and always helpful!

IMHO, Extracting Binary Data from an OLE Object Field, saving it to a File, then loading that File (*.pdf, *.doc, *.docs) into a Web Browser is very problematic to say the least. I arrived at another solution which you may/may not like. The attached Demo contains three Records, a *.bmp, *.pdf, and *.doc. As you navigate thru them Code in the Current() Event of the Form will load preset Graphic Images into the Image Control. As far as the Word Documents and PDFs, an Open File Command Button will appear. Clicking on the Command Button will then Open the File via the FollowHyperlink Method of the Application. I strongly feel that going the Web Browser route will lead to nothing but problems. Give the Demo a shot and see what you think.

Share this Question
Share on Google+
25 Replies


NeoPa
Expert Mod 15k+
P: 31,530
Hi Ordnance1. Welcome to Bytes.com.

I would check more thoroughly for you, but the code you've included is either missing the start of the line or it's part of a With statement that you haven't included. That makes checking what it claims to support very difficult.

Having said that, I would have thought that the error message explains the situation fairly clearly. That may be because I'm possibly more used to intrerpreting them than most, but it seems pretty clear that whatever object you are using doesn't support a PDF format file. It isn't the line of code that is causing the problem (Remember Before Posting (VBA or SQL) Code.) but trying to execute that line with the file selected. Had it been the line itself then you'd not have got as far as selecting the file so its name would not have appeared in the error message.

NB. It seems a little-known fact that you can copy an error message pop-up box to the clipboard and it will paste as decently formatted text. This is always a good idea as it saves you the trouble of posting pictures and takes up less space. You've done well to post the picture as the info there made the whole situation much clearer. It's just that there is an easier way - that now you know about :-)
3 Weeks Ago #2

NeoPa
Expert Mod 15k+
P: 31,530
I suppose I should have added that it *MAY* be possible to get around this in a limited way by renaming the file (The Name statement in VBA.) before selecting it. That said, I can't tell without checking (which I'm not able to do without knowing the object you're working with and your version of Access) whether it determines the type of file by the extension or the contents. If it's the former then that should work, but if the latter then probably not.

I'll leave you to play around with that if you're interested.
3 Weeks Ago #3

twinnyfo
Expert Mod 2.5K+
P: 3,288
There is also the option of, rather than importing the files as BLOBs, to simply copy the files to a networked folder, and rather than saving the file itself, save the location of the file in a text field. This allows you to acces the file at any time (or modify it, if need be) simply by referring to its location.

Just an option--but I know that does not directly respond to your question.
2 Weeks Ago #4

ADezii
Expert 5K+
P: 8,652
  1. The *.pdf Files should never be incorporated into the Graphic Images Filter, but should be independent of it. In the sample Code below, there are three Filters, namely: Graphic Files, Word Documents, and PDFs (Portable Document Format).
    Expand|Select|Wrap|Line Numbers
    1. 'Must 1st set a Reference to the Microsoft Office XX.X Object Library
    2. Dim dlgOpen As FileDialog
    3. Dim strFile As String
    4.  
    5. Set dlgOpen = Application.FileDialog(msoFileDialogFilePicker)
    6.  
    7. With dlgOpen
    8.   .AllowMultiSelect = False
    9.   .ButtonName = "Import Graphic"
    10.   .Title = "Browse for Graphic Files"
    11.   .InitialView = msoFileDialogViewLargeIcons
    12.   .InitialFileName = "C:\"
    13.   .Filters.Clear
    14.     .Filters.Add "Images", "*.jpg; *.jpeg; *.bmp; *.ico"
    15.     .Filters.Add "Word Documents", "*.doc; *.docx"
    16.     .Filters.Add "Portable Document Format", "*.pdf"
    17.       If .Show <> -1 Then Exit Sub      'Nothing selected
    18.         strFile = .SelectedItems(1)     'File Selected
    19. End With
  2. IMHO, *.pdfs should, and must, be handled differently from the Graphic Files. This is easily accomplished by checking the Extension of a File(s) once selected and taking the appropriate action.
  3. My initial thought is that the contents of the *.pdf Files can be placed into a Byte() Array and written directly into the OLE Object Fields. In this manner, they will co-exist among the BLOBs.
  4. I am not 100% sure on this approach, but if you are interested, and not in a rush, I'll see what I can come up with.
2 Weeks Ago #5

P: 9
Thanks for taking the time to reply. I altered my code to reflect your changes but I still get the same error that I was getting in my original post. I did notice that as soon as I selected a PDF file the Open button changed to Import Graphic.

I am creating this db for my brother who is on the road when he uses it, and connects through a dsnless connection. I have to admit I am not an IT pro but a retired sailor and retired public transit dispatcher who does this to keep my mind active. So please excuse any ignorance on my part. I greatly appropriate people like you and the many others on these forums that so freely give of your time and expertise.

Expand|Select|Wrap|Line Numbers
  1. Private Sub btn_LoadImage_Single_Click()
  2. Dim strFullPath As String
  3.     'Sets the form to a new record. Prevents over writing the current record
  4.         DoCmd.GoToRecord , , acNewRec
  5.  
  6.             'Sets the 2 textboxes to blank so that nothing has to be entered
  7.                 Me.txt_BlobTitle = ""
  8.                 Me.txt_BlobDescription = ""
  9.  
  10.     'Must 1st set a Reference to the Microsoft Office XX.X Object Library
  11.         Dim dlgOpen As FileDialog
  12.         Dim strFile As String
  13.         Set dlgOpen = Application.FileDialog(msoFileDialogFilePicker)
  14.         With dlgOpen
  15.           .AllowMultiSelect = False
  16.           .ButtonName = "Import Graphic"
  17.           .Title = "Browse for Graphic Files"
  18.           .InitialView = msoFileDialogViewLargeIcons
  19.           .InitialFileName = "C:\"
  20.           .Filters.Clear
  21.             .Filters.Add "Images", "*.jpg; *.jpeg; *.bmp; *.ico"
  22.             .Filters.Add "Word Documents", "*.doc; *.docx"
  23.             .Filters.Add "Portable Document Format", "*.pdf"
  24.               If .Show <> -1 Then Exit Sub      'Nothing selected
  25.                 strFile = .SelectedItems(1)     'File Selected
  26.     End With
  27.  
  28.         With Me
  29.           .ImageX.Picture = strFile
  30.         End With
  31.  
  32.         Set dlgOpen = Nothing
  33.             On Error GoTo Err_btn_LoadImage_Single
  34.         Dim strPath As String
  35.  
  36.         If Nz(Me.ImageX.Picture, "") = "" Then
  37.           Exit Sub
  38.         End If
  39.  
  40.         If IsNull(Me![txt_BlobTitle]) Then
  41.           MsgBox "You must enter a value for Item Name before the Record can be saved", _
  42.                   vbExclamation, "Missing Item Name"
  43.            Me![txt_BlobTitle].SetFocus
  44.             Exit Sub
  45.         ElseIf IsNull(Me![txt_BlobDescription]) Then
  46.           MsgBox "You must enter a value for Item Description before the Record can be saved", _
  47.                   vbExclamation, "Missing Item Description"
  48.            Me![txt_BlobDescription].SetFocus
  49.             Exit Sub
  50.         End If
  51.  
  52.         DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
  53.  
  54.         strPath = Me.ImageX.Picture
  55.  
  56.         ImgCusBLOB.Picture = getBLOBFromFile(Me.BlobInventory_ID, strPath)
  57.  
  58. Exit_btn_LoadImage_Single:
  59.  
  60.  
  61.         TempVars!Test = Me.ImageX.Picture
  62.  
  63.  
  64.         Kill TempVars!Test
  65.  
  66.           Exit Sub
  67.  
  68. Err_btn_LoadImage_Single:
  69.           MsgBox Err.Description, vbExclamation, "btn_LoadImage_Single_Click()"
  70.             Resume Exit_btn_LoadImage_Single
  71.         End Sub
2 Weeks Ago #6

ADezii
Expert 5K+
P: 8,652
PDFs can actually be placed in an OLE Object Field, as a Binary Stream (BLOB), in the same exact manner as the Graphic Images are. The only differences are in the implementations. Obviously *.pdfs cannot be placed into Image Controls as the Graphic Files are and there are always the issues of Enabling/Disabling Controls for the Graphic Images, Editing the Graphic Images, etc. I am finishing up a Demo that will illustrate how *.pdfs can be dynamically loaded into an OLE Object Field paralleling your Code. You can then incorporate it into the existing Code or execute it independently. Be patient, and I'll Upload the Demo as soon as it's complete.
2 Weeks Ago #7

ADezii
Expert 5K+
P: 8,652
  1. Here is the Demo that I was referring to. It consists of a Table (tblDemo) with 6 Records. These Records contain *.pdfs stored as BLOBs in an OLE Object Field along with a Primary Key,File Path, and Extension.
  2. I won't go into a detailed explanation of the Coding but simply state the general concept.
  3. Click the Put Into BLOB Field Command Button to open the File Dialog Box filtered for certain Graphic Files as well as *.pdfs which will be the Default Filter. Select a *.pdf, then the Load File Command Button. The *.pdf will now be stored in the OLE Object Field as a BLOB.
  4. Click the Load BLOB Into File Command Button to extract a specific *.pdf File based on the Primary Key. You will then be given an Option to Open that File.
  5. If you select a Graphic File, you will simply be given a message stating that the Demo does not support it at this time.
  6. Have fun, and should you have any questions, feel free to ask.
P.S. - The System will not allow me to Attach this File even though it is in Zip Format and below the Maximum Size allowed. Will try again at some point. Got it now, but only a single File in tblDemo.
Attached Files
File Type: zip Write PDF to BLOB.zip (176.9 KB, 4 views)
2 Weeks Ago #8

P: 9
I have spent about the last 14 hours working with your sample and merging it with my original code and can now import graphics and pdf's. Just wondering my graphics display in my ole control but not my pdf's. Should I be able to get them to display?

After I get the pdf's to display (if that is possible I will move on to doc and docx files

Either way I am burned out for one day. I do want to thank you for your help.
2 Weeks Ago #9

ADezii
Expert 5K+
P: 8,652
  1. Previously, I hinted on the problems that you may be having storing Graphic Images, Word Documents, and PDFs as Binary Data in an OLE Object Field.
  2. I created another 'No Frills' Demo that should avoid this problem. You can click on the Put File Into BLOB Field Command Button to Open a File Dialog that is filtered for Graphic Images (*.jpg, *.jpeg, *.bmp, *.ico), Word Documents (*.doc, *.docx), and Portable Document Format (*.pdf). You can add addition Files and File Types at any time.
  3. Once you select a File, it is written as a Stream of Binary Data into a BLOB ([BLOB]) Field along with basic information.
  4. To retrieve and optionally View these BLOBs, Select the File Type from the Option Group and the Combo Box will list all Files of that Type.
  5. Select a File from the Combo Box and the Data will be written as the Original File Name to the TEMP Folder with the appropriate Extension. If the TEMP Folder does not exist, it will be created.
  6. You will then be given the option to View the extracted BLOB. Should you elect to View the File, the Server Application registered for the File Extension in the Registry will Open it. This is accomplished by use of the ShellExecute() API Function.
  7. For the sake of brevity and simplicity, no provision is made for Error Trapping and removal of the extracted Files.
Attached Files
File Type: zip Write PDF to BLOB_2.zip (1.13 MB, 3 views)
2 Weeks Ago #10

NeoPa
Expert Mod 15k+
P: 31,530
Hi guys.

Although this thread is not going the normal way threads are expected to go, so will not be great as far as a searchable question, I can see that you're both involved and making good progress. Great attitude all round so I'm very happy to give my seal of approval and allow this to continue just as it is.

I can see a lot of time and effort has gone into it already and lots of progress is being made by the OP. Both parties seem happy to be involved so the best of luck to you both :-)

-Ade (Admin).
2 Weeks Ago #11

ADezii
Expert 5K+
P: 8,652
Thanks NeoPa, for letting us proceed. I do understand that this Thread is a little unorthodox, but integrating multiple File Types and storing them as Binary Objects is a little tricky, at least for me. As you already have stated, the OP (ordnance1) has invested a lot of time and effort into this Project and I am happy to assist in any way I can. Thanks again!
2 Weeks Ago #12

P: 9
Thanks to both of you
2 Weeks Ago #13

ADezii
Expert 5K+
P: 8,652
I had the opportunity to look at your DB and it appears to be coming along well. I see that you had no Code for the Bulk Import Operation, so I took the liberty of creating it for you. When performing a Bulk Import, a Folder Dialog Box will Open, and once a Folder is selected you will be prompted to Import <X> number of Files from <Folder Name>. If you choose Yes, then all Files in that Folder will be imported and a verification Dialog will appear. The Code is listed below as well as the helper Function to determine the number of Files to be Imported. The Code does NOT check the File Extensions in that Folder, that will be up to you.
Expand|Select|Wrap|Line Numbers
  1. Dim strFile As String
  2. Dim intCtr As Integer
  3. Dim rstBLOB As ADODB.Recordset
  4. Dim mstream As ADODB.Stream
  5. Dim strFolder As String
  6. Dim dlgOpen As Office.FileDialog
  7. Dim intResponse As Integer
  8. Dim intCtr2 As Integer
  9. Dim lngNumOfFiles As Long
  10.  
  11. Set dlgOpen = Application.FileDialog(msoFileDialogFolderPicker)
  12.  
  13. With dlgOpen
  14.   .AllowMultiSelect = False
  15.   .ButtonName = "Select Import Folder"
  16.   .Title = "Browse for Folders"
  17.   .InitialView = msoFileDialogViewLargeIcons
  18.   .InitialFileName = "C:\"
  19.     If .Show <> -1 Then Exit Sub
  20.       If .SelectedItems(1) = "C:\" Then
  21.         strFolder = .SelectedItems(1)
  22.       Else
  23.         strFolder = .SelectedItems(1) & "\"
  24.       End If
  25. End With
  26.  
  27. lngNumOfFiles = fRetNumOfFiles(strFolder)
  28.  
  29. intResponse = MsgBox("Import " & CStr(lngNumOfFiles) & " Files from " & strFolder & _
  30.                      "?", vbQuestion + vbYesNo, "Import Prompt")
  31. If intResponse = vbNo Then
  32.   DoCmd.Hourglass False
  33.     Exit Sub
  34. End If
  35.  
  36. Set rstBLOB = New ADODB.Recordset
  37. rstBLOB.Open "tblDemo", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
  38.  
  39. intCtr = 1
  40. strFile = Dir(strFolder & "*", vbNormal)
  41.  
  42. Set mstream = New ADODB.Stream
  43.  
  44. DoCmd.Hourglass True
  45.  
  46. Do While strFile <> ""
  47.   With mstream
  48.     .Type = adTypeBinary
  49.     .Open
  50.     .LoadFromFile strFolder & strFile
  51.   End With
  52.   With rstBLOB
  53.     .AddNew
  54.       .Fields("sFileName") = strFolder & strFile
  55.       .Fields("sFileExtension") = Mid$(strFile, InStrRev(strFile, "."))
  56.       .Fields("BLOB").Value = mstream.Read
  57.     .Update
  58.     End With
  59.     mstream.Close: intCtr = intCtr + 1
  60.     strFile = Dir
  61. Loop
  62.  
  63. DoCmd.Hourglass False
  64.  
  65. rstBLOB.Close
  66. Set rstBLOB = Nothing
  67.  
  68. MsgBox CStr(intCtr - 1) & " Files were Imported from " & strFolder & ".", _
  69.        vbInformation, "Import Status"
  70. Me.Requery
Expand|Select|Wrap|Line Numbers
  1. Public Function fRetNumOfFiles(strFldr As String) As Long
  2. Dim strFile As String
  3. Dim lngCtr As Long
  4.  
  5. If Right$(strFldr, 1) <> "\" Then strFldr = strFldr & "\"
  6.  
  7. strFile = Dir$(strFldr, vbNormal)
  8.  
  9. If strFile = "" Then fRetNumOfFiles = 0: Exit Function
  10.  
  11. Do While strFile <> ""
  12.   lngCtr = lngCtr + 1
  13.     strFile = Dir()
  14. Loop
  15.  
  16. fRetNumOfFiles = lngCtr
  17. End Function
2 Weeks Ago #14

P: 9
Thank you for thew code. At the moment I am working to get the single file load up and running and am about complete.

Not sure if I mentioned that I am displaying images in an image control and PDF's in a webbrowser control. This is working well with the exception of a very odd problem.

When I go to add the PDF to the webbrowser control (Lines 7 through 10), the only way it will work is if I include the Msgbox. If I remove the Msgbox line nothing happens. The webbrowser control is not populated and I get no error message.

The code compiles .BlobInventory returns the correct value. So not sure what it could be. Do not know if you or any others in the forum have experienced this problem.



Expand|Select|Wrap|Line Numbers
  1. Private Sub Form_Current()
  2.     With Me
  3.       If .NewRecord Then
  4.         ![ImageX].Picture = ""
  5.         ![txtProperties] = ""
  6.       End If
  7.  
  8.         If [BlobCategory_ID] <> 1 Then
  9.         MsgBox "hi 1"
  10.             Forms![frm_Navigation]![NavigationSubform].Form![DocumentViewer].Object.Navigate putBLOBInFile(.BlobInventory_ID)
  11.         End If
  12.  
  13.         If [BlobCategory_ID] = 1 Then
  14.             .ImageDisplay.Picture = putBLOBInFile(.BlobInventory_ID)
  15.         End If
  16.     End With
  17. End Sub
2 Weeks Ago #15

ADezii
Expert 5K+
P: 8,652
I'm a little confused on a couple of points:
  1. Where is the Control [.BlobInventory_ID]?
    Expand|Select|Wrap|Line Numbers
    1. Forms![frm_Navigation]![NavigationSubform].Form![DocumentViewer].Object.Navigate putBLOBInFile(.BlobInventory_ID)
  2. putBlobOnFile() is a Sub-Routine and doesn't return a String, it accepts a String Argument. You can't assign a Return Value from it to the Picture Property of the Image Control.
    Expand|Select|Wrap|Line Numbers
    1. .ImageDisplay.Picture = putBLOBInFile(.BlobInventory_ID)
    Expand|Select|Wrap|Line Numbers
    1. Public Sub PutFileIntoBLOB(strFileName As String)
2 Weeks Ago #16

P: 9
BlobCategory_ID represents which type of file is to be imported. 1 = Image and 2 = PDF. Since the bulk import does not allow you to pick the file type I created to folders BlobUpload\Image and BlobUpload\PDF. Then code looks at BlobCatefory_ID to determine which folder to load.

In the code below if BlobCategory_ID = 1 then then it loads the image into the Image Control. If it is not 1 it loads the PDF into the Webbrowser Control.

I have come up with a work around for the problem I mentioned. I created a form set its width to .0069 Making it basically invisible set its Timer Interval to 1 and added On Timer event to close the form. I added code to the On Load event of my form in question to open the blank for as acDialog. This seems to work.
2 Weeks Ago #17

NeoPa
Expert Mod 15k+
P: 31,530
Hi Ordnance.

I'm guessing, from your reply, that you didn't quite get the significance of ADezii's questions. Certainly your responses don't answer the questions, nor indicate that you perceive what ADezii is trying to draw your attention to.
  1. What you plan to use [BlobCategory_ID] for isn't the question. Where is it located on a Form? I suspect it hasn't been created which means your reference to it will not work.
  2. This was about drawing your attention to the difference between Function procedures and Subroutine procedures. Procedures are sets of code that you can call. A Subroutine will run code. A Function will also run code, but on top of that will return a value. Notice the difference in the following example code :
    Expand|Select|Wrap|Line Numbers
    1. Public Sub MySub()
    2. ...
    3. End Sub
    Expand|Select|Wrap|Line Numbers
    1. Public Function MyFunction() As String
    2. ...
    3. MyFunction = "Return value"
    4. ...
    5. End Function
Your code was trying to use the value returned from a subroutine. This cannot work as subroutines, by definition, return no values.

As for your work-around. You may prefer working with a more normal-sized Form but hiding it so it doesn't interfere with the display. It makes it easier to work with.

As I say, I'm happy to let you two run with this without interfering, but I thought jumping in here quickly may prove helpful. Good luck with your project :-)
2 Weeks Ago #18

P: 9
My apologies BlobCategory_ID produced by a combobox on the a form
2 Weeks Ago #19

NeoPa
Expert Mod 15k+
P: 31,530
I'm not sure apologies are necessary here. I wasn't taking you to task. Simply trying to guide and assist. Point you through the forest, as it were. It's easy to get lost ;-)
2 Weeks Ago #20

ADezii
Expert 5K+
P: 8,652
I think that you are losing focus a little. You appear to be attempting to write a non-graphic File (*.pdf in this case) to a BLOB Field stored as a Binary Stream of Data. The exact opposite needs to occur in the Current() Event of your Form, namely the Binary Data needs to be extracted from the BLOB Field and placed into a Temporary File. Next, this File is loaded into a Web Browser Control. I didn't have much time, but I modified the Code in the Current() Event of my DB and the outcome was promising, namely the *.pdfs were displayed in the Web Browser. There were a couple of minor difficulties, but the overall approach was successful.
Expand|Select|Wrap|Line Numbers
  1. Private Sub Form_Current()
  2. With Me
  3.   If .NewRecord Then
  4.     ![ImageX].Picture = ""
  5.     ![txtProperties] = ""
  6.   End If
  7.  
  8.   If [BlobCategory_ID] <> 1 Then
  9.     Dim strSQL As String
  10.     Dim rstBLOB As ADODB.Recordset
  11.     Dim mstream As ADODB.Stream
  12.     Dim strFullPath As String
  13.     Dim strFolder As String
  14.     Dim fso As FileSystemObject
  15.  
  16.     strFolder = "C:\TEMP\"
  17.     If Dir$(strFolder, vbDirectory) = "" Then MkDir (strFolder)
  18.  
  19.     Set fso = New Scripting.FileSystemObject
  20.  
  21.     strSQL = "SELECT * FROM tblDemo WHERE [ID] = " & Me![txt_ID]
  22.  
  23.     Set rstBLOB = New ADODB.Recordset
  24.     rstBLOB.Open strSQL, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
  25.  
  26.     Set mstream = New ADODB.Stream
  27.     With mstream
  28.       .Type = adTypeBinary
  29.       .Open
  30.       .Write rstBLOB.Fields("BLOB").Value
  31.     End With
  32.  
  33.     strFullPath = rstBLOB![sFileName]
  34.     mstream.SaveToFile "C:\TEMP\" & strFullPath, adSaveCreateOverWrite
  35.  
  36.     Forms![frmTest].DocumentDisplay.Visible = True
  37.     Forms![frmTest].DocumentDisplay.Navigate "C:\TEMP\" & strFullPath
  38.  
  39.     rstBLOB.Close
  40.     Set rstBLOB = Nothing
  41.   End If
  42. End With
  43. End Sub
2 Weeks Ago #21

ADezii
Expert 5K+
P: 8,652
but I thought jumping in here quickly may prove helpful.
Always welcome and always helpful!

IMHO, Extracting Binary Data from an OLE Object Field, saving it to a File, then loading that File (*.pdf, *.doc, *.docs) into a Web Browser is very problematic to say the least. I arrived at another solution which you may/may not like. The attached Demo contains three Records, a *.bmp, *.pdf, and *.doc. As you navigate thru them Code in the Current() Event of the Form will load preset Graphic Images into the Image Control. As far as the Word Documents and PDFs, an Open File Command Button will appear. Clicking on the Command Button will then Open the File via the FollowHyperlink Method of the Application. I strongly feel that going the Web Browser route will lead to nothing but problems. Give the Demo a shot and see what you think.
Attached Files
File Type: zip Write PDF to BLOB_4.zip (849.5 KB, 2 views)
1 Week Ago #22

P: 9
Thank you I will take a look.
1 Week Ago #23

P: 9
Mission complete. Thanks for all the help. This never would have happened without you.
1 Week Ago #24

ADezii
Expert 5K+
P: 8,652
You are quite welcome, good luck with your Project!

@NeoPa:
Thanks for allowing us to continue and come to a successful conclusion.
1 Week Ago #25

NeoPa
Expert Mod 15k+
P: 31,530
Always a pleasure to observe you in action my friend :-)

There are a lot less valuable things you could be doing with your spare time.
1 Week Ago #26

Post your reply

Sign in to post your reply or Sign up for a free account.