sachin100k Ответов: 5

Crystal Report в Visual Studio с Access 2007


Я могу создать отчет в Visual Studio 2008 с базой данных Access 2007 с помощью драйвера ODBC или OLEDB. Но когда я пытаюсь распечатать его (после запуска кода), я получаю ошибку недопустимых параметров входа в систему, в то время как он хорошо работал с базой данных Access 2003. Ниже приведен мой код:

creport_laundry crReportDocument = new creport_laundry();
            Database crDatabase;
            Tables crTables;
            Table crTable;
            TableLogOnInfo crTableLogOnInfo;
            ConnectionInfo crConnectionInfo = new ConnectionInfo();
 
            crConnectionInfo.ServerName = @"d:\db2.accdb";
            crConnectionInfo.DatabaseName = @"d:\db2.accdb";
 
            crConnectionInfo.Password = "xyz"
            crDatabase = crReportDocument.Database;
            crTables = crDatabase.Tables;
            for (int i = 0; i < crTables.Count; i++)
            {
                crTable = crTables[i];
                crTableLogOnInfo = crTable.LogOnInfo;
                crTableLogOnInfo.ConnectionInfo = crConnectionInfo;
                crTable.ApplyLogOnInfo(crTableLogOnInfo);
            }
crReportDocument.PrintToPrinter(1, false, 0, 0);


Я потратил на это более 10 часов без какого-либо решения. Любая помощь будет высоко оценена.

5 Ответов

Рейтинг:
2

sachin100k

Что такое clsHlpr и crys ?
Что такое mainR.rpt - - - я использую Crystal Reports, встроенный в Visual Studio; поэтому не уверен, что этот файл будет найден;
И делать это через строку подключения было бы моим последним предпочтением, так как существует более 100 отчетов :(


.................................................................................................................

Следуя приведенному выше коду, я добрался до решения, но опять же это будет означать изменение 100 + отчетов(любое решение, где строка подключения не задается через код(и тот, который используется в Crystal Report Designer), по-прежнему очень приветствуется :) :

CrystalReport1 rpt1=новый CrystalReport1();
OleDbCommand com=new OleDbCommand ("SELECT * FROM lo_bill_det");
ком.CommandType = CommandType. Text;
ком.Connection = con;/ / " give connection to command
OleDbDataAdapter adp= new OleDbDataAdapter ();/ / " объявить адаптер
adp. SelectCommand = com ; / / " выберите команду для работы с adpaper

adp. Fill(ds1, "Кристалл");/ / " заполнить набор данных через адаптер
пробовать
{
rpt1.DataSourceConnections[0].Установитесвязь("",@GlobalClass.hostIP,ложь); // GlobalClass.hostIP является //путь к базе данных
rpt1.DataSourceConnections[0].SetLogon ("Admin", "");

}
ловить
{}

rpt1.SetDataSource(ds1. Tables ["Crystal"]);/ / " выберите набор данных для источника отчета
rpt1.PrintToPrinter(1, false, 0, 0);


РЕШЕНИЕ, НО ТОЧНОЕ РЕШЕНИЕ ВСЕ ЕЩЕ ЖДЕТ...


Рейтинг:
1

sachin100k

Во-первых, имя сервера при подключении к базе данных Access содержит полный путь, и он хорошо работал с Access 2003
Во-вторых, даже идентификатор пользователя и пароль не требовались в базе данных Access 2003
Наконец, я все еще следовал вашему решению, но безрезультатно. пожалуйста помочь :(


Рейтинг:
1

Michael Zhang

Это утверждено правильно!
Я трачу полдня на исследования! не могу найти никаких документов в интернете.

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim rpt As New ReportDocument
        Dim A As CrystalDecisions.CrystalReports.Engine.Table
        'Dim B As CrystalDecisions.Shared.TableLogOnInfo

        Dim tblLog As TableLogOnInfo
        rpt.Load("C:\report file.rpt")
        rpt.RecordSelectionFormula = "" '"({CommissionTable.SalesRep}='" & 123 & "') "
        Dim cnnInfo As New ConnectionInfo
        With cnnInfo
            .Type = ConnectionInfoType.CRQE  ' ODBC type
            .ServerName = "ERP" 'ODBC name, no need password here
        End With
        'rpt.Load("c:\database.mdb")
        For Each A In rpt.Database.Tables
            tblLog = A.LogOnInfo
            tblLog.ConnectionInfo = cnnInfo
            A.ApplyLogOnInfo(tblLog)
        Next

        CrystalReportViewer1.ReportSource = rpt

    End Sub


Richard MacCutchan

Приятно не постить в старых вопросах. Ответ на этот вопрос был дан более пяти лет назад.

Рейтинг:
0

thatraja

Я проверил ваш код и нашел некоторые проблемы.

Вы должны передать значения для этих 4 параметров, как показано ниже

crConnectionInfo.ServerName = "MachineName";//It should be machine name
crConnectionInfo.DatabaseName = @"d:\db2.accdb";
crConnectionInfo.UserID = "Administrator";//You forgot to give value for this
crConnectionInfo.Password = "xyz"


дальнейшее чтение
C# Crystal сообщает о динамических параметрах входа в систему[^]


sachin100k

Во-первых, он хорошо работал с базой данных Access 2003
Во-вторых, для имени сервера базы данных Access получает полный путь (и это сработало для базы данных access 2003)
Идентификатор пользователя и пароль также следуют тому же правилу.
В-третьих, я последовал вашему совету, но с тем же результатом !! пожалуйста помочь:(

sachin100k

Во-первых, имя сервера при подключении к базе данных Access содержит полный путь, и он хорошо работал с Access 2003
Во-вторых, даже идентификатор пользователя и пароль не требовались в базе данных Access 2003
Наконец, я все еще следовал вашему решению, но безрезультатно. пожалуйста помочь :(

Рейтинг:
0

Rajesh Lagaria

я надеюсь, что это поможет :-

DataSet ds = new DataSet();
            
            creport_laundry crReportDocument  = new creport_laundry();
            ReportDocument rptFile = new ReportDocument();
            ds = clsHlpr.ExecuteDataset(connection_name, CommandType.Text, "select * from abc");
            if (ds.Tables[0].Rows.Count > 0)
            {
                rptform.Text = ".........";
                rptFile.Load(Application.StartupPath + "\\mainR.rpt");
                
                crReportDocument.crys.ReportSource = rptFile;
                rptFile.SetDatabaseLogon("admin", "lbbs");
                rptFile.SetDataSource(ds);
                crReportDocument.crys.RefreshReport();
                rptFile.Refresh();
                rptFile.PrintToPrinter(1, false, 0, 0);// for send repot direct to print
                      //or
                crReportDocument.crys.Show();//for show report
                crReportDocument.Show();

                            }