Newsgroup: it.comp.lang.visual-basic
Titolo: VB6 - DataReport e Raggruppanti

Ciao a tutti,
Ho bisogno di un consiglio ....
sto utilizzando lo strumento datareport per poter stampare dei dati 
contenuti in un database.
Fino adesso per query SQL semplice ho utilizzato il seguente codice che 
funziona perfettamente:
    Form1.connConnection.Close
    Form1.connConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data 
Source=" & pathdatabase & ";Persist Security Info=False"
    Set Form1.rsRecordSet = Form1.connConnection.Execute("Select * From 
COMMESSE ORDER BY NumCliente ASC")
    Set Report1.DataSource = Form1.rsRecordSet
    Load Report1
Adesso invece ho a che fare con una query leggermente più complessa: ad es. 
"vorrei visualizzarre per ogni cliente, le relative commesse".
La realizzazione della query SQL non è un problema, in Access funziona bene 
e la creazione guidata dei report realizza il report cos' come lo voglio....
Leggendo i vecchi post ho capito che non posso utilizzare la query così come 
l'ho scritta in quanto per fare i raggruppamenti devo utilizzare il Data 
Enviroment.
Quindi sto provando a con un query semplice come quella sopra a relizzare la 
stessa cosa ma utilizzando il Data Enviroment.
Quando però vado a visualizzare il report mi appare il seguente errore: 
"Impossibile recuperare uno o più gruppi di righe dalla fonte dati corrente" 
e poi il report è corretto.
Da cosa può dipendere??
Grazie a tutti in anticipo.

 Da cosa può dipendere??
Ciao,
per quello che devi fare hai bisogno di un recordset di tipo 
gerarichico, le strade che puoi seguire sono due:
- ti appoggi al dataenvironment
- ti costruisci tu il recordset gerarchico
io preferisco la seconda strada,
qui trovi un po' di info che dovrebbero aiutarti a risolvere il 
problemhttp://
www.visual-basic.it/articoli/sdcDRAdvUse1.htm
ciao
stefano

 problemhttp://
www.visual-basic.it/articoli/sdcDRAdvUse1.htm
Ti ringrazio per la risposta...
Sto studiando il Tutorial che mi hai mandato solo che non capisco alcune 
cose...
O ci sono degli evidenti errori e carenze nel tutorial o sono io che non ci 
capisco una mazza....
Al paragrafo "Creazione Report Gerarchici" tro il seguente codice:
  cn.ConnectionString = "provider=msdatashape.1;data 
provider=Microsoft.jet.oledb.4.0;" & _
                        "data source=percorso.mdb"
  cn.Open ConnectionString
Fin qui tutto ok....
Ma poi ci sono le seguenti righe:
  cm.CommandText = "SHAPE {SELECT * FROM fat_acq_gen WHERE ID = ?} " & _
                   "APPEND ({SELECT * FROM fat_acq_dett WHERE riffat = ?} " 
& _
                   "RELATE ID to riffat) as tabfat"
  Set cm.ActiveConnection = cn
  Set rs = cmprn.Execute,ricerca
  Set DataReport1.DataSource = rs
Che cos'è "cm"? e "rs"?
Che cos'è "ricerca"?
Che cos'è "cmprn"?
cioè dove sono le dichiarazioni di queste varibili?
Con il data Enviroment finalmente sono riuscito a farlo funzionare e quindi 
ho ricavato l'espressione sql che utilizza SHAPE, ma mi pareva più corretto 
visto il tuo consiglio e quello di altri partecipanti a questo NG, di fare 
la stessa cosa da codice.
Spero tu mi possa aiutare... 

 cioè dove sono le dichiarazioni di queste varibili?
Probabilmente ti è sfuggito quanto riportato nel penultimo riquadro:
   Dim cn As New ADODB.Connection
   Dim rs As New ADODB.Recordset
   Dim cm As New ADODB.Command
quindi cn è la connection,
rs è il recordset,
cm il command,
cmprn ... non la vedo dichiarata ma direi che è una nuova command anche 
perchè "ricerca"  dovrebbe essere un parametro stringa che tu gli passi 
(prova a vedere un po' la sintassi di command.execute.
In effetti mi sembra che la guida abbia qualche carenza.
ciao
stefano

> In effetti mi sembra che la guida abbia qualche carenza.
Ti ringrazio per la risposta...
Ma non riesco a venirne fuori, spero vivamente tu possa aiutarmi anche 
perchč mi sembra che a poco a poco mi sto avvicinando alla soluzione...
Allora vediamo se ho capito:
Ho un form nel quale inserisco il seguente codice:
'----------------------------------------
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim cm As New ADODB.Command
Private Sub Form_Load()
    cn.Open "data Provider=Microsoft.Jet.OLEDB.4.0;Provider=MSDataShape.1;" 
& _
            "Data Source=" & pathdatabase
    rs.Open "SHAPE {SELECT * FROM 'TABAPPOGGIO'} AS Command1 COMPUTE 
Command1 BY 'Sigla','TitoloTavola'", cn
    Set ReportElencoTavoleTrasmesse.DataSource = rs
End Sub
'----------------------------------------
L'espressione SHAPE l'ho ricavata nel seguente modo:
1. Ho realizzato un Data Enviroment e l'ho collegato con Successo al 
DataForm
2. Ho fatto il copia incolla della stringa SHAPE e poi ho cancellato il Data 
Enviroment
Nel form ho inserito un Bottone nel quale ho inserito il seguente codice:
'----------------------------------------
Private Sub Command1_Click()
    DataReport.Show
End Sub
'----------------------------------------
Quando premo su Command1 mi viene visualizzato il seguente errore: "Errore 
di sintassi nella query. Proposizione della query incompleta"
Cosa vuol dire? immagine sia un problema nella stringa SHAPE ma come lo 
correggo?
Ancora grazie.
Ciao 

 correggo?
Togliendo tutti gli apici dalla stringa SHAPE adesso ottengo il seguente 
errore:
"Gli argomenti non sono di tipo valido, non sono compresi nell'intervallo 
consentito o sono in conflitto"
Quello che mi sembra strano è che quando utilizzando il DataEnviroments 
potevo impostare le propritò DataMember della sezione "padre" e della 
sezione "Figli" rispettivamente su "NomeRaggruppamento" e su "Command1...
Adesso come devo fare? sulla stringa SHAPE il "NomeRaggruppamento" non 
appare mai! eppure l'ho copiata dal DataEnviroment...
Spero proprio di arrivare ad una soluzione... :-( 

 Command1 BY 'Sigla','TitoloTavola'", cn
Second me stai sbagliando la query,
se andiamo a vedere quella dell'esempio, riporta:
"SHAPE {SELECT * FROM fat_acq_gen WHERE ID = ?} " & _
"APPEND ({SELECT * FROM fat_acq_dett WHERE riffat = ?} " & _
"RELATE ID to riffat) as tabfat"
praticamente dovresti avere una cosa di questo genere:
nello shape indichi la query generale ( ad esempio l'elenco dei clienti)
nell'append indichi la query di dettaglio (ad esempio gli acquisti dei 
clienti)
nel relate specifichi i campi di relazioni tra le due query.
ciao
stefano

 ha scritto nel messaggio 
news:4725a503$0$16025$5fc...@news.tiscali.it...

La query dell'esempio, a mio avviso utilizza un sistema diverso da quello 
che mi serve, in quanto va a prelevare dati da due tabelle differenti.
Quello che serve a me invece è una "Query di raggruppamento" che con Access 
ed DataEnviromenti non ho problemi a relizzare.
In sostanza io ho una tabella con le seguenti colonne
NTavola
TitoloTavola
Data
NCopie
Revisione
Destinatario
Io vorrei raggruppare i primi due campi "NTavola" e "TitoloTavola" in modo 
da utilizzarli come intestazione e i dati successivi come dettagli.
Poiche da codice non ne vengo più fuori, vorrei provare a seguire un'altra 
strada che però inserisco in nuovo post perchè altrimenti usciamo di tema.
Se hai qualche altra idea comunque è sempre ben apprezzata.
Grazie! 

 modo da utilizzarli come intestazione e i dati successivi come dettagli.
Vediamo se ho capito bene,
tu vuoi come intestazione NTavola e TitoloTavola, mentre gli altri 4 
campi nel dettaglio.
Se a Ntavola, TitoloTavola corrisponde 1 e 1 solo Data, NCopie, 
Revisione, Destinatario
allora non ci sono problemi non devi fare alcun raggruppamento e 
inserisci tutto nella section detaglio,
se invece per ogni accoppiata NTavola, TitoloTavola hai almeno due 
corrispondenze di Data, NCopie, Revisione, Destinatario vuol dire che la 
tabella non č normalizzata e allora ti consiglierei di correggere questo.
ciao
stefano

 tabella non è normalizzata e allora ti consiglierei di correggere questo.
Ok, questo è il mio caso che con DataEnviroment risolvo facilmente senza 
modificare la tabella con la query (creata dal DataEnviroment):
"SHAPE {SELECT * FROM 'TABAPPOGGIO'} AS Command1 COMPUTE Command1 BY 
'Sigla','TitoloTavola'"
Anche con Access e la creazione guidata dei report realizzo un report senza 
modificare la tabella....
Quello che mi sembra strano è che se con DataEnviroment ci riesco perchè non 
c'è la possibilità di fare la stessa cosa via codice?
Proverò a modificare o meglio a divedere la tabella del database in due 
tabelle per vedere se riesco ad attenermi il più vicino possibile 
all'esempio e quindi raggirare il problema....
Grazie.