Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

alissong

Data Report

Recommended Posts

Pessoal,

 

Criei esse comando para conectar ao Data Report e exibe os dados, mas quando incluo a sections Group aparece esse erro: Report sections do not match data source.

Veja o código:

 

Private Sub fatura_clientes_Click()Dim relFatClientes As New ADODB.RecordsetOn Error GoTo cmdvizualizar ' Erro ao vizualizar registroIf relFatClientes.State = 1 Then Set relFatClientes = Nothing'Define a string que será usada na consulta para gerar o recordsetsql = "Select cliente.cod_cliente,cliente.nome_cliente,cliente.cnpj_cpf,cliente.endereco,cliente.telefone,fatura.n_fatura,fatura.data_fatura,fatura.total_fatura,fatura.desconto,fatura.pagamento,fatura.troco"sql = sql & " from cliente,fatura"sql = sql & " where fatura.cod_cliente=cliente.cod_cliente"sql = sql & " order by cliente.cod_cliente,fatura.data_fatura"relFatClientes.CursorLocation = adUseClientrelFatClientes.Open sql, mycon, adOpenKeyset, adLockPessimisticmycon.Execute sqlIf Not relFatClientes.EOF ThenSet drpFatClientes.DataSource = relFatClientesdrpFatClientes.ShowElseMsgBox "Não existe(m) fatura(s) para os clientes !", vbInformation, "VENDAS"End Ifcmdvizualizar_exit:Exit SubSet relFatClientes = Nothingcmdvizualizar:MsgBox Err.Description, vbInformation, "Erro ao [cmdvizualizar]"End Sub

Alguém pode me ajudar.

 

Um abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Prezados, eu também estou com o mesmo problema, usando como banco de dados o ORACLE.Quando estava utilizando o Data Environment o agrupamento estava funcionando corretamente, resolvi remover este iteme utilizar o relatório na mão, conforme o seu exemplo. E o erro indicado começou a ocorrer...Estou estudando uma forma para contornar isto.Alguma novidade , pode postar ...Um abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alissong

 

Para fazer o agrupamento ao contrário do que muitos dizem não é necessário utilizar o DataEnviroment.

É bem fácil.

 

Isto pode ser feito da seguinte maneira:

Digamos que a tabela que se deseja listar se chame Depto_Pessoal e tenha a seguinte estrutura:

 

