Avatar of Dustin Stanley
Dustin Stanley

asked on 

Can someone please explain to me what value or object is needed in this code MS Access VBA.

I have been looking for a way to parse a MIME. I found this site that has a reference library for Access just for what I am looking for. It costs but if it works I may take it.

MIME being Parsed:
Content-Type: multipart/mixed;
 boundary="------------080707010302060306060800";

This is a multi-part message in MIME format.

--------------080707010302060306060800
Content-Type: text/plain
Content-Transfer-Encoding: 7bit

This is the plain-text body.
--------------080707010302060306060800
Content-Disposition: attachment; filename="starfish.gif";
Content-Transfer-Encoding: base64
Content-Type: image/gif; name="starfish.gif";

R0lGODlhIAAgAPcAAP///+/v7/f39+/n5/fv7//39/fn597OzufW1tbGxs69vffe3u/W1salpZQQ
EIQYEJwQCJQYCJwYCM6clL2Ee5wpGIwhEK0YANatpdalnHMYCKUhCJQYAKUYAM6Ec5QhCJwhCPfW
zu/Oxta1rb17a6UhAK0hAPe9rb2Ec7V7a71rUpwpCL0xCJwhAOfOxta9tcatpdallM6cjMaUhK1C
IZwxELU5EK0xCLUxCN61pcacjK1rUrVaOaVKKZxCIZwxCKUxCL05CLUxAM6llO+1nMZzUr1rSrVS
KaVCGK1CGLVCEJQxCK05CLU5CIwpAKUxAK0xAM69tffWxrVrSrVaMbVKGMZKEL1CCLU5AP/v597O
xufGtcallNaljLWEa96ce9aUc717Wq1aMcZjMbVaKbVSIa1KGL1SGJw5CK1CCLVCCMZKCM5KCMZC
APfn3tbGvc57Ss5aGMZSENZaEL1KCM5SCLVCAMZKAPfezvfOte/GrdatlN6cc9aEUr1rOc5jIdZj
GL1SEM5aELVKCMZSCNZaCL1KAOfOvc57Qs5jGNZjEM5aCMZSAN5aAO/OtefGrcZjGM5jEN5rELVS
CMZaCN5jCOdrCM5aAO/Gpc5rGMZjENZrEN5jAOdrAOfe1t6MQtZ7Kd57IdZzGM5rEMZjCNZrCM5j
ANbOxu/Wve+9jPe9hO+1e+etc85zGO+EGMZrENZzEM5rCN5zCO97COdzAO/n3u+1c+ecSt6UQs57
Ie+MIdZ7GOeEGM5zEO+EELVjCOd7CO+ECOd7AO/Ope+tWuelUu+UKeeMGOeEEO+MEOeECO+EAO/G
jO+cKfeUEO+MCO+tSuecMeeUGN6MEOeMCO+UCO+tQuelOe+lMe+lKe+cGOeUEO+cEOeUCN6MAO+U
AOe9c/e1Oe+lId6UEO+cCPe9Qve1Me+lEOecCO+lCOe1Su+1OeelGO+tGPetCPetAO+9Qve1GO+1
EPe9CPe9APf37+fv5/f//+/v9/fv9+fe5+/e5869xufW3t7GzgAAACwAAAAAIAAgAAAI/wABCBxI
sKDBgwgTFgCwMKHDhwyHYWoIsWIBZsdyHaoIcaGbaNQ0ZeBYEROvV0pmCCDp8B4rZaOUcGHpcIEx
aqPMYLjHMcsCAwgxkRv3q8wLnhAdfWpmDRwqAgQFEEvHLlCZNxwfpVmkDJ04dczc3LsXQtq4XWh8
aGH48F49FDUC9UInT941W6luCUOWyQmSLST3eUnChNS4c9SooQuGDNkrIIrA1MqXr0A+AyFC4Kln
kMAQKljotJJGDZklS9PkyEHGLZu1ctbCmWvXThurfAbvHSii5kegxpYqtRpEKFnid/TSneu2LRYh
P/0Q1tJRgYOZV71UL5LEK1KiV68yVf+xgaOKmAZICd5bmA8FEyZQlMjRRAhQGQv4QQSJL8ZLFHwP
6aFIJXNIEkggcgQhwYIlKEFFGDKcEgBCBVCkByC0IAMJGnSAYsUNEmzAgw4HBJBeQisZcAswjqGh
wQeBKGIFFD0ocCJE9diyjTKRLPHBAx/cEAcdgxgx4Vg3HnSPKs4E00sNEYDwgQksQDLJIohMSJIj
ugSTCRA/ILFDCjTckUkrpYiCAEluYCMLJCsoMQUM9gjQRSSL7CLJJjmQxMw3kQChxA78IFULHIK0
MgonXyR5UAHWVBKIEmEcUJAIYxgSSSF94AZRPrgsQgUF0RmUgWpy/LFmRYdMkACAANwrWA8cbAhi
RZ8cjRWro0QEEsQVGTiKkLAM5QNGFWrAQFNLBIzABQPLRktQQAA7

