1

私は最近、SQLサーバーデータベースに接続する古いVisual Basic 6 /CrystalReportsプロジェクトを継承しました。プロジェクトを実行しようとすると表示されるエラーメッセージ(エラー番号-2147191803ここでは文字列が必要です)は、次のコードの.Printoutコマンドに絞り込まれているようです。

        'データベースにログインします
        テーブルの設定=Report.Database.Tables
        テーブルの設定=Tables.Item(1)

        Table.SetLogOnInfo ConnName、DBName、user、pass
        DomainName = CStr(選択済み)
        'パラメータフィールドを設定します
            'パラメータホルダーを宣言します
            ParamDefs=Report.ParameterFieldsを設定します
            'パラメータオブジェクトを保存します
            ParamDefsの各ParamDefに対して
                ParamDefを使用
                    MsgBox( "ドメイン名:" +ドメイン名)
                    Case.ParameterFieldNameを選択します
                        ケース「会社名」
                        .SetCurrentValue DomainName

                    選択を終了

                    Case.Nameを選択します
                         ケース「{?会社名}」
                         .SetCurrentValue DomainName
                    選択を終了
                    '現在の値に何が割り当てられているかを確認するためのフラグ
                    MsgBox( "paramdef:" + ParamDef.Value)
                で終わる
            次

        Report.EnableParameterPrompting = False

        Screen.MousePointer = vbHourglass
        'CRViewer1.ReportSource=レポート
        'CRViewer1.ViewReport


        テスト=1
        ** Report.PrintOut **

        テスト=テスト+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( "PDFジョブが終了するのを待つ"、vbInformation、 "H / Wレポート")

        名前startNameAsendName
        Screen.MousePointer = vbDefault
    終了する場合

実行中にフォームが表示され、ParamDef変数が「会社名」を設定し、印刷を求めるReport.PrintOut行に到達すると、エラーをスローします。クリスタルレポートを正しく実行するための「会社名」がクリスタルレポートに表示されていないようです。これを診断する方法を知っている人はいますか...vb6またはCrystalReports側で、ここで何が欠けているかを判断しますか?

アップデート:

  • DomainNameを文字列にするためにCStr(selected)を挿入しました
  • .setcurrentvalue行の上下のforループにmsgboxを挿入しました
  • Case "{?Company Name}"ステートメントを挿入して、値の設定に役立つかどうかを確認します
  • 他のフォーラムのWebサイトで提案されているように、.AddCurrentValue関数と.SetCurrentValue関数を試しました
  • それは私の開発環境であると除外しました。winxpprofsp2で実行されているまったく同じvb6CrystalReports 8.5を使用して別のマシンにロードすると、同じエラーが発生します。

MsgBox(ParamDef.Value)を実行すると、同じ文字列の欠落エラーで空白になります。また、craxdrt.ParameterFieldDefinitionクラスに関するドキュメントが見つからず、他にどのような非表示の関数が使用可能かを確認できます。メソッドとプロパティ変数のリストを見ると、関数の1つとしてSetCurrentValueがリストされていません。これについて何かアイデアはありますか?

4

6 に答える 6

1

選択した変数の値は何ですか?

Table.SetLogOnInfo ConnName、DBName、user、pass
DomainName =selected
'パラメータフィールドを設定します

文字列でない場合は、それが問題である可能性があります。Crystalは文字列変数を予期しており、期待したものを受け取らない場合はエラーをスローします。

于 2008-09-19T16:13:58.383 に答える
1

selected は、ドロップダウン選択ボックスのあるフォームから取得した文字列変数入力です。Report.Printout の直前に変数が通過することを確認するために、以前はそこにメッセージ ボックスを配置しました。DomainName 変数も文字列型として宣言されます。

于 2008-09-19T16:26:43.547 に答える
1

Crystal でパラメータを設定する方法を次に示します (これは .NET に付属しています。これが役立つかどうかはわかりません)。

Dim dv As New ParameterDiscreteValue
dv.Value = showphone
rpt.ParameterFields("showphone").CurrentValues.Add(dv)
于 2008-09-19T18:20:10.560 に答える
0

私の見解では、Crystal Reports Designer でレポートを開いてプレビュー モードに切り替えると、同じエラー メッセージが表示されるはずです。Designer は、問題の正確な場所 (文字列として扱うことができないフィールドなど) を示すメッセージも表示する必要があります。

問題は、255 バイトを超えるフィールドを印刷できないことではありません。問題は、ソート基準として、255 バイトを超えるフィールドを数式で使用できないことです...

于 2008-09-25T07:13:15.120 に答える
0

これは、Crystal Reports 8.5 で、レポートで使用する文字列列の長さが 255 バイトを超えるように変更した場合に発生する可能性があります。これは、列の型を varchar から nvarchar (2 バイト文字列!) に変更した場合にも発生する可能性があります。

これは、Crystal Reports 8.5 が 255 バイトを超えるすべての文字列をメモ フィールドとして扱うためです。

Crystal Reports XI にアップグレードすることをお勧めします。API はそれほど変更されていません。

于 2008-09-22T09:55:09.033 に答える
0

以下は、使用するパラメーターを設定する実際の例です。

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

これは実際には、Crystal 8.5 レポートを印刷するために VBScript で記述されたサンプルですが、構文は V​​B6 でも同じです。

于 2008-10-21T22:32:56.017 に答える