TX_Nome VARCHAR2(100)FG_SEXO CHAR(1)NU_SALARIO NUMBER(16,2)Logo a query normal utilizada seria:Select TX_Nome,FG_SEXO,NU_SALARIOFrom Depto_PessoalOBS:(No meu exemplo estou usando o ORACLE como BD)Criar um novo projeto, adicionar um form e um data report.O Data report será chamado de rptExemploDepPessoal , este relatório será agrupado pelo atributo FG_Sexo e será exibido o somatório por sexo do campo NU_SALARIO, depois de listar todos os registros, será informado ainda um totalizador geral do somatorio de NU_SALARIO.No Data report coloque os seguintes campos:No Details: todos os campos da consulta como RptTextBox: TxtNome, TxtSexo e TxtSalario.Crie uma nova seção, onde será o agrupamento por Sexo: TxtSexoAgrup e TxtValPorSexoCrie uma terceira Sessão e coloque o campo TxtValorTotalVamos para o código:=================================================================================Sub ExecutaRelatorio(pUsuario As String, pSenha As String, pBaseDados As String)   	Dim vCn As New ADODB.Connection 'Variavel de conexão com o Banco de dados	Dim vRsCons As ADODB.Recordset  'Variavel de consulta a base de dados	Dim vStSQL As String			'Variavel da expressão SQL		Dim vStPrefixoShape As String   'Variavel que armazena o prefixo do Shape	Dim vStSufixoShape As String	'Variavel que armazena o Sufixo do Shape		'Realiza a conexao com o banco de dados	vCn.ConnectionString = "Provider=MSDATASHAPE;Data Provider=MSDAORA.1;" & _								 "User ID=" & pUsuario & _								 ";Password=" & pSenha & ";Data Source=" & pBaseDados & ";" & _								 "FetchSize=200;"	vCn.CursorLocation = adUseClient	vCn.Open			'Define a expressão SQL	 'Coloquei a tabela com o DUAL para podermos visualizar os dados. (TEM Q SER ORACLE PARA FUNCIONAR Senão utilize a query abaixo)	vStSQL = "Select " & vbCr & _				"'ANDRE' TX_Nome," & vbCr & _				"'MASCULINO' FG_SEXO," & vbCr & _				"1500.00 NU_SALARIO" & vbCr & _			"From DUAL" & vbCr & _			"UNION Select " & vbCr & _				"'LUCIANA' TX_Nome," & vbCr & _				"'FEMININO' FG_SEXO," & vbCr & _				"3000.00 NU_SALARIO" & vbCr & _			"From DUAL" & vbCr & _			"UNION Select " & vbCr & _				"'LEO' TX_Nome," & vbCr & _				"'MASCULINO' FG_SEXO," & vbCr & _				"4000.00 NU_SALARIO" & vbCr & _			"From DUAL" & vbCr & _			"Order By FG_SEXO, TX_NOME"	'QUERY OPÇÃO 2'	vStSQL = "Select " & vbCr & _				"TX_Nome," & vbCr & _				"FG_SEXO," & vbCr & _				"NU_SALARIO" & vbCr & _			"From Depto_Pessoal" & vbCr & _			"Order By FG_SEXO, TX_NOME"			'Para criar o agrupamento:	'Deve ser utilizado a Expressão Shape. Como Faremos dois agrupamentos,	'um para o somatório por Sexo e outro com o somatório geral,iremos utilizar dois Shapes.	vStPrefixoShape = "SHAPE (" & vbCr & _						  "Shape{" & vbCr			'Criaremos o Sufixo do Shape	vStSufixoShape = "} AS RsDeptoPessoal COMPUTE RsDeptoPessoal," & vbCr & _							"SUM(RsDeptoPessoal.'NU_SALARIO') AS TotalSalario" & vbCr & _								"BY 'FG_SEXO') " & vbCr & _								"AS RsDeptoPessoalAgrupado" & vbCr & _									"COMPUTE SUM(" & vbCr & _									"RsDeptoPessoalAgrupado.'TotalSalario')" & vbCr & _									" AS GrandTotal, RsDeptoPessoalAgrupado"	'OBS: Se existir mais campos no agrupamento basta, colocar a virgula seguido dos campos		'Executar a expressão SQL	Set vRsCons = New ADODB.Recordset	vRsCons.Open vStPrefixoShape & vStSQL & vStSufixoShape, vCn, adOpenStatic, adCmdText				'Configurar o Data Report:	With rptExemploDepPessoal			'Configurar a conexão com o banco		Set .DataSource = vRsCons		.DataMember = ""							'Configurar os campos da area "Details" que por padrão é chamado de "Section1"		.Sections("Section1").Controls("TxtNome").DataMember = "RsDeptoPessoal"		.Sections("Section1").Controls("TxtNome").DataField = "TX_Nome"				.Sections("Section1").Controls("TxtSexo").DataMember = "RsDeptoPessoal"		.Sections("Section1").Controls("TxtSexo").DataField = "FG_SEXO"				.Sections("Section1").Controls("TxtSalario").DataMember = "RsDeptoPessoal"		.Sections("Section1").Controls("TxtSalario").DataField = "NU_SALARIO"		'Configurar os campos da area do primeiro agrupamento: Será adicionado um Group Header/Footer		'por padrão para o Header seria "Section6" e para o Footer seria "Section7" que é o nosso caso.		.Sections("Section7").Controls("TxtSexoAgrup").DataMember = "RsDeptoPessoalAgrupado"		.Sections("Section7").Controls("TxtSexoAgrup").DataField = "FG_SEXO"				.Sections("Section7").Controls("TxtValPorSexo").DataMember = "RsDeptoPessoalAgrupado"		.Sections("Section7").Controls("TxtValPorSexo").DataField = "TotalSalario"				'Configurar os campos da area do agrupador geral : Será adicionado outro Group Header/Footer		'por padrão para o Header seria "Section8" e para o Footer seria "Section9" que é o nosso caso.			.Sections("Section9").Controls("TxtValorTotal").DataMember = ""		.Sections("Section9").Controls("TxtValorTotal").DataField = "GrandTotal"				'Agora basta exibir o relatório.		.Show		End With	End Sub

================================================================================

=

 

Espero que isto resolva o problema de todos !!!

Um abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Amigos, sou novo aqui no fórum.. seguinte, estou tentando aplicar o exemplo do nosso amigo André mas está dificil. Estou precisando gerar um relatório com agrupamento. Dá erro na seguinte parte do código:

 

vRsCons.Open vStPrefixoShape & vStSQL & vStSufixoShape, vCn, adOpenStatic, adCmdText

Mensagem de erro:
Run-time error '-2147217900 (80040e14)';
Instrução SQL inválida. 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT' OU 'UPDATE' esperado.

Não alterei nada no código acima. Fiz uma cópia fiel. Onde será que estou comendo bola? a consulta q ele esta montando é a seguinte:
SHAPE (
Shape{
Select 
TX_Nome,
FG_SEXO,
NU_SALARIO
From Depto_Pessoal
Order By FG_SEXO, TX_NOME} AS RsDeptoPessoal COMPUTE RsDeptoPessoal,
SUM(RsDeptoPessoal.'NU_SALARIO') AS TotalSalario
BY 'FG_SEXO') 
AS RsDeptoPessoalAgrupado
COMPUTE SUM(
RsDeptoPessoalAgrupado.'TotalSalario')
 AS GrandTotal, RsDeptoPessoalAgrupado

Agradeço qq ajuda

Abraços

Alex Sandro

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.