AJUDA CRYSTAL REPORT MYSQL

BRUNOGOMES 31/10/2012 15:55:49
#413286
Pessoal consegui achar na net um exemplo para usar o crystal reports.. Eu tentei usar e consegui colocar os dados de uma tabela no relatorio, ficou certo!.. O problema eh q estou tentando usa-lo tbm com chave estrangeiras para mostrar um cadastro de cliente, mas n estou conseguindo..
Vou postar o codigo:
Obs: rptClientes eh o item do crystal reports do relatorio do cliente...

Esse codigo esta dentro de um modulo:
Imports MySql.Data.MySqlClient

Public Class ClsGerarRelatorio
Dim con As New MySqlConnection([Ô]server=localhost; user id=root; password=admin; database=workshopmanager[Ô])

Public Function GeraConsuta(Optional ByVal Campos As String = Nothing, Optional ByVal Condicao As String = Nothing) As DataSet
Try
Dim ds As New DataSet()
If IsNothing(Campos) Then
Campos = [Ô]*[Ô]
End If
Dim instrucaoSQL As String = [Ô]Select [Ô] & Campos & [Ô] from cliente [Ô] & Condicao
Dim objCommand = New MySqlCommand(instrucaoSQL, con)
Dim objDataSet As New DataSet
Dim objSqlDataAdapter As MySqlDataAdapter = New MySqlDataAdapter(objCommand)
objSqlDataAdapter.Fill(objDataSet)
objCommand = Nothing
Return objDataSet
Catch ex As Exception
MsgBox(ex.Message)
End Try
Return Nothing
End Function

Public Function GeraRelatorio(Optional ByVal Campos As String = Nothing, Optional ByVal Condicao As String = Nothing)
Dim cr As New rptClientes
cr.SetDataSource(GeraConsuta(Campos, Condicao).Tables(0))
frm_RelatorioClientes.CrystalReportViewer1.ReportSource = cr
frm_RelatorioClientes.Show()
End Function

End Class


Agora aqui eh no botao do form de cadastro q serve para mostrar o relatorio do cadastro q esta no form..
Dim ClsGeraRelatorio As New ClsGerarRelatorio

Private Sub btn_Relatorio_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Relatorio.Click
ClsGeraRelatorio.GeraRelatorio([Ô]cod_Cliente, nome_Cliente, contato_Cliente, tipo_Cliente, horadata_Cliente[Ô], [Ô]WHERE cod_Cliente = [Ô] & lbl_cod.Text & [Ô][Ô])
End Sub


No item do crystal reports eu adicionei as outras tabelas e jah vieram relacionadas pelo cod... E coloquei nos boxs, o problema eh chamar isso, q n estou conseguindo..

Aqui o banco de dados:
Create table Cliente (
cod_Cliente integer unsigned primary key not null auto_increment,
nome_Cliente varchar(160) not null,
contato_Cliente varchar(20),
observacoes_Cliente varchar(100),
horadata_Cliente varchar(30),
tipo_Cliente varchar(10),
cod_PF integer unsigned not null,
Foreign key (cod_PF) references PF (cod_PF) ON DELETE CASCADE,
cod_Telefone integer unsigned not null,
Foreign Key (cod_Telefone) references Telefone (cod_Telefone) ON DELETE CASCADE,
cod_Endereco integer unsigned not null,
Foreign Key (cod_Endereco) references Endereco (cod_Endereco) ON DELETE CASCADE) ENGINE=INNODB;

Create table PF (
cod_PF integer unsigned primary key not null auto_increment,
rg_PF varchar(30),
cpf_PF varchar(30),
dataNascimento_PF varchar(15),
sexo_PF varchar(10),
email_PF varchar(150)) ENGINE=INNODB;

Create table Telefone (
cod_Telefone integer unsigned primary key not null auto_increment,
residencial_Telefone varchar(15),
celular_Telefone varchar(15),
fax_Telefone varchar(15)) ENGINE=INNODB;

