[ mmilinca @ 26.11.2005. 12:47 ] @


Please help.

Razvijam windows aplikaciju za upravljanje humanim resursima jedne firme.
Postoji potreba za stampanjem odredjenih izvestaja,
pokusao sam sa PrintDocument1.Print() ali dokumenti nisu pregledni, ne znam kako da dokument podelim na strane za stampu i ostalo.

CrystalReport izvestaje nisam uspeo da ukljucim u svoju aplikaciju.
Uspeo sam probu kada se aplikacija zasniva na access bazi(koriscenjem wizarda), ali mi to ne polazi za rukom za mysql.

Potreban mi je deo koda kako se na formi ukjlucuje prikaz izvestaja, i kako se izvestaj povezuje sa bazom

Pozdrav od pocetnika
[ kleo @ 26.11.2005. 14:25 ] @
Napravis prvo konekciju ka serveru (MySql) u VS (Tools->Connect to Database),zatim kreiras CrystalReport ( Project->Add New Item->CrystalReport) pomocu wizarda....
[ mmilinca @ 28.11.2005. 06:54 ] @


Nisi mi bas od pomoci.
Mene zanima kako da kada CrystalReportViewer postavim na formu, i kreiram Izvestaj preko wizarda koji ce se na formi prikazivati, dobijem da mi se taj izvestaj i vidi, a ne kao sto dobijam poruku "Failed to open row set"

Pozdrav
[ kuzmam @ 28.11.2005. 09:04 ] @
Da bi izbegao gresku koja ti se javlja, i ujedno direktnu vezu za bazom prilikom kreiranja izvestaja (tzv. Pull metoda), imas varijantu Push metode, gde prvo kreiras dataset sa podacima koji su ti potrebni (xsd fajl), popunis ga iz koda, i pozoves metodu SetDataSource koja pripada tvom Report objektu. Posle samo na instancu Viewer-a pozoves property ReportSource i dodelis mu vrednost svog ranije kreiranog report objekta. Nadam se da sam ti bar malo pomogao.
U zdravlje i svako dobro
[ mmilinca @ 28.11.2005. 12:08 ] @
to kuzmam:
Meni je konceptualno jasno to sto mi pricas,ali mi nazalost nije od pomoci.
Jer totalnom pocetniku znace samo primeri koda
1. primer za .xsd fajl, kako se definise
2.primer punjenja iz koda rezultatima nekog upita
Ovo ostalo sto si pomenu mislim da bih mogao da uradim

A
[ kuzmam @ 28.11.2005. 12:31 ] @
Xsd fajl ti kreira sam visual studio (Add->New->DataSet).
Mozes da prevlacis tabele u taj dataset (preko Server Explorera uspostavis konekciju na bazu), ili da sam dodajes kolone koje ti trebaju. Pogledaj malo, dosta je user friendly. DataSet popunjavas preko DataAdaptera, pogledaj malo Ado.Net API ako si totalni pocetnik. Ne bi trebalo da ti predstavlja problem.

[ negyxo @ 29.11.2005. 02:36 ] @
Pretpostavljam da podatke ucitavas preko System.Data.Odbc.OdbcConnection

Code:

//prvo izvuces podatke
OdbcConnection cnn = new OdbcConnection("Ovde ide tvoj connection string...");
OdbcCommand cmd = new OdbcCommand("SELECT bla, bla, bla...", cnn);
OdbcDataAdapter adp = new SqlDataAdapter(cmd);                

//DataTable je sasvim dovoljan
DataTable dt = new DataTable();

//Napunis
cnn.Open();    
adp.Fill(dt);
cnn.Close();    

//Boundujes :)
reportDocument.SetDataSource(dt);            
crViewer.ReportSource = reportDocument;

//crViewer - CrystalDecisions.Windows.Forms.CrystalReportViewer
//reportDocument - CrystalDecisions.CrystalReports.Engine.ReportDocument



Ovo je pod uslovom da si kreirao izvestaj preko command-e tj. da si se podatke izvlacio preko sql command-e.

...doduse, ovo je C# ali potrebna je najobicnija izmena sintakse da ti ovo proradi

