DATAREPORT POR GRUPO SEM DATAENVIRONMENT

USUARIO.EXCLUIDOS 29/05/2005 19:50:56
#85798
Olá novamente,
Tem como fazer um relatório por grupos sem o uso do dataenvironment? POis estava aqui tentando e num faço a mínima idéia de qual seria a instrção SQL a ser passada.
Para os que à± utilizavam grupo eu estava fazendo assim:

dimx as new adodb.recordset
x.open "select * from tabela",conn
set datareport.datasource = x
datareport.show 1

Mas agora eu encalhei em como fazer com grupo.
Eu tentei fazer com dataenvironment mas eu tenho que modificar os valores dos campos, eu consegui modificar os que são do grupo, mas os detalhes eu à± consigo pois todos os campos retornam como um só.
FABIO.ALEXANDRE 29/05/2005 20:05:31
#85804

BOM ,
PARA CRIAR GRUPO VC DAR UM CLICK COM O BOTÃO DIREITO DO MOUSE NO DATA REPORT E VAI NA OPÇÃO INSERT GROUP HEADER/FOOTER

QUANTO AO SELECT

x.open "select * from tabela ORDER BY NOME_DO_CAMPO_AGRUPADO_NORELATORIO",conn

ESPERO TER AJUDADO
USUARIO.EXCLUIDOS 30/05/2005 11:44:13
#85886
Cara,

Já tentei isso milhares de vezes e não consegui.

O máximo que eu conseguia fazer, e acreditar estar certo, dava erro: "Report Sections do not match data source" e nada...

Estou migrando todos o meus reports DSR para Crystal Reports...

USUARIO.EXCLUIDOS 30/05/2005 20:27:07
#86008
Oi,

Para que se possa trabalhar com um Grupo no Data Report é necessário construir uma recordset hierarquica, o que só pode ser construido usando o Command Shape.

Isso faz-se fácilmente utilizando o DataEnvironment e construindo um Command pai e um Command filho.

Quando não sabemos construir isso por código, podemos começar por tentar fazer as coisas com o DataEnvironment e depois ver o SQL produzido(pelo menos foi assim que aprendi).

Mas tentemos explicar a coisa, com uma rotina que emite um report agrupado por um determinado campo:

Private Sub Command1_Click()

CODIGO = txtCodigo.Text

strCaminhodosDados = App.Path & "\Dados.mdb"
Set db = New ADODB.Connection

[b]'Para que possamos usar o Command Shape, temos que utilizar o Provedor MSDataSHAPE, '
'por isso ele aqui está na string de conexão:[/b]


db.Open "PROVIDER=MSDataShape;Data Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & strCaminhodosDados & ";Jet OLEDB:Database Password=wo;"

'Aqui vamos indicar que vamos construir um Comando hierarquico como faríamos com o Data Environment:
Set cmdGUIA_REMESSAcab = New ADODB.Command
Set cmdGUIA_REMESSAcab.ActiveConnection = db

'Aqui vamos indicar como vamos preencher a recordset hierarquica através do Comando indicado acima, de reparar que este Comando tem um "cab"(para o cabeçalho) e um "det"(para o detalhe)

cmdGUIA_REMESSAcab.CommandText = "SHAPE{SELECT TABDR.DRCOD,TABLANC.LANBANCODES as Banco,TABLANC.LANDR " & _
"FROM TABLANC INNER JOIN TABDR ON TABLANC.LANDR = TABDR.DRCOD " & _
"GROUP BY TABDR.DRCOD,TABLANC.LANBANCODES,TABLANC.LANDR " & _
"HAVING TABDR.DRCOD = '" & CODIGO & "'} AS qGUIA_REMESSAcab " & _
"APPEND ({SELECT TABLANC.LANDR as Codigo ,TABLANC.LANBANCO,TABLANC.LANBANCODES as Banco, TABLANC.LANHIST as Descricao,TABDR.DRCOD " & _
"FROM TABLANC,TABDR " & _
"WHERE TABLANC.LANDR = TABDR.DRCOD " & _
"GROUP BY TABLANC.LANDR,TABLANC.LANBANCO,TABLANC.LANBANCODES,TABLANC.LANHIST,TABDR.DRCOD } AS qGUIA_REMESSAdet RELATE 'LANDR' TO 'DRCOD') AS qGUIA_REMESSAdet "

'Aqui vamos executar o Comando defonido acima

Set adoGUIA_REMESSAcab = cmdGUIA_REMESSAcab.Execute

Dim intCtrl As Integer

'Aqui vamos começar a preencher o DataReport com os dados da recordset hierarquica anteriormente construída

With rptGUIA_REMESSA

'Aqui dizemos qual a fonte para o cabeçalho
Set .DataSource = adoGUIA_REMESSAcab
With .Sections("Section1").Controls
For intCtrl = 1 To .Count
If TypeOf .Item(intCtrl) Is RptTextBox Then
'Aqui dizemos qual a fonte para p detalhe
.Item(intCtrl).DataMember = "qguia_remessadet"
End If

Next intCtrl

End With

.Orientation = rptOrientLandscape
.Show

End With

End Sub

NOTA: Importante fixar que os Reports com Grupos têm DataSource e DataMember enquanto que os que os não tem apenas têm DataSource.
Espero ter sido suficientemente explícito mas se ainda estiver com dúvidas(sem qualquer propaganda) siga a sugestão de visitar a minha página pessoal.


USUARIO.EXCLUIDOS 30/05/2005 20:30:59
#86009
Só para que a resposta anterior fique devidamente explícita(agora espero que saia bem), aqui

b]'Para que possamos usar o Command Shape, temos que utilizar o Provedor MSDataSHAPE, '
'por isso ele aqui está na string de conexão:[/b]

db.Open "PROVIDER=MSDataShape;Data Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & strCaminhodosDados & ";Jet OLEDB:Database Password=wo;"

era para ficar assim

'Para que possamos usar o Command Shape, temos que utilizar o Provedor MSDataSHAPE,
'por isso ele aqui está na string de conexão:


db.Open "PROVIDER=MSDataShape;Data Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & strCaminhodosDados & ";Jet OLEDB:Database Password=wo;"



USUARIO.EXCLUIDOS 30/05/2005 23:26:14
#86021
Aew
Deu certo \o/ :)
Muito obrigado.
Mas agora surgiu outro problema quando eu executo a instrução sql e talz, eu tenho que modificar os dados que vem nelas (por causa da criptografia) os campos que vão na seção grupo eu consigo modifica-los (pois voltam como campos normalmente) mas os que vão na seção detalhes (appen(...)) retornam um campo só impossivel de ler.
Alguém sabe como ler esse campo?
Tópico encerrado , respostas não são mais permitidas