Create table Endereco (
cod_Endereco integer unsigned primary key not null auto_increment,
nome_Endereco varchar(160),
numero_Endereco varchar(8),
complemento_Endereco varchar(20),
cep_Endereco varchar(10),
bairro_Endereco varchar(30),
cidade_Endereco varchar(30),
uf_Endereco char(2),
pais_Endereco varchar(20)) ENGINE=INNODB;

BRUNOGOMES 01/11/2012 13:03:11
#413367
alguem ??
F001E 01/11/2012 14:57:04
#413377
Bruno....se dentro seu rpt as tabelas já estão relacionadas que o Crystal monta sozinho o relacionamento, é só vc colocar na variável instrucaoSQL o Select das tabelas com Inner Join das outras tabelas...
BRUNOGOMES 01/11/2012 15:53:28
#413382
entao.. eu ate tentei colocar inner join mas n deu certo... ou fiz errado.. Fiz um teste abaixo mas n funciona:

Dim instrucaoSQL As String = [Ô]Select [Ô] & Campos & [Ô] from cliente INNER JOIN pf ON (cliente.cod_PF=pf.cod_PF)[Ô] & Condicao

e no botao ficou assim:
ClsGeraRelatorio.GeraRelatorio([Ô]cod_Cliente, nome_Cliente, email_PF[Ô], [Ô]WHERE cod_Cliente = [Ô] & lbl_cod.Text & [Ô][Ô])
F001E 01/11/2012 17:53:10
#413397
Verifique o Vinculo Automático do relacionamento do seu rpt se esta por Nome ou por Chave...
Tem que esta por Chave, por nome não funciona...
BRUNOGOMES 01/11/2012 17:54:41
#413398
esta por chave... o problema deve ser no codigo mesmo... ahh to quebrando a cabeça com isso
ALTAIR148 01/11/2012 17:58:16
#413399
Resposta escolhida
Eu tenho vários relatórios com relacionamentos, eu prefiro fazer assim:

Crio um único dataset com todos os campos que eu preciso no relatório e depois faço o relacionamento através da SQL mesmo, e funciona que é uma beleza.
BRUNOGOMES 04/11/2012 18:45:49
#413450
Pode mostrar um exemplo ATlaIR148 ??
ALTAIR148 05/11/2012 09:56:05
#413467
Bom dia,

Olha tenho um exemplo aqui que postei aqui no VBMANIA, mas nesse exemplo não tem relacionamentos, então criei um aqui apenas para você ter uma ideia de como se faz. O banco que o exemplo usa é ACCESS mas pode ser facilmente adaptado para MYSQL. Agora é só botar a mão na massa.
BRUNOGOMES 05/11/2012 12:40:53
#413508
ATLAIR, esse q vc passou o DATASET possui somente uma tabela...

Tentei adaptar o meu com o INNER JOIN q o seu possui... mas n estou conseguindo fazer... =/

 ClsGeraRelatorio.GeraRelatorio([Ô]Cliente.cod_Cliente, Cliente.nome_Cliente, Cliente.contato_Cliente, Cliente.tipo_Cliente, Cliente.horadata_Cliente, PF.email_PF[Ô], [Ô]INNER JOIN pf ON PF.cod_PF=cliente.cod_PF WHERE cod_Cliente = [Ô] & lbl_cod.Text & [Ô][Ô])
ALTAIR148 05/11/2012 12:48:09
#413510
Citação:

ATLAIR, esse q vc passou o DATASET possui somente uma tabela...



Repare no que eu disse anteriormente:

Citação:

Crio um único dataset com todos os campos que eu preciso no relatório e depois faço o relacionamento através da SQL mesmo, e funciona que é uma beleza.



Eu uso um único DATASET e nesse dataset tem o nome de todas as colunas que a SQL vai me retornar.

Por qual motivo não consegue? Apresenta algum erro?
Página 1 de 2 [13 registro(s)]
Tópico encerrado , respostas não são mais permitidas