2014-12-05 63 views
-1

我有一個按鈕,顯示另一種形式的參數發送給一個水晶報表,但之後我點擊該按鈕,它總是顯示數據庫登錄,我必須輸入用戶名和密碼。當我勾選「使用集成安全性」時,它失敗了。 我的問題是如何連接到數據庫而不顯示登錄?如何在使用Crystal報表時避免登錄提示?

Imports CrystalDecisions.CrystalReports.Engine 
Imports CrystalDecisions.Shared 

Public Class param_list_agree 

Private Sub Cmdpreview_Click(sender As Object, e As EventArgs) Handles Cmdpreview.Click 
    Call opendb() 

    Dim cryrpt As New ReportDocument 
    cryrpt.Load("D:\Report\List_Agreement.rpt") 
    Dim crparamdfs As ParameterFieldDefinitions 
    Dim crparamdf As ParameterFieldDefinition 
    Dim crparamvl As New ParameterValues 
    Dim crparamdisvl As New ParameterDiscreteValue 
    Dim konek As New ConnectionInfo 



    crparamdisvl.Value = DTP1.Text 
    crparamdfs = cryrpt.DataDefinition.ParameterFields 
    crparamdf = crparamdfs.Item("@date_to") 
    crparamvl = crparamdf.CurrentValues 

    crparamvl.Clear() 
    crparamvl.Add(crparamdisvl) 
    crparamdf.ApplyCurrentValues(crparamvl) 

    rpt_listagree.CrystalReportViewer1.ReportSource = cryrpt 
    rpt_listagree.CrystalReportViewer1.Refresh() 
    rpt_listagree.Show() 

    'CrystalReportViewer1.ReportSource = cryrpt 
    'CrystalReportViewer1.Refresh() 
    With konek 
     .ServerName = "ServerName" 
     .DatabaseName = "DatabaseName" 
     .UserID = "UserID" 
     .Password = "Password" 
     .IntegratedSecurity = False 
    End With 
    Me.Close() 
End Sub 

Private Sub param_list_agree_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    Call opendb() 
End Sub 
End Class 
+0

在你的代碼,你試過沒有設置.'UserID'和'.Password',並設置'.IntegratedSecurity = TRUE'?實際上,這似乎是多餘的代碼,因爲'konek'甚至沒有被使用,據我所知。也許這是你的問題。 – DeanOC 2014-12-05 03:03:03

+0

我們不需要再使用'Call'關鍵字。 – OneFineDay 2014-12-05 03:04:20

+0

它一樣,總是顯示數據庫登錄 – 2014-12-05 03:18:39

回答

1

對於初學者,請務必在加載/設置參數之前設置您的登錄信息。如果參數是以任何方式動態的,他們將嘗試訪問數據庫,並且沒有設置登錄信息。

任何時候你得到彈出對話登錄,這意味着水晶試圖訪問數據庫中的報告中設定的連接設置之前(或連接信息不正確)。

***編輯

Dim cryrpt As New ReportDocument 
cryrpt.Load("D:\Report\List_Agreement.rpt") 
Dim crparamdfs As ParameterFieldDefinitions 
Dim crparamdf As ParameterFieldDefinition 
Dim crparamvl As New ParameterValues 
Dim crparamdisvl As New ParameterDiscreteValue 
Dim konek As New ConnectionInfo 

'Login FIRST 
With konek 
    .ServerName = "ServerName" 
    .DatabaseName = "DatabaseName" 
    .UserID = "UserID" 
    .Password = "Password" 
    .IntegratedSecurity = False 
End With 

'THEN set your parameters 
crparamdisvl.Value = DTP1.Text 
crparamdfs = cryrpt.DataDefinition.ParameterFields 
crparamdf = crparamdfs.Item("@date_to") 
crparamvl = crparamdf.CurrentValues 

crparamvl.Clear() 
crparamvl.Add(crparamdisvl) 
crparamdf.ApplyCurrentValues(crparamvl) 

rpt_listagree.CrystalReportViewer1.ReportSource = cryrpt 
rpt_listagree.CrystalReportViewer1.Refresh() 
rpt_listagree.Show() 

'CrystalReportViewer1.ReportSource = cryrpt 
'CrystalReportViewer1.Refresh() 
+0

感謝約翰的代碼,但我需要把一組登錄,像我用什麼劇本? ?請給我例子與上面的腳本 – 2014-12-08 02:47:11

+0

還有更多的不僅僅是該代碼。我的觀點是你需要先登錄。我不是從頭到尾編寫所有的代碼。 – 2014-12-12 17:06:21

相關問題