2008-09-19 73 views
1

我最近繼承了一個連接到sql server數據庫的舊的visual basic 6/crystal reports項目。當我嘗試運行該項目我得到(錯誤#-2147191803一個字符串這裏需要)的錯誤信息,似乎在下面的代碼將被縮小到.Printout命令:VB6/Crystal Report 8.5錯誤:這裏需要一個字符串

 
     '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變量設置「公司名稱」,當它到達提示打印的行時,它會拋出錯誤。我猜水晶報告沒有收到「公司名稱」來正確運行水晶報告。是否有人知道如何診斷這個......無論是在vb6還是水晶報告方面,以確定我在這裏失蹤的東西?

UPDATE:

  • 插入的CStr的(所選擇的)來強制域名是一個字串
  • 插入msgboxes到for循環的上方和.setcurrentvalue線以下
  • 插入案「{?公司名稱}「聲明,看看是否有助於設置值
  • 嘗試.AddCurrentValue和.SetCurrentValue函數建議由其他論壇網站
  • 排除了這是我的開發environement ..加載它在另一臺機器上完全相同的vb6水晶報告8.5運行在winxp prof sp2上並出現相同的錯誤。

,當我運行MSGBOX(ParamDef.Value),也變成了空白含有相同缺少字符串錯誤。我也找不到有關craxdrt.ParameterFieldDefinition類的任何文檔,以查看可用的其他隱藏函數。當我看到方法和屬性變量列表時,它沒有列出SetCurrentValue作爲其中一個函數。 有關於此的任何想法?

回答

1

你選擇的變量的值是多少?

Table.SetLogOnInfo CONNNAME,數據庫名,用戶,通過
域名=選擇
「設置參數字段

如果它不是一個字符串,那麼這可能是問題。 Crystal期望一個字符串變量,當它沒有收到它期望的內容時,它會拋出錯誤。

1

selected是從具有下拉選擇框的表單中獲取的字符串變量輸入。我之前在那裏放置了一個消息框,以確保在Report.Printout之前有變量正在傳遞,並且確實出現了。 DomainName變量也被聲明爲字符串類型。

1

下面是我如何在Crystal中設置參數(.NET附帶的 - 不知道它是否對您有幫助)。

Dim dv As New ParameterDiscreteValue 
dv.Value = showphone 
rpt.ParameterFields("showphone").CurrentValues.Add(dv) 
+0

謝謝,但這並沒有真正的幫助。它設置參數的方式似乎完全不同於.NET – phill 2008-09-23 16:32:34

0

這可能發生在Crystal Reports 8.5,如果你改變,使超過255個字節您在報表中使用字符串列的長度。如果將列類型從varchar更改爲nvarchar(雙字節字符串!),也會發生這種情況。

原因是水晶報告8。5將長度超過255個字節的所有字符串視爲備註字段。

我建議你升級到水晶報告XI - API沒有改變那麼多。

+0

我將檢查列變量類型。 至於升級,我已經嘗試在水晶報表xi中運行它,它會產生一個運行時錯誤。它與Crystal Report Engine Library DLL有關,它在這兩個版本之間進行了修改 感謝您的建議! – phill 2008-09-23 15:47:20

0

從我的角度來看,如果您在Crystal Reports Designer中打開報表並切換到預覽模式,您應該會看到相同的錯誤消息。設計者還應該向您顯示一個包含問題確切位置的信息,例如該字段不能被視爲字符串。

問題不是長度超過255個字節的字段無法打印。問題是,超過255個字節的字段不能在公式中使用,作爲一種標準...

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 

這是實際上是用VBScript編寫的用於打印Crystal 8.5報告的示例,但VB6的語法相同

相關問題