Usuário com melhor resposta
dificuldade em montar relat. em crystal

Pergunta
-
Boa Tarde!!!
Entao to tentando fazer um relatorio mas to tendo dificuldade na hora de montar o codigo em vb pra exibir os dados desejados
eu tenhu 5 tabelas
Contrato(Id_Contrato , Id_Estab, Id_Emp, Id_Cartao,...)
Estabelecimento(Id_estab, Nome_estab,...)
Empresa(Id_Emp, Nome_Emp,....)
Cartao(Id_Cartao, Nome_Carta,...)
Remessa(Id_Remessa, IdContrato,Dt_Remessa, Vlr_liq, Vlr_Brt, Vlr_Diverg)
assim preciso de um relatorio q eu selecione a data inicial da remessa e data final e seja possivel selecionar por empressa por estabelecimento e cartao
se alguem poder me dar uma mao
agradeço desde jah
Respostas
-
Maykonctrl,
Para fazer um filtro com data utilizando o banco de dados eu faço assim:
Exemplo com banco de dados ACCESS + Relatório no Crystal Reports
Referências do form:
Code SnippetOption
Explicit OnOption
Strict On'provider do banco de dados ACCESS
Imports
System.Data.OleDbImports
System.Data'crystal reports
Imports
CrystalDecisions.CrystalReports.EngineImports
CrystalDecisions.Shared'outros
Imports
System.Text 'StringBuilderImports
System.Configuration 'ConnectionStringsImports
System.IO 'Path.CombineAdicionar no Form Load
Code SnippetPreviewRelClientes(CarregarListaClientes(DateSerial(2008, 1, 1), DateSerial(2008, 12, 31)))
Sub responsável pela visualização do relatório
Code SnippetPrivate Sub PreviewRelClientes(ByVal oTable As DataTable)
'
'visualizar o relat¢rio "rptCustomer.rpt" utilizando a fun‡Æo CarregarListaClientes() ' Try '1 passo: definindo o relat¢rio a ser visualizado (ReportPath) 'rptCustomer: nome do relat¢rio do crystal reports ' Dim crReportDocument As New rptCustomer '2 passo: definindo o DataSource do relat¢riocrReportDocument.SetDataSource(oTable)
'3 passo: visualizando o relat¢rio... ' 'crPreview: nome do controle CrystalReportViewecrPreview.DisplayGroupTree =
FalsecrPreview.ReportSource = crReportDocument
Catch ex As ExceptionMsgBox(ex.Message)
End Try End SubFunção responsável pela pesquisa dos dados no banco de dados Access (com filtro por data para resolver a sua dúvida)
Code SnippetPrivate Function CarregarListaClientes(ByVal datInicial As Date, _
ByVal datFinal As Date) As DataTable
'definindo a string de conexÆo do banco de dados
Dim strConexao As String = "" 'caso o banco de dados esteja no mesmo diret¢rio da aplica‡Æo 'strConexao = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\AWorksLite.mdb;Persist Security Info=True"strConexao =
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=G:\Novos\Access\AWorks\AWorksLite.mdb;Persist Security Info=True" Dim oConn As New OleDbConnection(strConexao) Dim strSQL As New StringBuilder Dim oTable As New DataTable() Dim oCmd As OleDbCommand = Nothing Try 'abrindo conexÆo com o banco de dados.oConn.Open()
'definindo o SQLstrSQL.Append(
" Select CustomerID ")strSQL.Append(
" ,CustomerName")strSQL.Append(
" ,Phone")strSQL.Append(
" ,EmailAddress")strSQL.Append(
" ,AddressLine")strSQL.Append(
" ,City")strSQL.Append(
" ,StateProvinceName")strSQL.Append(
" ,PostalCode")strSQL.Append(
" ,CountryName")strSQL.Append(
" ,LastUpdate ")strSQL.Append(
" FROM Customer inner join Country ")strSQL.Append(
" on Customer.CountryID = Country.CountryID ")strSQL.Append(
" Where LastUpdate between @DatInicial and @DataFinal ")strSQL.Append(
" Order by CustomerName ") 'definindo os parƒmetros do SqlCommandoCmd =
New OleDbCommand(strSQL.ToString, oConn)oCmd.CommandType = CommandType.Text
oCmd.Parameters.Add(
New _OleDbParameter(
"@DatInicial", SqlDbType.DateTime)).Value = datInicialoCmd.Parameters.Add(
New _OleDbParameter(
"@DataFinal", SqlDbType.DateTime)).Value = datFinal 'carregando os dados do banco de dados Dim oDataReader As OleDbDataReader = _oCmd.ExecuteReader(CommandBehavior.CloseConnection)
'carregar o DataTable com base no DataReaderoTable.Load(oDataReader)
Catch ex As ExceptionMsgBox(ex.Message)
Finally 'liberando os objetosoConn.Dispose()
oConn =
Nothing End Try Return oTable End FunctionEspero ter ajudado!
Todas as Respostas
-
E ai Maykonctrl,
Criei um tópico fixo no fórum MSDN com algumas dicas sobre a construção de relatórios com Crystal Reports e ReportView (incluindo 2 vídeos com vários exemplos de como construir relatórios com os componentes, licença, distribuição, service packs, etc.):
http://forums.microsoft.com/MSDN-BR/ShowPost.aspx?PostID=3761576&SiteID=21
Valeu!
Ajude a melhorar o nosso Fórum!
Não esqueça de marca a mensagem como "útil", caso tenha ajudado. -
Então Laercio
eu jah vi os videos mas na hora de montar a parte do codigo no vb pra exibir os dados nao to conseguindo a parte de montar o relatorio e o dataset eu vi no video e consegui montar mas a parte do codigo to tendo dificuldades
fiz um form nele coloquei 2 datetimepicker (para data inicial e data final) e 3 combo pra listar as empresas e outro para lista os estabelecimentos e outro p/ cartao
Vc poderia me ajudar no codigo q nao to conseguindo montar
-
-
entao eu tentei montar mas eh essa parte q nao to nem chegando perto eu precisava de uma base pra min ver e tentar entender pra min poder montar o meu aki
pq na hora de popular as combos eu jah nao to conseguindo
se vc poder ir me ajudando aos poukos pra min poder aprender a fazer essa parte ai agradeço
-
Opa Entao eu tentei dar uma simplificada 1º fazer por data ai depois tentar selecionar por empresa e estabelecimento
so que ta me dando um erro q nao entendi ainda
Sintaxe incorreta próxima à palavra-chave 'inner'.
como eu nao conheco muito ainda nao vi o erro mas parece ser simples neh
daremessa.SelectCommand.Parameters.Add(
"@dt_remessa", SqlDbType.VarChar).Value = Dt_inicio.Text Dim dsRelatorio As New dspordia()conn.Open()
daremessa.Fill(dsRelatorio.DataTable1)
conn.Close()
Dim relatorio As New rptpordia()relatorio.SetDataSource(dsRelatorio)
Dim f As New formpordia(relatorio)f.Show()
Valew pela ajuda
-
no select eu invert o inner join com where
Dim daremessa As New SqlDataAdapter(" SET DATEFORMAT DMY Select * from remessa as r inner join contrato as c on r.cod_Contrato = c.cod_contrato WHERE dt_remessa >= " + Dt_inicio.Value + " and dt_remessa <= " + Dt_Fim.Value + " ", conn)paro de dar o erro mas nao aparece nada
se eu tirar o where aparece todos os dados mas com o filtro aparece em branco :?
eu testei no sql e o select da certinhu axu q eu to pegando os dados da data errado (dt_inicio.value mesmo?)
se alguem poder me ajudar
valew
-
o pessoal sera q alguem pode me ajudar
realmente ainda nao axei o q esta errado se eu tirar o where aparece os dados ai entao axu q o erro ta no select so q se eu fazer o mesmo select no sql da certo entao axu q o erro ta na parte de pegar a data do datetimepicker
so q nao consegui ainda
-
pessoal esse select da certo no sql
SET
DATEFORMAT DMY Select r.cod_remessa, c.cod_contrato, r.dt_remessa, c.cod_emp, c.cod_estab, c.cod_cartao, r.vl_liq, r.vl_bruto, r.vl_diverg from remessa as r inner join contrato as c on r.cod_Contrato = c.cod_contrato WHERE dt_remessa BETWEEN '02/10/2008' and '09/10/2008'quando eu paso pro vb aparece em brando
Dim daremessa As New SqlDataAdapter("SET DATEFORMAT DMY Select r.cod_remessa, c.cod_contrato, r.dt_remessa, c.cod_emp, c.cod_estab, c.cod_cartao, r.vl_liq, r.vl_bruto, r.vl_diverg from remessa as r inner join contrato as c on r.cod_Contrato = c.cod_contrato WHERE r.dt_remessa BETWEEN " + Dt_inicio.text + " and " + Dt_Fim.Text + " ", conn) Dim dsRelatorio As New dspordia()conn.Open()
daremessa.Fill(dsRelatorio.DataTable1)
conn.Close()
Dim relatorio As New rptpordia()relatorio.SetDataSource(dsRelatorio)
Dim f As New formpordia(relatorio)f.Show()
mas se eu deixar assim
aparece todos os dados q eu kero so nao aparece no intervalo de datas
eu ainda to aprendendo a mexer com vb e crystal e nao to conseguindo axar qq tem de errado (tb nao sei se estoufazendo totalmente de um jeito errado)
se alguem tive uma ideia do q possa ser ai pra me ajudar agradeço muito
abraz t+++
-
Maykonctrl,
Para fazer um filtro com data utilizando o banco de dados eu faço assim:
Exemplo com banco de dados ACCESS + Relatório no Crystal Reports
Referências do form:
Code SnippetOption
Explicit OnOption
Strict On'provider do banco de dados ACCESS
Imports
System.Data.OleDbImports
System.Data'crystal reports
Imports
CrystalDecisions.CrystalReports.EngineImports
CrystalDecisions.Shared'outros
Imports
System.Text 'StringBuilderImports
System.Configuration 'ConnectionStringsImports
System.IO 'Path.CombineAdicionar no Form Load
Code SnippetPreviewRelClientes(CarregarListaClientes(DateSerial(2008, 1, 1), DateSerial(2008, 12, 31)))
Sub responsável pela visualização do relatório
Code SnippetPrivate Sub PreviewRelClientes(ByVal oTable As DataTable)
'
'visualizar o relat¢rio "rptCustomer.rpt" utilizando a fun‡Æo CarregarListaClientes() ' Try '1 passo: definindo o relat¢rio a ser visualizado (ReportPath) 'rptCustomer: nome do relat¢rio do crystal reports ' Dim crReportDocument As New rptCustomer '2 passo: definindo o DataSource do relat¢riocrReportDocument.SetDataSource(oTable)
'3 passo: visualizando o relat¢rio... ' 'crPreview: nome do controle CrystalReportViewecrPreview.DisplayGroupTree =
FalsecrPreview.ReportSource = crReportDocument
Catch ex As ExceptionMsgBox(ex.Message)
End Try End SubFunção responsável pela pesquisa dos dados no banco de dados Access (com filtro por data para resolver a sua dúvida)
Code SnippetPrivate Function CarregarListaClientes(ByVal datInicial As Date, _
ByVal datFinal As Date) As DataTable
'definindo a string de conexÆo do banco de dados
Dim strConexao As String = "" 'caso o banco de dados esteja no mesmo diret¢rio da aplica‡Æo 'strConexao = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\AWorksLite.mdb;Persist Security Info=True"strConexao =
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=G:\Novos\Access\AWorks\AWorksLite.mdb;Persist Security Info=True" Dim oConn As New OleDbConnection(strConexao) Dim strSQL As New StringBuilder Dim oTable As New DataTable() Dim oCmd As OleDbCommand = Nothing Try 'abrindo conexÆo com o banco de dados.oConn.Open()
'definindo o SQLstrSQL.Append(
" Select CustomerID ")strSQL.Append(
" ,CustomerName")strSQL.Append(
" ,Phone")strSQL.Append(
" ,EmailAddress")strSQL.Append(
" ,AddressLine")strSQL.Append(
" ,City")strSQL.Append(
" ,StateProvinceName")strSQL.Append(
" ,PostalCode")strSQL.Append(
" ,CountryName")strSQL.Append(
" ,LastUpdate ")strSQL.Append(
" FROM Customer inner join Country ")strSQL.Append(
" on Customer.CountryID = Country.CountryID ")strSQL.Append(
" Where LastUpdate between @DatInicial and @DataFinal ")strSQL.Append(
" Order by CustomerName ") 'definindo os parƒmetros do SqlCommandoCmd =
New OleDbCommand(strSQL.ToString, oConn)oCmd.CommandType = CommandType.Text
oCmd.Parameters.Add(
New _OleDbParameter(
"@DatInicial", SqlDbType.DateTime)).Value = datInicialoCmd.Parameters.Add(
New _OleDbParameter(
"@DataFinal", SqlDbType.DateTime)).Value = datFinal 'carregando os dados do banco de dados Dim oDataReader As OleDbDataReader = _oCmd.ExecuteReader(CommandBehavior.CloseConnection)
'carregar o DataTable com base no DataReaderoTable.Load(oDataReader)
Catch ex As ExceptionMsgBox(ex.Message)
Finally 'liberando os objetosoConn.Dispose()
oConn =
Nothing End Try Return oTable End FunctionEspero ter ajudado!
-
opa voltando pra fala q consegui fazer laercio valew pela ajuda acabei nao fazendo = ao exemplo q vc me deu mas ele jah deu uma ajuda pra min conseguir fazer
valew abraz t+
conn.Open()
sql.Append(
" Select Contrato.Cod_Contrato ")sql.Append(
" ,Empresa.Nome_Emp")sql.Append(
" ,Estabelecimento.Nome_Estab")sql.Append(
" ,Tipo_Cartao.Nome_cartao")sql.Append(
" ,Remessa.Cod_Remessa")sql.Append(
" ,Remessa.Dt_Remessa")sql.Append(
" ,Remessa.Vl_Liq")sql.Append(
" , Remessa.Vl_Bruto")sql.Append(
" , Remessa.Vl_Diverg")sql.Append(
" FROM Contrato inner join empresa ")sql.Append(
" ON Contrato.Cod_Emp = Empresa.Cod_Emp INNER JOIN Estabelecimento")sql.Append(
" ON Contrato.Cod_Estab = Estabelecimento.Cod_Estab INNER JOIN Remessa ON Contrato.Cod_Contrato = Remessa.Cod_Contrato INNER JOIN Tipo_Cartao ON Contrato.Cod_Cartao = Tipo_Cartao.Cod_Cartao ")sql.Append(
" Where Remessa.Dt_Remessa between '" + Convert.ToDateTime(datetimeinicial.Text).ToString("yyyy/MM/dd") + "'and '" + Convert.ToDateTime(datetimefinal.Text).ToString("yyyy/MM/dd") + "' and estabelecimento.nome_estab = '" + cbestab.Text + "'") Dim daremessa As New SqlDataAdapter(sql.ToString, conn) dsRelatorio As New DataSet1()daremessa.Fill(dsRelatorio.DataTable1)
conn.Close()
Dim relatorio As New CrystalReport1()relatorio.SetDataSource(dsRelatorio)
Dim f As New Form2(relatorio)f.Show()