Недопустимый индекс при передаче параметра в crystal report in VB.NET
Я создаю решение Windows forms в VS2017 с помощью VB.net-да. Бэк-энд-это БД Access 2010, которая сейчас находится на файловом сервере, но в конечном итоге будет развернута в другом месте. Я пытаюсь запустить отчет, передавая несколько параметров динамически. Я пытаюсь сделать это по одному параметру за раз, чтобы облегчить отладку во время построения отчета.
Однако я даже не могу запустить отчет, когда передаю первый параметр. Он запускает таблицу запросов в моей БД и без параметров показывает отчет, никаких проблем. Но как только я добавляю какой-либо параметр, я получаю ошибку "недопустимый индекс". (Системы.Во время выполнения.InteropServices.COMException: 'недопустимый индекс. (Исключение из HRESULT: 0x8002000B (DISP_E_BADINDEX))'
Я не программист (раньше был программистом VB много лет назад, и мне пришлось учиться .Сеть в считанные дни сделала этот проект, и вот уже четыре месяца он находится в стадии разработки.
Вот мой код ниже:
Imports CrystalDecisions.CrystalReports.Engine Imports CrystalDecisions.Shared Public Class frmViewReport Private Sub rptViewer_Load(sender As Object, e As EventArgs) Handles rptViewer.Load 'On Error Resume Next Dim cryRpt As New ReportDocument Dim crConnectionInfo As New ConnectionInfo Dim CrTables As Tables Dim crtableLogoninfo As New TableLogOnInfo cryRpt.Load(Application.StartupPath & "\CrystalReport2.rpt") With crConnectionInfo .ServerName = ELTDocumentFolder .DatabaseName = "\" & ELTDatabase End With CrTables = cryRpt.Database.Tables For Each CrTable In CrTables crtableLogoninfo = CrTable.LogOnInfo crtableLogoninfo.ConnectionInfo = crConnectionInfo CrTable.ApplyLogOnInfo(crtableLogoninfo) Next Dim crParameterFieldDefinitions As ParameterFieldDefinitions Dim crParameterFieldDefinition As ParameterFieldDefinition Dim crParameterValues As New ParameterValues Dim crParameterDiscreteValue As New ParameterDiscreteValue Dim crParameterDiscreteValue1 As New ParameterDiscreteValue 'cryRpt.SetParameterValue("@Deal_Date", frmSelectReport.DateTimePicker1.Value) crParameterDiscreteValue.Value = frmSelectReport.DateTimePicker1.Value crParameterDiscreteValue1.Value = frmSelectReport.DateTimePicker2.Value crParameterFieldDefinitions = cryRpt.DataDefinition.ParameterFields() crParameterFieldDefinition = crParameterFieldDefinitions.Item("Deal_Date") '<<<ERROR OCCURS HERE crParameterValues = crParameterFieldDefinition.CurrentValues crParameterValues.Clear() crParameterValues.Add(crParameterDiscreteValue) crParameterValues.Add(crParameterDiscreteValue1) crParameterFieldDefinition.ApplyCurrentValues(crParameterValues) Dim tbCurrent As CrystalDecisions.CrystalReports.Engine.Table Dim tliCurrent As CrystalDecisions.Shared.TableLogOnInfo For Each tbCurrent In cryRpt.Database.Tables tliCurrent = Nothing With tliCurrent.ConnectionInfo .ServerName = Application.StartupPath .DatabaseName = Application.StartupPath & "\" & ELTDatabase End With Next tbCurrent rptViewer.ReportSource = cryRpt rptViewer.Refresh() End Sub End Class
Что я уже пробовал:
На прошлой неделе я читал решения по всей сети. Я копировал и вставлял код, проверял имена полей в базе данных, пробовал разные поля
Richard Deeming
Эта ошибка предполагает, что CrystalReport2.rpt
не содержит вызываемого параметра Deal_Date
.
Установите точку останова в строке, где произошла ошибка, и отладьте свой код. Изучить crParameterFieldDefinitions
коллекция, и посмотрите на имена параметров. Имя должно точно совпадать со строкой, в которую вы переходите .Item(...)
.
На первый взгляд, вам, вероятно, нужно включить префикс "@" :
crParameterFieldDefinition = crParameterFieldDefinitions.Item("@Deal_Date")