[ mmilinca @ 29.11.2005. 07:47 ] @
Code:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim conn = New MySqlConnection
        conn.ConnectionString = "database=upravljanje"
        Try
            conn.Open()
            Dim myCommand As New MySqlCommand
            Dim SQL2 As String
            SQL2 = "select ime,prezime  from zaposleni"
            myCommand.Connection = conn
            myCommand.CommandText = SQL2
            Dim mysqlAdapter As New MySqlDataAdapter
            mysqlAdapter.SelectCommand = myCommand
            Dim myData As New DataTable
            mysqlAdapter.Fill(myData)


            'Boundovanje
            Dim reportDocument As New ReportDocument
            reportDocument.SetDataSource(myData)

            Dim crViewer As New CrystalDecisions.Windows.Forms.CrystalReportViewer
            crViewer.ReportSource = reportDocument

            conn.Close()
            conn.dispose()
        Catch ex As MySqlException
            MessageBox.Show("Doslo je do greske u radu aplikacije, probajte ponovo", "UPOZORENJE !!!", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

    End Sub


Prijavljuje gresku
An unhandled exception of type 'CrystalDecisions.CrystalReports.Engine.LoadSaveReportException' occurred in crystaldecisions.crystalreports.engine.dll
Additional information: Invalid report file path.

U cemu je problem?
[ kuzmam @ 29.11.2005. 08:49 ] @
Problem je u tome da ti rpt file verovatno nije u istom direktorijumu sa klasom iz koje ga pozivas, a fali ti i jedno report.Load() nakon instanciranja ReportDocument klase
[ mmilinca @ 29.11.2005. 09:41 ] @
Rpt fajl jeste u istom direktorijumu, a load ne pomaze

I dalje ne kapiram zasto cela prica radi sa access bazom ,a ne radi sa mysql bazom
[ negyxo @ 29.11.2005. 12:26 ] @
Jaoo mmilinca-uuuuuuuuuuuuuuuuuu...

Izgleda da ti je dosta stvari nejasno, bar po ovom kodu sto si postovao.

Prvo, kako mislis da pokazes podatke na formi?
Koliko vidim ti si istancirao direktno u form load CrystalReportViewer kontrolu, nigde je nisi dodao u controls kolekciji od forme ili nekog drugog objekta.
Drugo, ti si samo instacirao prazan reportDocument. Prazan znaci da on nema nista nikakvu definiciju za polja, raspored itd. Verovatno te je zbunio onaj kod sto sam postovao.
Code:

//CrystalDecisions.CrystalReports.Engine.ReportDocument

Verovatno sam trebao napisati
Code:

//derived CrystalDecisions.CrystalReports.Engine.ReportDocument class
//ili ti na srpskom, nasledjena klasa ReportDocument-a


Znaci ili ces u kreiranoj instanci ReportDocument ucitati izvestaj sa Load metodom ili ces instacirati vec gotov report koji si kreirao/importovao iz VS-a.

Primer
1.)
Code:

Dim reportDocument As New ReportDocument
reportDocument.Load("C:\MojReport.rpt")
'pa tek onda boundoujes podatke
reportDocument.SetDataSource(myData)


2.)
Code:

'mojReport je klasa koju VS kreira kad kreiras novi crp fajl
'ona ti je nasledjena od CrystalDecisions.CrystalReports.Engine.ReportDocument klase
Dim reportDocument As New mojReport
reportDocument.SetDataSource(myData)


I na kraju dodaj lepo CrystalReportViewer kontrolu iz designer-a a ne rucno, bice ti lakse :)

Pozdrav
[ negyxo @ 29.11.2005. 12:41 ] @
Tek sad vide da si vec odgovorio na load.

Ali bilo bi dobro da post-ujes kod. Ovako mozemo da nagadjamo. Pretpostavljam da kad kazes da se report nalazi u istom direktorijumu onda je pitanje kom? Kod VB-ovaca, mislim na ove sto su radili u 6 i manje, je problem sto misle da Application.StartupPath vraca isto sto i App.Path kad se radi u VS-u i tu onda nastaje problem. Application.StartupPath vraca StartupPath od assembly-a koji je u zavisnosti od Solution Configuration pokrenut iz debug ili release moda. Pa samim tim i Application.StartupPath moze da vrati ..\bin\Release ili ..\bin\Release. Naravno ovo je samo nagadjanje. Bilo bi najbolje da budes detaljan.
[ mmilinca @ 29.11.2005. 13:24 ] @
evo koda

Code:

