Newsgroup: it.comp.lang.visual-basic
Titolo: Datareport in VB6

Ho creato un DataReport in VB6 connesso tramite una stringa di connessione
a un database contenente diverse tabelle.
Ill collegamento ad una sola delle tabelle funziona. Solo che io avrei la
necessità di collegare lo stesso DataReport a diverse tabelle con diverso
numero di records.
Ho provato a fare una query contente le diverse tabelle ma in tal modo
succede che mi ripete in Datareport le stesse righe più volte quanti sono i
record della tabella più lunga.
Qualcuno sa dirmi come risolvere questo problema?

 ha scritto nel messaggio
news:FjTQ9.71242$TC5.2...@twister1.libero.it...

Non capisco quale sia il problema.
Il DataReport, prepara una 'sezione' per ogni record della sorgente dati.
Se tu colleghi una tabella, avrai una sezione per ogni riga della tabella.
Se colleghi due tabelle, avrai il prodotto cartesiano delle due tabelle,
ossia un numero di righe complessive pari al numero di righe della tabella A
moltiplicato per il numero di righe della tabella B.
Prova a spiegare cosa vuoi ottenere, e vediamo dove agire.
Ciao
Alberto

 ha scritto nel messaggio
news:UmTQ9.70625$Ou4.2...@twister2.libero.it...


 Tabella1 e va in errore.
Credo ci sia un problema di logica, ossia che ti sfugga qualche concetto di
Report.
Esistono, nel report, diverse sezioni.
La piů interna, Section1, viene ripetuta una volta per ogni record del
recordset che colleghi. Quindi, se vuoi che vengano ripetuti i record di
Tabella2, basta collegare il datareport al recordset che contiene i record
di Tabella2.
Le piů esterne, invece, non vengono ripetute, se non una in alto e una in
basso al salto pagina (non ricordo, ma credo siano Section4 e Section5).
Se i valori di Input, come li chiami tu, devono essere gli stessi per tutto
un report, devono essere inseriti in una sezione non collegata al recordset
(di solito si mettono in Section2), e passati per valore, non per
riferimento, mediante:
Datareport1.Sections.Item("Section2").RptText1.Text=Recordset1.Fields.Item("
Campo").Value
Ciao
Alberto

 Le più esterne, invece, non vengono ripetute, se non una in alto e una in


 quattro tabelle formate anch'esse da più record?
La cosa migliore è creare n recordset.
Ognuno di essi viene aperto su una tabella.
Poi, quello che ti serve come dato in formato tabellare lo colleghi alla
sezione 1 del datareport, e gli altri li passi per valore alle altre
sezioni.
A meno che, non esista una qualche forma di Join fra le diverse tabelle, per
cui potresti aprire un solo recordset con una query Sql che contenga un
Join, e poi sfruttare questo recordset per ottenere sia i valori per le
sezioni 'fisse' che i record per le sezioni ripetute.
Può sembrare complesso, ma credimi che con un po' di pratica puoi ottenere
tante cose. Solo che attraverso dei messaggi in un NG è difficile capire
cosa vuoi ottenere esattamente.
Ciao e Buon Anno.
Alberto

 ha scritto nel messaggio
news:N%TQ9.70839$Ou4.2...@twister2.libero.it...


 metodo particolare?
Non l'ho mai fatto, ma forse č possibile creare piů sezioni ripetute, ognuna
delle quali potrebbe essere collegata ad un recordset diverso.
Ripeto: 'Forse'.
Ciao
Alberto

 Non l'ho mai fatto, ma forse è possibile creare più sezioni ripetute,


 tra i suggerimenti non compare il nome della rptTextBox.
Come sopra. Mi riferivo alla Caption del controllo RptLabel.
Ricorda comunque che quando ti riferisci ad un container mediante il suo
nome, l'Intellisense non può suggerirti le voci successive, se non quelle
predefinite.
Ciao
Alberto

 ha scritto nel messaggio
news:kDVQ9.71777$TC5.2...@twister1.libero.it...


 La seconda parte dell'uguaglianza funziona. L'errore avviene sulla prima.
Dunque, ho scritto a memoria...
Forse devi usare la collection dei controlli della sezione:
DataReport1.Sections.Item("Section2").Controls.Item("Label32").Caption=Recor
dset1.Fields.ITem("nomecampo").Value
Non ricordo esattamente, ma con un paio di prove lo sistemi.
Ciao
Alberto

 ha scritto nel messaggio
news:3zXQ9.71482$Ou4.2...@twister2.libero.it...


 Non ricordo esattamente, ma con un paio di prove lo sistemi.
Ho tirato fuori un po' di codice:
Per collegare un campo del recordset ad un RptTextBox:
Scheda_Collaudo_2.Sections.Item("Section1").Controls.Item("Rpt_Txt_IDCollaud
o").DataField = "id_collaudo"
Per popolare un RptLabel con un valore di un campo (testuale) del recordset:
Scheda_Collaudo_2.Sections.Item("section2").Controls.Item("RPT_LBL_Matricola
").Caption = Replace$(ADO_RCS.Fields.Item("Matricola").Value, "%", "%%")
Ciao
Alberto

 ha scritto nel messaggio
news:dmXQ9.71439$Ou4.2...@twister2.libero.it...


 ha scritto nel messaggio
news:cCXQ9.71495$Ou4.2...@twister2.libero.it...


 "Impossibile trovare Datafield "valore del nomecampo"
Ragioniamo...
Ho scritto:
Datareport1.Sections.Item("Section1").Controls.Item("Nome_RptTxt").DataField
= "nome_campo_del_Recordset"
Tu hai scritto:
Datareport1.Sections.Item("Section1").Controls.Item("TextBox23")="nomecampo"
Quindi:
1) Manca .DataField. La proprietà di default del RptTextBox non so quale
sia, ma presumo non sia DataField.
2) Hai sostituito "nomecampo" col vero nome del campo del recordset, o hai
lasciato "nomecampo" (lo so che è una domanda stupida, ma sto cercando di
capire)...
3) Nel secondo caso che hai postato, quello in cui citi l'Item dei Fields,
non può funzionare, perchè con una cosa del genere fai riferimento ad un
oggetto Field, mentre la proprietà DataField di rptTextBox è di tipo
stringa. Di conseguenza, VB cerca di effettuare una conversione implicita, e
presumo che il contenuto del campo non sia il nome del campo stesso :-)))
Ciao
Alberto

 ha scritto nel messaggio
