Crystal Report e MySQL

lunedì 14 marzo 2005 - 16.56

AntonioM Profilo | Junior Member

Salve a tutti,
vorrei sapere in che modo è possibile creare un report con CR che abbia come fonte un DB MySQL visto che provando le diverse alternative proposte da vb.net (vedi immagine allegata) non ci sono ancora riuscito...
Grazie a tutti in anticipo.

Antonio

trinity Profilo | Guru

puoi tranquillamente farlo però come provider per la connessione a crystal report o utilizzi odbcnet oppure il provider mysql per net che si può scaricare a questo link:
http://dev.mysql.com/downloads/connector/net/1.0.html
però se utilizz quest'ultimo dovrai utlizzare i dataset per poter far vedere le tabelle del tuo database a crystal..

Ciao
Fabio

AntonioM Profilo | Junior Member

Ciao fabio,
grazie per il consiglio, vorrei optare per la seconda possibilità cioè quella di usare un data provider, ne sto usando già uno "MySQLDriverCS", quello che non sto riuscendo a capire è come dopo aver creato il dataset, come fare per visualizzare i dati sul report? Nno potresti farmi un esempio?
Grazie ancora!

Antonio

trinity Profilo | Guru

Da codice non è possibile far vedere le tabelle a crystal report visto che noi utilizziamo un provider che non rientra nell'opzioni di .net, per questo motivo dobbiamo creare una interfaccia virtuale che permetta a crystal report net di vedere le tabelle che servono...a questo punto te devi creare un file di tipo dataset1.xsd, lo aggiungi alla windowsapplications e facendo il tasto di destra del mouse sul foglio di lavoro dovrai aggiungere un nuovo element....in pratica ti permette di costruire in maniera visuale le tabelle in un dataset e questo verrà poi successivamente riempito di dati tramite codice e fatto vedere a crystal repoprt facendo la classica procedura: aggiungi/rimuovi database----dati del progetto----Datasets ADO.NET e quin troverai il dataset creato....

quando crei le tabelle nel file xsd, ti consiglio di inserire come tipo campi sempre String e integer nel caso di valori.

Ciao
Fabio

AntonioM Profilo | Junior Member

Grazie mille Fabio,
ho seguito passo passo quanto mi hai descritto e va tutto ok, ma non sto riuscendo a visualizzare il report. Probabilmente sbaglio nel riempire il dataset creato. Potresti aggiungermi un pezzo di codice per spiegarmi come riempire il dataset?
Grazie 1000!

Antonio

trinity Profilo | Guru

sei però riuscito a far vedere in programmazione le tabelle del dataset a crystal report?

AntonioM Profilo | Junior Member

si ci sono riuscito, ho disposto anche i campi sul report, ma non riesco a riempire il Dataset che ho creato...

trinity Profilo | Guru

Allora fai in questo modo, tieni presente che l'esempio che ti farò vedere prende le tabelle che hai creato nel dataset e le riempe....

dichiari una variabile di tipo dataset:

Dim ds As DataSet = New DataSet
ds.Tables.Add(mytable)

poi riempi la tabella del dataset, tieni però presente che il file xsd serve a livello visivo per collegare le tabelle su crystal report ma in programmazione devi crearti passo passo la tabella del dataset con i vari campi, in questo mdodo:


REM tabella prova
Public Function prova() As DataTable
Dim mytable As DataTable = New DataTable("prova")
Dim mycolumn As DataColumn = New DataColumn
mycolumn.DataType = System.Type.GetType("System.String")
mycolumn.ColumnName = "progressivo"
mytable.Columns.Add(mycolumn)
mycolumn = New DataColumn
mycolumn.DataType = System.Type.GetType("System.String")
mycolumn.ColumnName = "nome"
mytable.Columns.Add(mycolumn)
mycolumn = New DataColumn
mycolumn.DataType = System.Type.GetType("System.String")
mycolumn.ColumnName = "cognome"
mytable.Columns.Add(mycolumn)
mycolumn = New DataColumn
mycolumn.DataType = System.Type.GetType("System.Int32")
mycolumn.ColumnName = "eta"
mytable.Columns.Add(mycolumn)
prova= mytable
End Function

creata la tabella procedi in questo modo ossia riempire i campi con i dati:

sql = "SELECT * FROM cliebte WHERE codcliente='" & Me.Label1.Text & "'"
cmd.Connection = db
cmd.CommandText = sql
dr = cmd.ExecuteReader
mytable = prova()
While dr.Read
myrow = mytable.NewRow()
myrow("progressivo") = dr("codcliente")
myrow("nome") = dr("nomecliente")
myrow("cognome") = dr("cognomecliente")
myrow("eta") = dr("etacliente")
mytable.Rows.Add(myrow)
End While
dr.Close()
ds.Tables.Add(mytable)

Dim prova_stampa As New anagarfica(nome file report)
prova_stampa.SetDataSource(ds)
Me.CrystalReportViewer1.ReportSource = prova_stampa

ciao
fabio

AntonioM Profilo | Junior Member

Ciao fabio,
potresti spiegarmi cos'è quel "dr" che si trova infondo al codice che hai postato? Scusa se sto abusando della tua gentilezza. Grazie 1000 soprattutto per la pazienza...

Antonio

trinity Profilo | Guru

Non ti preoccupare e scusami te che non ti ho spiegato bene, sia il dr che il cmd sono delle variabili che dichiaro per l'Sqldatareader (dr) e l'Sqlcommand (cmd)

Ciao
Fabio

AntonioM Profilo | Junior Member

e "db" cos'è? Ho provato a dichiararlo come SqlConnection ma mi da errore! Sicuramente ho sbagliato...

trinity Profilo | Guru

No è giusto è la varibile che identifica il database, fai così:

Imports System.Data.Sqlclient

Dim db As New SqlConnection()
Dim cmd As New SqlCommand()
Dim dr As SqlDataReader()

se li metti in un modulo e te lo consiglio, dichiarali come Public così li potrai utilizzare in tutto il progetto:

Public db As New SqlConnection()
Public cmd As New SqlCommand()
Public dr As SqlDataReader()

Ciao
Fabio

AntonioM Profilo | Junior Member

Ho risolto!!! Finalmente, l'errore era dovuto al provider "MySQLDriverCS", l'ho sostituito con quello di MySQL "ufficiale" ed ho risolto... cmq adesso do un'occhiata a quanto mi hai scritto nell'ultimo post. Ti faro' sapere, grazie 1000!!!!

Antonio

trinity Profilo | Guru

Di nulla, ciao e buon lavoro

Fabio

AntonioM Profilo | Junior Member

Ciao Fabio
scusa se ti disturbo ancora, ho fatto un po di esercizi con le query per crystal report e tutto è andato bene. Ora non riesco a fare una cosa banale, cioè insere sul report una label e gestirla tramite codice, cioè da codice deve dire io quale sarà il contenuto della label...
Spero tu possa aiutarmi

Grazie ancora

Antonio

trinity Profilo | Guru

potresti sempre creare un campo virtuale come quelli che ti ho fatto vedere ed invece di indicargli un valore del database gli passi dei parametri che gli indichi te...

cmq. ti farò sapere se trovo altre procedure....

Ciao
Fabio

AntonioM Profilo | Junior Member

perfetto fabio va bene la soluzione che mi hai proposto.
Grazie e buon lavoro.

Antonio
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5