Как передать параметры в отчет Crystal из кода vb.net
Я создал отчет Crystal (кросс-таблица). Я не использую какой-либо набор данных, вместо этого я использовал мастер в Crystal Report для вызова процедуры из моей схемы базы данных (указанный поставщик является поставщиком Microsoft OLEDB для oracle, после чего я дал свои учетные данные БД (т.е. схему, имя пользователя, пароль) и выбрал процедуру и выбрал столбцы, которые я хотел отобразить в отчете).
Есть 5 параметров, которые мне нужно передать из внешнего интерфейса для создания отчета. При просмотре предварительного просмотра отчета Crystal, предоставляя параметры, отчет работает нормально.
Теперь я хочу передать эти 5 параметров из внешнего интерфейса (vb.net), чтобы показать отчет в CrystalReportViewer. Пожалуйста, предложите код для записи в файле aspx.vb. (PS:- Я прошел через другие форумы и обнаружил некоторый код, но все они выдавали ту или иную ошибку, поэтому я публикую такую, чтобы я мог получить код, соответствующий моим требованиям).
Заранее спасибо..
2 ответа
Я получил отчет на работу... Я написал код ниже:
Dim RptDocument As New ReportDocument
RptDocument.Load(Server.MapPath("rpt\Report.rpt"))
RptDocument.SetParameterValue("param1", Session("param1"))
RptDocument.SetParameterValue("param2", ddlparam2.SelectedValue)
RptDocument.SetParameterValue("param3", param3.text)
RptDocument.SetParameterValue("param4", param4.text)
RptDocument.SetParameterValue("param5", param5.text)
'Set login info
Dim myLogin As CrystalDecisions.Shared.TableLogOnInfo
Dim myTable As Table
For Each myTable In RptDocument.Database.Tables
myLogin = myTable.LogOnInfo
myLogin.ConnectionInfo.ServerName = "server name"
myLogin.ConnectionInfo.DatabaseName = ""
myLogin.ConnectionInfo.UserID = "userid"
myLogin.ConnectionInfo.Password = "pwd"
myTable.ApplyLogOnInfo(myLogin)
myTable.Location = myTable.Location
CrystalReportViewer1.ReportSource = RptDocument
Создал Системный DNS и должен был добавить Oracle.DataAccess.dll
для ссылки и файла класса (с такими же функциями, как в файле класса connectooracle.vb, но с другим именем), также установите соединение в global.asax для ссылки на соединение этого класса и используя Imports Oracle.DataAccess.Client
вместо Imports System.Data.OracleClient
(чтобы избежать двусмысленности)...
Это как-то заставило его работать, и для этого может быть какое-то другое решение:)
(For ref:- Adding myLogin.ConnectionInfo.IntegratedSecurity = True gave me this error--
Logon failed. Error in File C:\DOCUME~1\Username\LOCALS~1\Temp\Report {1AG3DD86-141D-43YA-B6A2-AEDF3459AE49}.rpt: Unable to connect: incorrect log on parameters.)
Это работает для меня, и я использую Visual Studio 2008 для этого, так как VS2010 не имеет Crystal Engine для справки.
Сначала убедитесь, что вы импортировали эти два:
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
Теперь, со своей стороны, я использовал odbc, потому что, как я заметил, Crystal Report прекрасно с этим работает, и так как мы работаем с odbc. Поэтому я не включил свойство входа в отчет в своем коде. В отчете просто выберите odbc connection.
Private Sub ReportViewer_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim cryRpt As New ReportDocument
Dim str1 As String
Try
str1 = Title.str1
str2 =Title.str2
cryRpt.Load("c:\Program Files\Report\" & str2 & "")
Dim crParameterFieldDefinitions As ParameterFieldDefinitions
Dim crParameterFieldDefinition As ParameterFieldDefinition
Dim crParameterValues As New ParameterValues
Dim crParameterDiscreteValue As New ParameterDiscreteValue
crParameterDiscreteValue.Value = strStore
crParameterFieldDefinitions = cryRpt.DataDefinition.ParameterFields
crParameterFieldDefinition = crParameterFieldDefinitions.Item("Store")
crParameterValues = crParameterFieldDefinition.CurrentValues
crParameterValues.Clear()
crParameterValues.Add(crParameterDiscreteValue)
crParameterFieldDefinition.ApplyCurrentValues(crParameterValues)
rptviewer.Cursor = Cursors.AppStarting
rptviewer.ReportSource = cryRpt
rptviewer.Refresh()
rptviewer.Cursor = Cursors.Default
Catch ex As Exception
MsgBox(ex.Message)
Me.Close()
ReportInterface.Show()
End Try
End Sub
У меня есть класс, который будет получать данные, введенные пользователем. Но это не будет работать с использованием параметров хранимой процедуры.
пожалуйста, отметьте как принятый, если он работает для вас
Благодарю вас