Il mio report si costruisce in maniera dinamica. L'utente specifica su una form quali campi vuole vedere spuntando delle apposite chekbox e io costruisco la select in base a queste scelte.
Una volta eseguita la select assegnandola ad un recordset di ADO, associo il tutto al report che si apre visualizzando i campi specificati.
Il problema è che sul report ho inserito dei controlli non associati ad alcun campo, cosa che dovrei fare da codice, ma non ci riesco.
Vi posto un po' di codice, così mi posso spiegare meglio:
nell sub PosizionaControlli rendo visibili solo i dati scelti dall'utente.codice:Dim rpReport As New crReport Public pbStrFiltro As String 'variabili che setto dal form delle scelte dell'utente e che mi servono per sapere quali campi dovrò visualizzare nel report Public vediTitolo As Integer, vediTitoloPostale As Integer Public vediQualifica As Integer, vediSettore As Integer Public vediProvenienza As Integer Public vediAreaEnte As Integer, vediIndirizzi As Integer Public vediRecapiti As Integer, vediEventi As Integer Public vediFirmatari As Integer, vediAcquisitore As Integer Private Sub Form_Load() Screen.MousePointer = vbHourglass Dim rsRs As New ADODB.Recordset Dim strSql As String 'eseguo la storedprocedure origine dei dati passandole il filtro creato nel form delle opzioni strSql = "Exec sp_ElencoNominativiStampa " & pbStrFiltro rsRs.Open strSql, miaConn, 1, 3 rpReport.Database.SetDataSource rsRs PosizionaControlli rsRs.Close Set rsRs = Nothing CRViewer91.ReportSource = rpReport CRViewer91.ViewReport Screen.MousePointer = vbDefault End Sub Sub PosizionaControlli() Dim lngLeft As Long If vediTitolo = 0 Then rpReport.txtTitolo.Suppress = True rpReport.Titolo.Suppress = True Else rpReport.txtTitolo.Left = lngLeft rpReport.Titolo.Left = lngLeft lngLeft = lngLeft + rpReport.Titolo.Width End If If vediTitoloPostale = 0 Then rpReport.txtTitoloPostale.Suppress = True rpReport.TitoloPostale.Suppress = True Else rpReport.txtTitoloPostale.Left = lngLeft rpReport.TitoloPostale.Left = lngLeft lngLeft = lngLeft + rpReport.TitoloPostale.Width End If rpReport.Nominativo.Left = lngLeft rpReport.txtNominativo.Left = lngLeft lngLeft = lngLeft + rpReport.Nominativo.Width If vediAcquisitore = 0 Then rpReport.txtAcquisitore.Suppress = True rpReport.Acquisitore.Suppress = True Else rpReport.txtAcquisitore.Left = lngLeft rpReport.Acquisitore.Left = lngLeft lngLeft = lngLeft + rpReport.Acquisitore.Width End If If vediSettore = 0 Then rpReport.txtSettore.Suppress = True rpReport.Settore.Suppress = True Else rpReport.txtSettore.Left = lngLeft rpReport.Settore.Left = lngLeft lngLeft = lngLeft + rpReport.Settore.Width End If If vediQualifica = 0 Then rpReport.txtQualifica.Suppress = True rpReport.Qualifica.Suppress = True Else rpReport.txtQualifica.Left = lngLeft rpReport.Qualifica.Left = lngLeft lngLeft = lngLeft + rpReport.Qualifica.Width End If If vediProvenienza = 0 Then rpReport.txtProvenienza.Suppress = True rpReport.Provenienza.Suppress = True Else rpReport.txtProvenienza.Left = lngLeft rpReport.Provenienza.Left = lngLeft lngLeft = lngLeft + rpReport.Provenienza.Width End If If vediAreaEnte = 0 Then rpReport.txtAreaEnte.Suppress = True rpReport.AreaEnte.Suppress = True Else rpReport.txtAreaEnte.Left = lngLeft rpReport.AreaEnte.Left = lngLeft lngLeft = lngLeft + rpReport.AreaEnte.Width End If 'controllo se girare il report in base a lngLeft If lngLeft > 21 Then rpReport.PaperOrientation = crLandscape Else rpReport.PaperOrientation = crPortrait End If End Sub
Tutti i campi sono facoltativi, tranne il Nominativo che è obbligatorio e quindi non viene scelto dall'utente.
Il problema è: come faccio a dire ai campi del report(Titolo, TitoloPostale, Qualifica, Provenienza,ecc...) a quale campo del recordset derivante dalla storedprocedure devono legarsi?
spero di essere stata chiara
grazie a tutti![]()


Rispondi quotando

)
