Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

vb.net write a .pdf but locks the file once it is written

Posted on 2006-11-16
8
Medium Priority
?
285 Views
Last Modified: 2010-04-23
I've had to update a program someone else wrote in vb.net 2003 to vb.net 2005.  It writes a pdf to a folder but won't release the file until I close the program.  Here is the code below.  I'm new to .net so please type slowly.  Thanks.

Private Sub CreatePDF()

        'Prints the airbill report
        Dim ReportName As New AirbillReport

        Dim myexportoptions As CrystalDecisions.Shared.ExportOptions
        Dim mydiskfiledestinationoptions As CrystalDecisions.Shared.DiskFileDestinationOptions
        Dim myexportfile As String


        myexportfile = "C:\Documents and Settings\mikeb\My Documents\Visual Studio 2005\Projects\AnatomicalServicesProgram\Airbills\" & txtAirbillNumber.Text & ".pdf"


        mydiskfiledestinationoptions = New CrystalDecisions.Shared.DiskFileDestinationOptions()
        mydiskfiledestinationoptions.DiskFileName = myexportfile
        myexportoptions = ReportName.ExportOptions
        With myexportoptions
            .DestinationOptions = mydiskfiledestinationoptions
            .ExportDestinationType = CrystalDecisions.[Shared].ExportDestinationType.DiskFile
            .ExportFormatType = CrystalDecisions.[Shared].ExportFormatType.PortableDocFormat
        End With

        'ReportName.SetDataSource(ShipmentInformationDataset)

        'Inserted as testing for Crystal Decisions problem we are having 1-26-05
        'ShipmentInformationDataset.WriteXml("c:\ShipmentData.xml")

        ReportName.Export()

        ReportName.Close()


        SendMessage(myexportfile)

        'System.IO.File.Delete(myexportfile)



    End Sub
0
Comment
Question by:bergertime
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 3
8 Comments
 
LVL 14

Expert Comment

by:Ramuncikas
ID: 17958076
Try

<...>
ReportName.Export()
ReportName.Close()
'---------------------------------------------------
ReportName = Nothing
myexportoptions = Nothing
mydiskfiledestinationoptions = Nothing

'---------------------------------------------------
SendMessage(myexportfile)
'System.IO.File.Delete(myexportfile)

BTW, do you get any error?
0
 
LVL 14

Expert Comment

by:Ramuncikas
ID: 17958091
On the other hand a SendMessage() sub could cause this problem. Post your code here if the above does not help
0
 
LVL 2

Author Comment

by:bergertime
ID: 17958841
I think this may be the code your looking for.

Private Sub StoreAirbill()
        'Declare and instantiate the dataset row.
        Dim sir As ShipmentInformation.ShipmentInformationRow

        'Ready dataset row for data insertion.
        sir = ShipmentInformationDataset.ShipmentInformation.NewRow

        'Databind dataset fields to form fields.
        sir.AirbillNumber = txtAirbillNumber.Text

        'Removed labels from form but left information incase I need to add it back.
        sir.Labels = ""
        sir.Origin = txtorigin.Text
        sir.Destination = txtdestination.Text
        sir.DeclaredValue = txtdeclaredvalue.Text
        sir.DeliveryDate = txtdate.Text
        sir.Time = txttime.Text
        sir.ShipperRefNumber = txtshipperref.Text
        sir.ConsigneeRefNumber = txtconsigneeref.Text
        sir.ThirdPartyRefNumber = txtthirdref.Text

        If optnextday.Checked = True Then
            sir.NextDay = "X"
        ElseIf opt2ndday.Checked = True Then
            sir.SecondDay = "X"
        ElseIf opt3to5day.Checked = True Then
            sir.Threeto5Day = "X"
        End If

        If Optshipper.Checked = True Then
            sir.Shipper = "X"
        ElseIf optconsignee.Checked = True Then
            sir.Consignee = "X"
        ElseIf optthirdparty.Checked = True Then
            sir.ThirdParty = "X"
        End If

        sir.ShipperName = txtShipperName.Text
        sir.ShipperAddress = txtshipperaddress.Text
        sir.ShipperCity = txtshippercity.Text
        sir.ShipperState = txtshipperstate.Text
        sir.ShipperZip = txtshipperzip.Text
        sir.ShipperContact = txtshippercontactname.Text
        sir.ShipperPhone = txtshippernumber.Text
        'sir.ShipperShow = txtShipperShow.Text
        'sir.ShipperBooth = txtShipperBooth.Text

        sir.ConsigneeName = cmbConsigneeName.Text
        sir.ConsigneeAddress = txtconsigneeaddress.Text
        sir.ConsigneeCity = txtconsigneecity.Text
        sir.ConsigneeState = txtconsigneestate.Text
        sir.ConsigneeZip = txtconsigneezip.Text
        sir.ConsigneeContact = txtconsigneecontactname.Text
        sir.ConsigneePhone = txtconsigneenumber.Text
        'sir.ConsigneeBooth = txtConsigneeBooth.Text
        'sir.ConsigneeBooth = txtConsigneeBooth.Text


        sir.ThirdName = cmbThirdPartyName.Text
        sir.ThirdAddress = txtthirdaddress.Text
        sir.ThirdCity = txtthirdcity.Text
        sir.ThirdState = txtthirdstate.Text
        sir.ThirdZip = txtthirdzip.Text
        sir.ThirdContact = txtthirdcontactname.Text
        sir.ThirdPhone = txtthirdnumber.Text

        sir.Pieces1 = txtPieces1.Text
        sir.Length1 = txtLength1.Text
        sir.Width1 = txtWidth1.Text
        sir.Height1 = txtHeight1.Text
        sir.Description1 = txtDescription1.Text
        sir.Weight1 = txtWeight1.Text

        sir.Pieces2 = txtPieces2.Text
        sir.Length2 = txtLength2.Text
        sir.Width2 = txtWidth2.Text
        sir.Height2 = txtHeight2.Text
        sir.Description2 = txtDescription2.Text
        sir.Weight2 = txtWeight2.Text

        sir.Pieces3 = txtPieces3.Text
        sir.Length3 = txtLength3.Text
        sir.Width3 = txtWidth3.Text
        sir.Height3 = txtHeight3.Text
        sir.Description3 = txtDescription3.Text
        sir.Weight3 = txtWeight3.Text

        sir.Pieces4 = txtPieces4.Text
        sir.Length4 = txtLength4.Text
        sir.Width4 = txtWidth4.Text
        sir.Height4 = txtHeight4.Text
        sir.Description4 = txtDescription4.Text
        sir.Weight4 = txtWeight4.Text

        sir.Instructions = txtSpecialInstructions.Text

        'Insert data to dataset.
        ShipmentInformationDataset.ShipmentInformation.Rows.Add(sir)

        'Print the airbill using information entered into the dataset.
        CreatePDF()


        'Clears all information out of the dataset to ready it for a new entry.
        ShipmentInformationDataset.Clear()
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 14

