CRYSTAL REPORTS - RELATORIO VAZIO
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!
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!
Você testou essa sua SQL? O erro deve estar nela.
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
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
Deixa eu ver se entendi, você quer fazer um sub relatório também?
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?
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?
Então, quando eu gero um relatório com mais de uma tabela eu uso um único dataset.
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
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
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?
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?
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!
fico muito grato pela ajuda!
Tópico encerrado , respostas não são mais permitidas