Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 937
  • Last Modified:

How do display an image using VB 2005 / Crystal Reports for .Net 2.0

Hello,  I've got a VB 2005 windows application that is pretty much just a shell for the crystal viewer.  The application is using Crystal Reports for .Net 2.0.  The application is designed to run from a command line and pass it parameters which will identify a certain report to run.  It also accepts parameters for the report itself.  I've developed a report using Crystal 11 that will pull some information from a database (Person's Name, address, phone #, etc...)  Inside the database is the path to an picture of the person.  I've embedded a "OLE Object" into the report and I pass it the path to where the picture of the person is located.  This works great in crystal 11 but when I pass that report to my application the picture does not show up.  It is just the OLE Object icon.  Does anyone know what the problem would be.  Does Crystal Reports for .Net 2.0 support dynamic images?  Any help would be greatly appreciated.

Thanks

Tim Morrow
0
UncleT
Asked:
UncleT
  • 5
  • 3
  • 3
1 Solution
 
Éric MoreauSenior .Net ConsultantCommented:
If you are trying to do that with the version of Crystal that is bundled with VS.Net, you have to pass the image as part of your dataset. See an example in http://www.emoreau.com/Entries/Articles/2006/10/Crystal-Reports--Part-II.aspx and http://www.emoreau.com/Entries/Articles/2006/09/Feeding-Crystal-Reports-from-your-application.aspx
0
 
UncleTAuthor Commented:
The crystal report is developed in Crystal 11.   The report will accept a parameter which is a database key to a "Personnel" table.  There is a field inside the Personnel Table that is a path to an image located on the server (\\servername\picture.jpg).  I load this path into the "Graphic Location" of the OLE Object.  The report runs fine in Crystal 11 but when I pass it to the crystal viewer that I created using VB 2005 and Crystal Reports for .net 2.0 it will not show the images.  Basically what the application I wrote does is displays the report.  

I Hope I am explaining it clear enough.
0
 
Éric MoreauSenior .Net ConsultantCommented:
>>but when I pass it to the crystal viewer that I created using VB 2005 and Crystal Reports for .net 2.0 it will not show the images

That feature is not supported in this version. You need to pass your image into a dataset
0
Independent Software Vendors: 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!

 
UncleTAuthor Commented:
Pardon me if I as stupid questions.  I am very new to .net programming and I am kind of just feeling my way around some of these applications.  I don't really understand what you are talking about when you say I need to put the image into a dataset.  In the VB application I am not creating any dataset for crystal.  Like I stated before, I use full blown Crystal 11 and I use ADO to access a SQL Server database to pull the data.  I basically pass the report a parameter and it will display in my viewer.  My application basically consists of the Crystal Viewer and a ReportDocument.

I am attaching the code that I use to display the report.

If I still have to pass the image using a dataset could you possibly explaing how.

Thanks in advance.

Tim Morrow
Public Class Crystal_Viewer
 
    Private Sub CRViewer_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed
 
        Dim ep As New ErrParser
 
        Try
 
            Call g_s_Crystal_Shutdown()
            End
 
        Catch ex As Exception
            Dim ErrMsg As String
            ErrMsg = "Error in " & ep.GetProcName(ex.StackTrace)
            ErrMsg &= vbCrLf
            ErrMsg = ErrMsg & "Error Message: " & ex.Message
            MsgBox(ErrMsg, MsgBoxStyle.Exclamation Or MsgBoxStyle.OkOnly, "Application Error")
            End
        End Try
 
    End Sub
 
    Private Sub CRViewer_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
 
        Dim ep As New ErrParser
 
        Try
            'FIRED IF FORM IS CLOSED USING X IN CONTROL BOX
 
        Catch ex As Exception
            Dim ErrMsg As String
            ErrMsg = "Error in " & ep.GetProcName(ex.StackTrace)
            ErrMsg &= vbCrLf
            ErrMsg = ErrMsg & "Error Message: " & ex.Message
            MsgBox(ErrMsg, MsgBoxStyle.Exclamation Or MsgBoxStyle.OkOnly, "Application Error")
            End
        End Try
 
    End Sub
 
    Private Sub CRViewer_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 
        Dim int_ct As Integer
        Dim int_ct2 As Integer
        Dim str_Database As String = ""
        Dim bln_Security As Boolean
        Dim str_Server As String = ""
        Dim str_UserID As String = ""
        Dim str_Password As String = ""
        Dim str_Location As String = ""
 
        Call g_s_Crystal_OpenDatabase()
 
        g_str_SQL = ""
        g_str_SQL = g_str_SQL + "Select * " + vbCrLf
        g_str_SQL = g_str_SQL + "   from Crystal_Viewer_Reports" + vbCrLf
        g_str_SQL = g_str_SQL + "Where CV_Report_Parameter = '" + g_str_Parameter + "'" + vbCrLf
 
        Call g_s_Crystal_OpenSecRecords(g_str_SQL)
 
        If g_Crystal_Rs_DB.RecordCount = 0 Then
            MsgBox("Report not found in database for Parameter = " + g_str_Parameter)
            End
        Else
            If Len(Trim(g_str_Report_Description)) > 0 Then
                Me.Text = g_str_Report_Description
            Else
                Me.Text = g_Crystal_Rs_DB.Fields("CV_Report_Parameter").Value
            End If
        End If
 
        While Not g_Crystal_Rs_DB.EOF
            reportDocument1.FileName = g_Crystal_Rs_DB.Fields("CV_Report_Location").Value
            str_Location = g_Crystal_Rs_DB.Fields("CV_Report_Location").Value
            g_Crystal_Rs_DB.MoveNext()
        End While
 
        Call m_s_Load_Parameters()
 
        int_ct = reportDocument1.DataSourceConnections.Count
        For int_ct = 0 To reportDocument1.DataSourceConnections.Count - 1
            str_Database = reportDocument1.DataSourceConnections.Item(int_ct).DatabaseName.ToString
            bln_Security = reportDocument1.DataSourceConnections.Item(int_ct).IntegratedSecurity.ToString
            str_Server = reportDocument1.DataSourceConnections.Item(int_ct).ServerName.ToString
            str_UserID = reportDocument1.DataSourceConnections.Item(int_ct).UserID.ToString
 
            g_str_SQL = ""
            g_str_SQL = g_str_SQL + "Select * " + vbCrLf
            g_str_SQL = g_str_SQL + "   from Crystal_Database_Info" + vbCrLf
            g_str_SQL = g_str_SQL + "Where Crystal_Server = '" + g_f_str_ReplaceQuote(str_Server) + "'" + vbCrLf
            g_str_SQL = g_str_SQL + "  and Crystal_Database = '" + g_f_str_ReplaceQuote(str_Database) + "'" + vbCrLf
            g_str_SQL = g_str_SQL + "  and Crystal_UserID = '" + g_f_str_ReplaceQuote(str_UserID) + "'" + vbCrLf
 
            Call g_s_Crystal_OpenSecRecords(g_str_SQL)
 
            If g_Crystal_Rs_DB.RecordCount = 0 Then
                g_str_Error = "Report Login Info Not Found In Crystal_Database" + vbCrLf + vbCrLf
                g_str_Error = g_str_Error + "    Server = " + str_Server + vbCrLf
                g_str_Error = g_str_Error + "    Database = " + str_Database + vbCrLf
                g_str_Error = g_str_Error + "    UserID = " + str_UserID + vbCrLf + vbCrLf
                g_str_Error = g_str_Error + "Please contact an Administrator!"
                g_str_Title = "Missing Crystal Database Info"
                g_int_Error = MessageBox.Show(g_str_Error, g_str_Title, MessageBoxButtons.OK)
                Exit Sub
            End If
 
            While Not g_Crystal_Rs_DB.EOF
                str_Password = g_Crystal_Rs_DB.Fields("Crystal_Password").Value.ToString
                g_Crystal_Rs_DB.MoveNext()
            End While
 
            reportDocument1.DataSourceConnections.Item(int_ct).SetConnection(str_Server, str_Database, str_UserID, str_Password)
        Next int_ct
 
        For int_ct = 0 To reportDocument1.Subreports.Count - 1
            For int_ct2 = 0 To reportDocument1.Subreports(int_ct).DataSourceConnections.Count - 1
                str_Database = reportDocument1.Subreports(int_ct).DataSourceConnections.Item(int_ct2).DatabaseName.ToString
                bln_Security = reportDocument1.Subreports(int_ct).DataSourceConnections.Item(int_ct2).IntegratedSecurity.ToString
                str_Server = reportDocument1.Subreports(int_ct).DataSourceConnections.Item(int_ct2).ServerName.ToString
                str_UserID = reportDocument1.Subreports(int_ct).DataSourceConnections.Item(int_ct2).UserID.ToString
 
                g_str_SQL = ""
                g_str_SQL = g_str_SQL + "Select * " + vbCrLf
                g_str_SQL = g_str_SQL + "   from Crystal_Database_Info" + vbCrLf
                g_str_SQL = g_str_SQL + "Where Crystal_Server = '" + g_f_str_ReplaceQuote(str_Server) + "'" + vbCrLf
                g_str_SQL = g_str_SQL + "  and Crystal_Database = '" + g_f_str_ReplaceQuote(str_Database) + "'" + vbCrLf
                g_str_SQL = g_str_SQL + "  and Crystal_UserID = '" + g_f_str_ReplaceQuote(str_UserID) + "'" + vbCrLf
 
                Call g_s_Crystal_OpenSecRecords(g_str_SQL)
 
                If g_Crystal_Rs_DB.RecordCount = 0 Then
                    g_str_Error = "Report Login Info Not Found In Crystal_Database" + vbCrLf + vbCrLf
                    g_str_Error = g_str_Error + "    Server = " + str_Server + vbCrLf
                    g_str_Error = g_str_Error + "    Database = " + str_Database + vbCrLf
                    g_str_Error = g_str_Error + "    UserID = " + str_UserID + vbCrLf + vbCrLf
                    g_str_Error = g_str_Error + "Please contact an Administrator!"
                    g_str_Title = "Missing Crystal Database Info"
                    g_int_Error = MessageBox.Show(g_str_Error, g_str_Title, MessageBoxButtons.OK)
                    Exit Sub
                End If
 
                While Not g_Crystal_Rs_DB.EOF
                    str_Password = g_Crystal_Rs_DB.Fields("Crystal_Password").Value.ToString
                    g_Crystal_Rs_DB.MoveNext()
                End While
 
                reportDocument1.Subreports(int_ct).DataSourceConnections.Item(int_ct2).SetConnection(str_Server, str_Database, str_UserID, str_Password)
            Next
        Next
 
        CR_Viewer.ReportSource = reportDocument1
 
        g_str_SQL = ""
        g_str_SQL = g_str_SQL + "Insert into Crystal_Viewer_Accessed_Reports" + vbCrLf
        g_str_SQL = g_str_SQL + "  Values (" + vbCrLf
        g_str_SQL = g_str_SQL + "          '" + str_Location + "'," + vbCrLf
        g_str_SQL = g_str_SQL + "          '" + Environment.MachineName + "'," + vbCrLf
        g_str_SQL = g_str_SQL + "          '" + Environment.UserName + "'," + vbCrLf
        g_str_SQL = g_str_SQL + "          '" + Format(Now, "Short Date") + " " + Format(Now, "HH:mm:ss") + "'" + vbCrLf
        g_str_SQL = g_str_SQL + "         )" + vbCrLf
 
        lng_PK_Return = g_f_lng_Crystal_Update_DB(g_str_SQL)
 
    End Sub
 
    Public Sub m_s_Load_Parameters()
 
        Dim int_Ct As Integer
        Dim int_Ct2 As Integer
        Dim bln_Parameter As Boolean
 
        Dim ep As New ErrParser
 
        Try
 
            bln_Parameter = False
            For int_Ct = 0 To reportDocument1.ParameterFields.Count - 1
                For int_Ct2 = 0 To UBound(g_str_Param_Name) - 1
                    If UCase(reportDocument1.ParameterFields(int_Ct).Name) = UCase(g_str_Param_Name(int_Ct2)) Then
                        'Automatically Passes Value To Report
                        reportDocument1.ParameterFields(int_Ct).CurrentValues.AddValue(CStr(g_str_Param_Value(int_Ct2)))
                        bln_Parameter = True
                    End If
                Next int_Ct2
            Next
 
            If bln_Parameter = False Then
                MsgBox("No parameter was passed to the report!!")
            End If
 
        Catch ex As Exception
            Dim ErrMsg As String
            ErrMsg = "Error in " & ep.GetProcName(ex.StackTrace)
            ErrMsg &= vbCrLf
            ErrMsg = ErrMsg & "Error Message: " & ex.Message
            MsgBox(ErrMsg, MsgBoxStyle.Exclamation Or MsgBoxStyle.OkOnly, "Application Error")
            End
        End Try
 
    End Sub
 
End Class

Open in new window

0
 
Éric MoreauSenior .Net ConsultantCommented:
Haven't you said at some point that you are using the CR version that is bundled with VS.Net?
0
 
mlmccCommented:
What viewewr are you using?

The .Net viewer included with VS2005 is for CR10 which doesn't support the file/path in the database.  You need to include the viewer from CR XI.

http://devlibrary.businessobjects.com/businessobjectsxir2/en/en/CrystalReports_dotNET_SDK/crsdk_net_doc/doc/crsdk_net_doc/html/crconsetupdevviewersvirtualdirectory.htm

mlmcc
0
 
mlmccCommented:
Do you have CR XI R2?
Check the Crystal version in HELP --> ABOUT CRYSTAL
CR XI R2 is version 11.5.xxx

mlmcc
0
 
UncleTAuthor Commented:
The version of crystal we are using is the version that came with ESRI.  It is version 11.0.0.1282. Does anyone know if there is a Crystal 11 control that can be used in VB 2005?  Any help would be appreciated.  
0
 
mlmccCommented:
Yes there is but you need CR XI R2. Crystal had to make changes to CR XI to work under .Net 2.0 framework which VS2005 runs under.

mlmcc
0
 
UncleTAuthor Commented:
I just installed CR XI R2.  The version of crystal shows 11.5.8.826.  When I open my project in VB 2005 the Crystal Viewer version is 11.5.3700.0.  I can run the application and in the crystal report this person has about 10 pictures.  The file location is in the database so I use Graphic Location to point it to the right picture.  It runs fine in the Crystal 11 Developer but when I run it in the Viewer application the only picture that shows up it the default picture I initially put in the picture control.  Any Idea?  Am I doing something wrong?
0
 
UncleTAuthor Commented:
Thanks MLMCC for your help.  I installed CR XI R2 but the version of crystal my application was referenced was still the 10x version.  I changed it to reference the 11.5.xxx version and all seems to be working well.  Thanks again.
0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

  • 5
  • 3
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now