news:o2ZQ9.72504$TC5.2...@twister1.libero.it...


 Set recordset1=conn.execute("select * from Tabella2", , adCmdText) ?
Dal tuo codice:
    ' Connette il Recordset al DataReport.
    Set DataReport1.DataSource = rs
Riporto alcuni esempi:
'Associo i campi del datareport con quelli del recordset
Private Sub Inizializza_Data_Report()
Set Scheda_Collaudo_2.DataSource = ADO_RCS
With Scheda_Collaudo_2.Sections.Item("Section1").Controls
    .Item("Rpt_Txt_IDCollaudo").DataField = "id_collaudo"
    .Item("RPT_TXT_Data_ora").DataField = "Data_Ora"
End With
End Sub
'Per stampare:
'Seleziono fino a 4 collaudi relativi alla matricola selezionata
Set ADO_RCS.ActiveConnection=Connessione
ADO_RCS.Source="Select * from Collaudi"
ADO_RCS.Open
'Se ho trovato almeno un collaudo da stampare
If not(ADO_RCS.EOF) Then
    ADO_RCS.MoveFirst
Scheda_Collaudo_2.Sections.Item("section2").Controls.Item("RPT_LBL_Matricola
_txt").Caption = ADO_RCS.Fields.Item("Matricola").Value
Scheda_Collaudo_2.Sections.Item("section2").Controls.Item("Rpt_Lbl_Modulo_K"
).Caption = ADO_RCS.Fields.Item("modulo_k").Value
    Call Scheda_Collaudo_2.PrintReport(True)
End If
Ciao
Alberto

 ha scritto nel messaggio
news:fmZQ9.71829$Ou4.2...@twister2.libero.it...
