2014-12-05 47 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