Ошибка VB6 / Crystal Report 8.5: здесь требуется строка - PullRequest
1 голос
/ 19 сентября 2008

Я недавно унаследовал старый проект Visual Basic 6 / Crystal Reports, который подключается к базе данных сервера SQL. Я получаю сообщение об ошибке (Ошибка # -2147191803 Здесь требуется строка), когда я пытаюсь запустить проект, кажется, сужается до команды .Printout в следующем коде:

        'Login to database
        Set Tables = Report.Database.Tables
        Set Table = Tables.Item(1)

        Table.SetLogOnInfo ConnName, DBName, user, pass
        DomainName = CStr(selected)
        'Set parameter Fields
            'Declare parameter holders
            Set ParamDefs = Report.ParameterFields
            'Store parameter objects
            For Each ParamDef In ParamDefs
                With ParamDef
                    MsgBox("DomainName : " + DomainName)
                    Select Case .ParameterFieldName
                        Case "Company Name"
                        .SetCurrentValue DomainName

                    End Select

                    Select Case .Name 
                         Case "{?Company Name}" 
                         .SetCurrentValue DomainName
                    End Select 
                    'Flag to see what is assigned to Current value
                    MsgBox("paramdef: " + ParamDef.Value)
                End With
            Next

        Report.EnableParameterPrompting = False

        Screen.MousePointer = vbHourglass
        'CRViewer1.ReportSource = Report
        'CRViewer1.ViewReport


        test = 1
        **Report.PrintOut**

        test = test + 3

        currenttime = Str(Now)
        currenttime = Replace(currenttime, "/", "-")
        currenttime = Replace(currenttime, ":", "-")
        DomainName = Replace(DomainName, ".", "")

        startName = mPath + "\crysta~1.pdf"
        endName = mPath + "\" + DomainName + "\" + DomainName + " " + currenttime + ".pdf"
        rc = MsgBox("Wait for PDF job to finish", vbInformation, "H/W Report")

        Name startName As endName
        Screen.MousePointer = vbDefault
    End If

Во время выполнения появляется форма, переменная ParamDef устанавливает «название компании», а когда она попадает в строку Report.PrintOut , которая запрашивает печать, выдает ошибку. Я предполагаю, что отчет Crystal не получает «Название компании» для правильного запуска отчета Crystal. Кто-нибудь знает, как это диагностировать ... на стороне vb6 или Crystal Reports, чтобы определить, что мне здесь не хватает?

ОБНОВЛЕНИЕ:

  • вставил CStr (выбранный), чтобы DomainName был строкой
  • вставил msgbox в цикл for выше и ниже строки .setcurrentvalue
  • вставлен регистр "{? Company Name}", чтобы проверить, помогает ли это установить значение
  • пробовал функции .AddCurrentValue и .SetCurrentValue в соответствии с рекомендациями других веб-сайтов форума
  • исключил, что это была моя среда разработки .. загрузил его на другую машину с точно такими же отчетами vb6 crystal 8.5, работающими на winxp prof sp2, и появились те же ошибки.

и когда я запускаю MsgBox (ParamDef.Value), он также становится пустым с той же ошибкой пропущенной строки. Я также не могу найти никакой документации по классу craxdrt.ParameterFieldDefinition, чтобы увидеть, какие другие скрытые функции доступны. Когда я вижу список методов и переменных свойств, он не перечисляет SetCurrentValue как одну из функций. Есть идеи по этому поводу?

Ответы [ 6 ]

1 голос
/ 19 сентября 2008

Вот как я устанавливаю свои параметры в Crystal (который поставляется с .NET - не знаю, поможет ли он вам).

Dim dv As New ParameterDiscreteValue
dv.Value = showphone
rpt.ParameterFields("showphone").CurrentValues.Add(dv)
1 голос
/ 19 сентября 2008

selected - это строковая переменная, взятая из формы с выпадающим списком выбора. Ранее я поместил туда окно сообщения, чтобы убедиться, что переменная проходит прямо перед отчетом. Печать выводится. Переменная DomainName также объявляется как строковый тип.

1 голос
/ 19 сентября 2008

Каково значение выбранной вами переменной?

Table.SetLogOnInfo ConnName, DBName, пользователь, пароль
имя_домена = выбрано
'Установить поля параметров

Если это не строка, то это может быть проблемой. Crystal ожидает строковую переменную, а когда он не получает ожидаемого, он выдает ошибки.

0 голосов
/ 22 октября 2008

Вот живой пример настройки используемых нами параметров:

For Each CRXParamDef In CrystalReport.ParameterFields
  Select Case CRXParamDef.ParameterFieldName
    Case "@start"
      CRXParamDef.AddCurrentValue CDate("1/18/2002 12:00:00AM")
    Case "@end"
      CRXParamDef.AddCurrentValue Now
  End Select
Next

На самом деле это пример, написанный на VBScript для печати отчетов Crystal 8.5, но синтаксис тот же для VB6

0 голосов
/ 25 сентября 2008

С моей точки зрения, вы должны получить то же сообщение об ошибке, если откроете отчет в Crystal Reports Designer и переключитесь в режим предварительного просмотра. Дизайнер также должен показать вам сообщение с точным местоположением проблемы, например, поле, которое нельзя рассматривать как строку.

Проблема не в том, что поле длиной более 255 байт не может быть напечатано. Проблема в том, что поле длиной более 255 байтов нельзя использовать в формуле в качестве критерия сортировки ...

0 голосов
/ 22 сентября 2008

Это может произойти в Crystal Reports 8.5, если вы изменили длину столбца строки, который вы используете в своем отчете, чтобы он превышал 255 байт. Это также может произойти, если вы измените тип столбца с varchar на nvarchar (двухбайтовая строка!)

Причина этого в том, что Crystal Reports 8.5 рассматривает все строки длиннее 255 байт как памятные поля.

Я бы предложил вам перейти на Crystal Reports XI - API не сильно изменился.

...