--------------080707010302060306060800--

Open in new window



The Actual Code:
Dim mime As New ChilkatMime

Dim success As Long
success = mime.UnlockComponent("Anything for 30-day trial.")
If (success = 0) Then
    Text1.Text = Text1.Text & mime.LastErrorText & vbCrLf
    Exit Sub
End If

'  Load the sampleMime2.txt file into the MIME object.
'  (This file is available at http://www.chilkatsoft.com/testData/sampleMime2.txt )

success = mime.LoadMimeFile("sampleMime2.txt")
If (success = 0) Then
    Text1.Text = Text1.Text & mime.LastErrorText & vbCrLf
    Exit Sub
End If

'  The GIF image is the 2nd sub-part located directly under the
'  top-level MIME node.  Indexing begins at 0, therefore the 2nd
'  sub-part is at index 1.
Dim part2 As ChilkatMime
Set part2 = mime.GetPart(1)

Dim binaryData() As Byte

'  The GetBodyBinary method returns the binary bytes
'  of the part's body, automatically decoded from whatever
'  content-transfer-encoding might be used (such as base64).
binaryData = part2.GetBodyBinary()

'  We now have the binary bytes of the GIF image in binaryData.
'  Save it to a file.
Dim fac As New CkFileAccess
success = fac.WriteEntireFile("out1.gif",binaryData)
If (success <> 1) Then
    Text1.Text = Text1.Text & fac.LastErrorText & vbCrLf
    Exit Sub
End If

'  An easier way to save the body content to a file,
'  assuming your application does not need to access
'  the binary data in-memory, is to call SaveBody
success = part2.SaveBody("out2.gif")
If (success = 0) Then
    Text1.Text = Text1.Text & part2.LastErrorText & vbCrLf
    Exit Sub
End If

Text1.Text = Text1.Text & "Finished." & vbCrLf

Open in new window



What are they looking for with "Text1.Text = Text1.Text"?????


What is "Text1.Text"???


When I send for the API I use "reader.responseText" or "reader.responseXML"
Dim reader As New MSXML2.XMLHTTP40


Is this what it needs "reader.responseText"?

If so it says Compile Error: Can't assign to read-only property.

This is the website the code came from:
https://www.example-code.com/vb/mime_extractBinaryData_a.asp


Here is my complete code I am using:

Public Function EbayDownloadFile()
    Dim reader As New MSXML2.XMLHTTP40
    Dim Doc As New MSXML2.DOMDocument
    Dim TokenValue As String
    Dim APICALL As String
    Dim DevName As String
    Dim AppName As String
    Dim CertName As String
    On Error GoTo ErrorHandler1
    
    TokenValue = Forms!frmEbayTokenCode!txtTokenCode ' This is used for the Token Code insert manually on the Form Ebay Add Fixed Price Item.
    DevName = Forms!frmEbayTokenCode!txtDevName 'Supplied by ebay.
    AppName = Forms!frmEbayTokenCode!txtAppName 'Supplied by ebay.
    CertName = Forms!frmEbayTokenCode!txtCertName 'Supplied by ebay.
    
    
    APICALL = "downloadFile"
    
    Doc.Load "C:\Users\Station\Documents\Access XML Save Files\New Testing\downloadFile.xml" 'Document Location of the XML File With Items Being Added

    
    reader.Open "POST", "https://storage.sandbox.ebay.com/FileTransferService", False
    reader.setRequestHeader "X-EBAY-SOA-OPERATION-NAME", APICALL
    reader.setRequestHeader "X-EBAY-SOA-SECURITY-TOKEN", TokenValue
    reader.setRequestHeader "X-EBAY-API-DETAIL-LEVEL", "0"
    reader.setRequestHeader "X-EBAY-API-COMPATIBILITY-LEVEL", "967"
    reader.setRequestHeader "X-EBAY-API-SITEID", "0"
    reader.setRequestHeader "X-EBAY-API-DEV-NAME", DevName
    reader.setRequestHeader "X-EBAY-API-APP-NAME", AppName
    reader.setRequestHeader "X-EBAY-API-CERT-NAME", CertName
    
    
    reader.send Doc 'This sends the XML document from above.
    Do Until reader.ReadyState = 4
        DoEvents
    Loop
    
    'Get the server's response
    sResponse = reader.responseText
    
     SaveStringAsTextFile "C:\Users\Station\Documents\Access XML Save Files\New Testing\ebay_StartJobRequest_response_File.txt", sResponse
    
'**********************************************************************************************************************************************************
'ChilKat Code Start
'**********************************************************************************************************************************************************

Dim mime As New ChilkatMime
Dim success As Long
success = mime.UnlockComponent("Anything for 30-day trial.")
If (success = 0) Then
    reader.responseText = reader.responseText & mime.LastErrorText & vbCrLf
    Exit Function