Imports MySql.Data
Imports System.Xml
Imports MySql.Data.MySqlClient
Imports CrystalDecisions.CrystalReports.Engine
...
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'DEO KODA KOJI PRIKAZUJE  DUGOVANJA SVIH ZAPOSLENIH
        Dim conn = New MySqlConnection
        conn.ConnectionString = "database=upravljanje"
        Try
            conn.Open()
            'povezali smo se na bazu upravljanje
            'MessageBox.Show("povezali smo se na mysql bazu")
            Dim myCommand As New MySqlCommand
            Dim SQL2 As String
            SQL2 = "select z.ime,z.prezime from zaposleni z"
            myCommand.Connection = conn
            myCommand.CommandText = SQL2
            Dim mysqlAdapter As New MySqlDataAdapter
            mysqlAdapter.SelectCommand = myCommand
            Dim myData As New DataTable
            mysqlAdapter.Fill(myData)

            Dim reportDocument As New ReportDocument
            reportDocument.Load("C:\Documents and Settings\User\My Documents\projekat\Izvestaji\CrystalReport3.rpt")
            reportDocument.SetDataSource(myData)

            MessageBox.Show("prosao kroz set data sourse")



            conn.Close()
            conn.dispose()
        Catch ex As MySqlException
            MessageBox.Show("Doslo je do greske u radu aplikacije, probajte ponovo", "UPOZORENJE !!!", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub


GRESKA
- kada u properties za crystal report viewer ne postavim report source , izvestaj se ne otvara
- kada to uradim, prijavljuje mi gresku failed to open row set
[ negyxo @ 30.11.2005. 09:03 ] @
Pa ti na svakom postu izbacis drugi exception :)

Onaj prvi sto si izbacio
Citat:

An unhandled exception of type 'CrystalDecisions.CrystalReports.Engine.LoadSaveReportException' occurred in crystaldecisions.crystalreports.engine.dll
Additional information: Invalid report file path.

Se obicno javlja na ASP .NET projektima kada se ucitava izvestaj sa Load metodom ReportDocument-a. Problem je u tome sto Crystal ne ucitava izvestaj sa date lokacije nego njegovu kopiju koju on namesti u Windows\Temp direktorijumu. Bar sam tako procitao na netu a i za ReportDocument.Load na MSDN pise
Citat:

Loads a new report. If a report is already loaded, then it is closed and a new one is opened. By default, the report is opened as a temporary copy.

Da bi se ovo resilo obicno je dovoljno dati permission za acount koji zeli da pristupi ovom direktorijumu, sto je u ovom slucaju ASPNET. Ali kod tebe je Windows Forms aplikacija pa pretpostavljam da radis sa admin accounta. tako da ti onda ovo mozda i nije problem.


Za ovu tvoju zadnju gresku
Citat:

failed to open row set

Mislim da je problem kod povezivanja Crystal-a i tvojih podataka. Bitno je i to kako si napravio izvestaj, odnosno preko kog data source-a. Ovo sto sam ti ja bio napisao je preko
OLE DB (ADO) ->jedan od provajdera (prim. Microsoft OLE DB Provider For SQL Server)->Add Command
Mada nisam siguran, mozda moze i da radi u kombinaciji i sa
More Data Sources ->ADO.NET (xml)->xml schema
Za ostalo mislim da moras da ides preko
CrystalDecisions.Shared.ConnectionInfo klase tj. da se povezes sa svojim podacima.
[ mmilinca @ 02.12.2005. 08:32 ] @

Hvala vam ljudi, bili ste mi od velike pomoci, ali imam jos jedan problem.

Kako da procitane podatke iz baze, koji su nasi karakteri, odnosno utf8, prikazem kao takve. Kada radim sa DataGrid-om podaci se ispravno vide, a na CrstalReport izvestaju se vide kao ?

Please HELP!!!
[ negyxo @ 02.12.2005. 08:59 ] @
U kojoj verziji Crystal-a radis?
[ mmilinca @ 02.12.2005. 09:44 ] @
Crystal Reports sam instalirao sa Microsoft Visual Studio .NET 2003, i ne znam koja je to verzija

Problemi reseni!!!


HVALA. ovaj forum je najzesci i odusevljava me, od kad sam poceo da koristim visual basic.net preko ovog foruma sam resio desetine problema.

Pozdrav!!!

[Ovu poruku je menjao mmilinca dana 03.12.2005. u 09:39 GMT+1]