Expert Comment

by:Ramuncikas
ID: 17958982
I don't see where you use the above code in a code provided in question.
Once again: do you get any error? If you do, show us the code raising error. If not, tell me how you know the file is locked?
0
 
LVL 2

Author Comment

by:bergertime
ID: 17959331
Sorry, I had posted a response to your first post.  I must not have hit submit?  Anyway, yes I do get an error.  Here is what happens:  If I leave 'System.IO.File.Delete(myexportfile) uncommented then the first bill I process I get an error stating that System.IO.IOException the file you are trying to access is locked.  Now if I comment out that 'System.IO.File.Delete(myexportfile) then the first time I write a new bill number ( & txtAirbillNumber.Text &) it works fine and I can write as many as I want to.  But if I write a bill with the same AirBillNumber I get the error that the file I am trying to access isd locked.  Now I can open the folder that I'm writing the bills to and say I process 10 bills, If I right click and say delete on any of them, windows tells me thay are in use.  If I shut down the program and restart, then I can delete the bills.  I came home for lunch but I will post the code with the code you provided in it again.  With the code you provided, my result was the same.  I will also post the complete error I get.    Thanks again.
0
 
LVL 14

Accepted Solution

by:
Ramuncikas earned 2000 total points
ID: 17959793
Ok.
Now I see two possible points of error location:
#1. ReportName.Close() has a bug and does not release a handle to a file
#2. SendMessage(myexportfile) sub could do the same. This could be a #1 place to look for a bug. So what I need is a code of your SendMessage sub.

Before you do that comment the SendMessage(myexportfile) line and uncomment the System.IO.File.Delete(myexportfile) line. If you will not get any locked files after that then a bug resides in a SendMessage for sure. Check that before posting.

P.S. Don't hurry. You're at lunch and for me it's time to go to bed already. It's 10:48 PM in Lithuania. :)
0
 
LVL 2

Author Comment

by:bergertime
ID: 17965648
I did what you said last night.  So the bug was in my Sendmessage just as you said.  I added 'MyAttachment.Dispose()' to the end and now everything works as it should.  Thanks again for your help. :)
0
 
LVL 14

Expert Comment

by:Ramuncikas
ID: 17965939
Glad to be helpful

And thanks for the points. They made me a VB.NET Master in EE :)

0

Featured Post

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Article by: jpaulino
XML Literals are a great way to handle XML files and the community doesn’t use it as much as it should.  An XML Literal is like a String (http://msdn.microsoft.com/en-us/library/system.string.aspx) Literal, only instead of starting and ending with w…
A while ago, I was working on a Windows Forms application and I needed a special label control with reflection (glass) effect to show some titles in a stylish way. I've always enjoyed working with graphics, but it's never too clever to re-invent …
This tutorial will teach you the special effect of super speed similar to the fictional character Wally West aka "The Flash" After Shake : http://www.videocopilot.net/presets/after_shake/ All lightning effects with instructions : http://www.mediaf…
Are you ready to place your question in front of subject-matter experts for more timely responses? With the release of Priority Question, Premium Members, Team Accounts and Qualified Experts can now identify the emergent level of their issue, signal…

604 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question