End If

'  Load the sampleMime2.txt file into the MIME object.
'  (This file is available at http://www.chilkatsoft.com/testData/sampleMime2.txt )

success = mime.LoadMimeFile("C:\Users\Station\Documents\Access XML Save Files\New Testing\ebay_StartJobRequest_response_File.txt")
If (success = 0) Then
    reader.responseText = reader.responseText & mime.LastErrorText & vbCrLf
    Exit Function
End If

'  The GIF image is the 2nd sub-part located directly under the
'  top-level MIME node.  Indexing begins at 0, therefore the 2nd
'  sub-part is at index 1.
Dim part2 As ChilkatMime
Set part2 = mime.GetPart(1)

Dim binaryData() As Byte

'  The GetBodyBinary method returns the binary bytes
'  of the part's body, automatically decoded from whatever
'  content-transfer-encoding might be used (such as base64).
binaryData = part2.GetBodyBinary()

'  We now have the binary bytes of the GIF image in binaryData.
'  Save it to a file.
Dim fac As New CkFileAccess
success = fac.WriteEntireFile("C:\Users\Station\Documents\Access XML Save Files\New Testing\ChilKat1.gz", binaryData)
If (success <> 1) Then
    reader.responseText = reader.responseText & fac.LastErrorText & vbCrLf
    Exit Function
End If

'  An easier way to save the body content to a file,
'  assuming your application does not need to access
'  the binary data in-memory, is to call SaveBody
success = part2.SaveBody("C:\Users\Station\Documents\Access XML Save Files\New Testing\ChilKat2.gz")
If (success = 0) Then
    reader.responseText = reader.responseText & part2.LastErrorText & vbCrLf
    Exit Function
End If

reader.responseText = reader.responseText & "Finished." & vbCrLf
    
    Exit Function
    
ErrorHandler1:
        MsgBox "Error " & Err.Number & ": " & Err.Description & " in " & _
   VBE.ActiveCodePane.CodeModule, vbOKOnly, "ErrorHandler1"
    Set reader = Nothing
End Function



Public Sub SaveStringAsTextFile(psPathFile As String, psFileContents)
'160730 strive4peace
   Dim iFile As Integer
   On Error GoTo ErrorHandler4
   
   iFile = FreeFile
   Open psPathFile For Output As iFile
   Print #iFile, psFileContents
   Close iFile
   
   Exit Sub
    
ErrorHandler4:
        MsgBox "Error " & Err.Number & ": " & Err.Description & " in " & _
   VBE.ActiveCodePane.CodeModule, vbOKOnly, "ErrorHandler4"
    Set reader = Nothing
    Set strmImage = Nothing
    Set objNode = Nothing
    Set objXML = Nothing

End Sub

Open in new window



Thanks for the help!
Microsoft AccessVBA

Avatar of undefined
Last Comment
Gustav Brock
ASKER CERTIFIED SOLUTION
Avatar of Gustav Brock
Gustav Brock
Flag of Denmark image

Blurred text
THIS SOLUTION IS ONLY AVAILABLE TO MEMBERS.
View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
See Pricing Options
Start Free Trial
Avatar of Dustin Stanley
Dustin Stanley

ASKER

I thank you Gustav for the help and that makes complete sense. But this code is being used for a HTTP response.

So how would I use it for (I believe this is the correct way to say it) content that is in memory?

Thanks.
Avatar of Gustav Brock
Gustav Brock
Flag of Denmark image

Can't tell, I've never used that control. But it should be nothing but a straight unbound textbox and a button to call the code.

/gustav
Avatar of Dustin Stanley

ASKER

reader.responsetext is in memory after the response is sent back to me from the original call I sent.

So what do you think about when access tells me  "Compile Error: Can't assign to read-only property"?

Any input????

Thanks
Avatar of Gustav Brock
Gustav Brock
Flag of Denmark image

Well, VBA is not exactly as VB. You could address Chilkat support. They used to be quite responsive years back when I used another control of theirs.

/gustav
Avatar of Dustin Stanley

ASKER

Thanks Gustav. I posted in their support forum. I hope to hear back from them soon.
Avatar of Dustin Stanley

ASKER

Thank you Gustav!
Avatar of Gustav Brock
Gustav Brock
Flag of Denmark image

You are welcome!

/gustav
Microsoft Access
Microsoft Access

Microsoft Access is a rapid application development (RAD) relational database tool. Access can be used for both desktop and web-based applications, and uses VBA (Visual Basic for Applications) as its coding language.

226K
Questions
--
Followers
--
Top Experts
Get a personalized solution from industry experts
Ask the experts
Read over 600 more reviews

TRUSTED BY

IBM logoIntel logoMicrosoft logoUbisoft logoSAP logo
Qualcomm logoCitrix Systems logoWorkday logoErnst & Young logo
High performer badgeUsers love us badge
LinkedIn logoFacebook logoX logoInstagram logoTikTok logoYouTube logo