2014-12-05 3 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'? На самом деле это, кажется, избыточный код, поскольку «конек» даже не используется, насколько я могу судить. Возможно, это проблема с ур. – DeanOC

+0

Нам больше не нужно использовать ключевое слово 'Call'. – OneFineDay

+0

То же самое, всегда показывать базу данных логина –

ответ

1

Для начала всегда указывайте свою регистрационную информацию перед загрузкой/установкой параметров. Если параметры динамичны каким-либо образом, они попытаются получить доступ к базе данных, и никакая информация для входа не была установлена.

В любое время, когда вы получаете всплывающее диалоговое окно для входа в систему, это означает, что Crystal попытался получить доступ к базе данных в отчете до того, как были установлены настройки соединения (или информация о соединении неверна).

*** EDIT

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

. Спасибо, john, но где мне нужно ввести логин и как тот сценарий, который я использую? ? пожалуйста, дайте мне пример со сценарием выше. –

+0

Там больше, чем только этот код. Я хотел сказать, что вам нужно сначала войти в систему. Я не пишу весь код от начала до конца. –