CRYSTAL REPORTS - RELATORIO VAZIO

FELIPEDRONI 14/05/2012 16:28:31
#401977
Ola pessoal estou de volta com duvidas no crystal(ainda)

Agora tenho o seguinte problema, Crystal esta me retornando um relatório vazio
ou seja eu passo a instrução sql para ele mas parece que ele não acata ou que meu dataset
esta vazio, vou postar o código:

Imports System.Data.SqlClient
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared

Public Class Form1
Dim cnn As SqlConnection
Dim cmd As New SqlCommand
Dim da As New SqlDataAdapter
Dim ds As New DataSet1
Dim strSQL As String

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
cnn = New SqlConnection([Ô]string[Ô])
cmd.Connection = cnn
cmd.Connection.Open()

strSQL = [Ô]select [Cadastro de Produtos].*, tabGradeProdutos.CodigoProd_Grade, tabGradeProdutos.Codigo_Grade, tabGradeProdutos.Desc1_Grade, [Ô] _
& [Ô]tabGradeProdutos.Desc2_Grade,tabGradeProdutos.QtdeEst_Grade, tabGradeProdutos.CodigoForn_Grade, tabGradeProdutos.CodigoBar_Grade [Ô] _
& [Ô]FROM [Cadastro de Produtos] INNER JOIN tabGradeProdutos ON [Cadastro de Produtos].Código = tabGradeProdutos.CodigoProd_Grade [Ô] _
& [Ô]where [Cadastro de Produtos].Marca is not null [Ô]

strSQL = strSQL & [Ô] ORDER BY [Cadastro de Produtos].Marca, tabGradeProdutos.Codigo_Grade[Ô]

cmd.CommandText = strSQL
cmd.CommandType = CommandType.Text

da.SelectCommand = cmd
da.Fill(ds)

Dim relatorio As New CrystalReport1
relatorio.SetDataSource(ds)
CrystalReportViewer1.Refresh()
relatorio.Load([Ô]CrystalReport1[Ô])
CrystalReportViewer1.ReportSource = relatorio
CrystalReportViewer1.Show()
cmd.Connection.Close()

Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
End Class

se alguém poder me ajudar agradeço!
ALTAIR148 14/05/2012 16:46:52
#401981
Você testou essa sua SQL? O erro deve estar nela.
FELIPEDRONI 17/05/2012 15:20:21
#402162
Altair minha query esta perfeita, creio que o problema esta no dataset
dei uma mudada no código mas continua a mesma coisa da uma olhada ai:

Dim relatorio As New CrystalReport1
Dim cnn As SqlConnection
Dim cmd As New SqlCommand
Dim da As New SqlDataAdapter
Dim ds As New DataSet1
Dim strSQL As String

Try
cnn = New SqlConnection([Ô]string[Ô])
cmd.Connection = cnn
strSQL = [Ô]select [Cadastro de Produtos].*, tabGradeProdutos.CodigoProd_Grade, tabGradeProdutos.Codigo_Grade, tabGradeProdutos.Desc1_Grade, [Ô] _
& [Ô]tabGradeProdutos.Desc2_Grade,tabGradeProdutos.QtdeEst_Grade, tabGradeProdutos.CodigoForn_Grade, tabGradeProdutos.CodigoBar_Grade [Ô] _
& [Ô]FROM [Cadastro de Produtos] INNER JOIN tabGradeProdutos ON [Cadastro de Produtos].Código = tabGradeProdutos.CodigoProd_Grade [Ô] _
& [Ô]where [Cadastro de Produtos].Marca is not null [Ô]



strSQL = strSQL & [Ô] ORDER BY [Cadastro de Produtos].Marca, tabGradeProdutos.Codigo_Grade[Ô]

da = New SqlDataAdapter(strSQL, cnn)

ds.Tables.Add([Ô][Cadastro de Produtos][Ô])
ds.Tables.Add([Ô]tabGradeProdutos[Ô])
da.Fill(ds, [Ô][Cadastro de Produtos][Ô])
da.Fill(ds, [Ô]tabGradeProdutos[Ô])

relatorio.SetDataSource(ds.Tables(0))
relatorio.SetDataSource(ds.Tables(1))
CrystalReportViewer1.ReportSource = relatorio


Catch ex As Exception
MsgBox(ex.Message)
End Tr
ALTAIR148 17/05/2012 17:07:17
#402195
Deixa eu ver se entendi, você quer fazer um sub relatório também?
FELIPEDRONI 17/05/2012 17:18:32
#402198
Não, na minha query faço o uso de duas tabelas
se meu código fica assim:

ds = New DataSet1
ds.Tables.Add([Ô][Cadastro de Produtos][Ô])
da.Fill(ds.Tables([Ô][Cadastro de Produtos][Ô]))
relatorio.SetDataSource(ds.Tables([Ô][Cadastro de Produtos][Ô]))

e no relatório eu utilizo apenas os campos desta tabela ele carrega normal
agora se eu coloco um campo da minha segunda tabela( tabGradeProdutos) ele me retorna o relatório vazio
acredito que não estou sabendo usar o dataset e datatable corretamente
deu pra entender ou fico complicado?
ALTAIR148 17/05/2012 17:25:45
#402199
Então, quando eu gero um relatório com mais de uma tabela eu uso um único dataset.
FELIPEDRONI 17/05/2012 17:30:11
#402200
Assim?

da = New SqlDataAdapter(strSQL, cnn)

ds.Tables.Add([Ô][Cadastro de Produtos][Ô])
ds.Tables.Add([Ô]tabGradeProdutos[Ô])
da.Fill(ds, [Ô][Cadastro de Produtos][Ô])
da.Fill(ds, [Ô]tabGradeProdutos[Ô])

relatorio.SetDataSource(ds.Tables(0))
relatorio.SetDataSource(ds.Tables(1))
CrystalReportViewer1.ReportSource = relatorio

ALTAIR148 17/05/2012 17:35:51
#402202
Não, é como se fosse gerar um relatório normal, o que muda é que o nome dos campos no dataset tem que ser idênticos ao que a sua SQL vai retornar. O resto não muda nada, pense que é uma unica tabela, o que muda é apenas os campos no dataset, ex:

Campos que a sua SQL vai retornar:

TABELA PRODUTOS
NOME
VALOR

Tabela Cliente
Cliente_Codigo
Cliente_Nome

Sendo assim os campos no dataset vão ser

NOME
VALOR
Cliente_Codigo
Cliente_Nome


Conseguiu entender?
FELIPEDRONI 21/05/2012 15:11:36
#402401
Altair já não sei mais oque fazer, vou postar o projeto se você poder me dar uma mão
fico muito grato pela ajuda!
Tópico encerrado , respostas não são mais permitidas