Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1

    [Vb6] datareport: associazione oggetti report a campi recordset

    Ciao,

    sto creando un datareport per stampare alcuni dati di + tabelle di un database; sfrutto, per diverse ragioni, l'associazione manuale dei dati: mi sono creato un recordset nel quale vado a mettere i dati che filtro dal database ma non so come fare ad associare un oggetto (tipicamente un rptTextBox) delle sezioni del datareport ad un campo del mio recordset. Qualcuno sa come aiutarmi?

    Grazie molte

  2. #2
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Ciao MissRachele,
    di seguito ti espongo un esempio:
    codice:
    Dim ConPr1 As New ADODB.Connection
    Dim RSTpr1 As New ADODB.Recordset
        
        'Esegue la connessione con il DataBase:
        With ConPr1
            .ConnectionString = DataConnessione
            .CursorLocation = adUseClient        'tipo di cursore
            .Mode = adModeShareDenyNone     'nessuna limitazione
            .CommandTimeout = 15
            .Open
        End With
    
        ' Inserisce intestazione e Nome del file nella pagina:
        With DRAnagCL.Sections("Section4").Controls
            .Item("Lbl1").Caption = "Dati anagrafici del cliente"
            .Item("Lbl2").Caption = "......"
        End With
    
        RSTpr1.Source = "SELECT Titolo, Nome, Cognome, CodFisc, Via, NomeVia, Ncivico, Cap, Citta, Provincia, Telefono, Cellulare, Fax, Email FROM TblAnagCliente WHERE Nome='" & Replace(FrmAnCliMod.TxtCt1m.Text, "'", "''") & "' And Cognome='" & Replace(FrmAnCliMod.TxtCt2m.Text, "'", "''") & "'"
            RSTpr1.Open , ConPr1, adOpenDynamic, adLockOptimistic
            
            ' Controlla che il DB contenga i dati da visualizzare:
            If RSTpr1.EOF = False And RSTpr1.BOF = False Then
            ' Assegna il riferimento all'oggetto:
                Set DRAnagCL.DataSource = RSTpr1
                ' Inserisce i dati nei controlli del DataReport:
                With DRAnagCL.Sections("Section1")
                    .Controls("Txt1").DataField = "Titolo"
                    .Controls("Txt2").DataField = "Nome"
                    .  .....
                 End With
    ' ....
    ' ....
    LM

  3. #3
    Intanto grazie x il codice d'esempio...

    ho ancora qualche problemino; riporto di seguito il codice del datareport:


    Public Function InitReport(IdenPrestito As Integer) As Boolean
    Dim RicRecordSet As Recordset

    Set RicRecordSet = New ADODB.Recordset
    RicRecordSet.CursorType = adOpenKeyset
    RicRecordSet.LockType = adLockOptimistic

    RicRecordSet.Open "SELECT pr_ID FROM Prestiti WHERE pr_ID = " & IdenPrestito, Connescio, , , adCmdText
    If RicRecordSet.RecordCount <> 0 Then
    RicRecordSet.MoveFirst
    Set dtrPrestitiSingolo.DataSource = RicRecordSet
    With dtrPrestitiSingolo.Sections("Section6")
    .Controls("txtPosizione").DataField = "pr_ID"
    End With
    InitReport = True
    End Function
    -------------------------------------------------------
    ed il codice chiamante la stampa:

    Private Sub cmdPrestitiStampa_Click()
    IdPrestito = fgrPrestiti.TextMatrix(fgrPrestiti.RowSel, 14)
    If dtrPrestitiSingolo.InitReport(IdPrestito) = True Then
    dtrPrestitiSingolo.Show vbModal
    Else
    MsgBox "Impossibile eseguire la stampa"
    End If
    End Sub
    -------------------------------------------------------
    Con questo codice mi dà un errore, con questo messaggio "Report sections do not match data source".

    -------------------------------------------------------
    -------------------------------------------------------
    Tieni presente, però, che il codice sopra è solo un tentativo per vedere se funziona; in realtà il codice del programma è quello che riporto di seguito:

    Public Function InitReport(IdenPrestito As Integer) As Boolean
    Dim LinkRecordSet As Recordset
    Dim JoinRecordSet As Recordset

    Set RicRecordSet = New ADODB.Recordset
    RicRecordSet.CursorType = adOpenKeyset
    RicRecordSet.LockType = adLockOptimistic

    Set PrintRecordSet = New ADODB.Recordset
    PrintRecordSet.CursorType = adOpenKeyset
    PrintRecordSet.LockType = adLockOptimistic

    Set LinkRecordSet = New ADODB.Recordset
    LinkRecordSet.CursorType = adOpenKeyset
    LinkRecordSet.LockType = adLockOptimistic

    Set JoinRecordSet = New ADODB.Recordset
    JoinRecordSet.CursorType = adOpenKeyset
    JoinRecordSet.LockType = adLockOptimistic

    With PrintRecordSet
    .Fields.Append "PresIden", adInteger
    .Fields.Append "PresNum", adInteger
    .Fields.Append "PresData", adDate
    .Fields.Append "PresTipo", adBSTR
    .Fields.Append "PresFinan", adBSTR
    .Fields.Append "PresGrado", adBSTR
    .Fields.Append "PresMili", adBSTR
    .Fields.Append "PresMatr", adBSTR
    .Fields.Append "PresPos", adBSTR
    .Fields.Append "PresMan", adBSTR
    .Fields.Append "PresDataMan", adDate
    .Fields.Append "PresImpo", adInteger
    .Fields.Append "PresRata", adInteger
    .Fields.Append "PresNumRate", adInteger
    .Fields.Append "PresMeseIn", adBSTR
    End With
    PrintRecordSet.Open

    RicRecordSet.Open "SELECT * FROM Prestiti WHERE pr_ID = " & IdenPrestito, Connescio, , , adCmdText
    If RicRecordSet.RecordCount <> 0 Then
    RicRecordSet.MoveFirst
    PrintRecordSet.AddNew
    PrintRecordSet!PresIden = RicRecordSet!pr_ID
    PrintRecordSet!PresNum = RicRecordSet!pr_Numero
    PrintRecordSet!PresData = RicRecordSet!pr_Data
    LinkRecordSet.Open "SELECT * FROM PrestitiTipo WHERE pt_ID = " & RicRecordSet!pr_Tipo, Connescio, , , adCmdText
    If LinkRecordSet.RecordCount <> 0 Then
    PrintRecordSet!PresTipo = LinkRecordSet!pt_TipoPrestito
    Else
    MsgBox "Errore.", vbCritical + vbOKOnly
    End If
    LinkRecordSet.Close

    LinkRecordSet.Open "SELECT * FROM MilitariServizio WHERE ms_ID = " & RicRecordSet!pr_Contraente, Connescio, , , adCmdText
    If LinkRecordSet.RecordCount <> 0 Then
    JoinRecordSet.Open "SELECT * FROM Gradi WHERE gr_ID = " & LinkRecordSet!ms_Grado, Connescio, , , adCmdText
    If JoinRecordSet.RecordCount <> 0 Then
    PrintRecordSet!PresGrado = JoinRecordSet!gr_SiglaGrado
    Else
    MsgBox "Errore. ", vbCritical + vbOKOnly
    End If
    JoinRecordSet.Close
    PrintRecordSet!PresMili = LinkRecordSet!ms_CognomeNome
    PrintRecordSet!PresMatr = LinkRecordSet!ms_Matricola
    End If

    If RicRecordSet!pr_Posizione <> "" Then
    PrintRecordSet!PresPos = RicRecordSet!pr_Posizione
    End If
    Else
    MsgBox "Errore." & IdenPrestito, vbCritical + vbOKOnly
    End If
    RicRecordSet.Close
    PrintRecordSet.Update
    PrintRecordSet.MoveFirst
    Set dtrPrestitiSingolo.DataSource = RicRecordSet
    With dtrPrestitiSingolo.Sections("Section6")
    .Controls("txtPosizione").DataField = "pr_ID"
    End With
    InitReport = True
    End Function
    -------------------------------------------------------
    Anche in questo caso mi dice: "Report sections do not match data source".

    -------------------------------------------------------
    -------------------------------------------------------
    Se riesci a capire cosa cavolo non funziona....avrò fatto mille tentativi, ma non so che pesci prendere, e ho un ritardo medioevale!!!

    Grazie

  4. #4
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Mi domando se il controllo RptTextBox possa essere inserito nella "Section6" come vedo dal seguente codice:
    codice:
    With dtrPrestitiSingolo.Sections("Section6")
    .Controls("txtPosizione").DataField = "pr_ID"
    a mio avviso no. Prova a sostituirlo con una RptLabel, se è possibile.
    LM

  5. #5
    ho cambiato tutto...
    ho creato una tabella (StampaSingoloPrestito) con access contenente i campi che poi devo stampare; ho inserito nelle proprietà del datareport il datasource (ho messo il dataenviroment) ed il datamember (l'unico command che ho aggiunto nel data enviroment). Nella funzione InitReport (che ho messo nel codice del datareport) riempio i campi della tabella (StampaSingoloPrestito) e poi lancio la stampa. Risultato?
    Mi dice "Report sections do not match data source".
    Sai perchè? Sai come posso risolvere il problema? ...sono disperato!

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    12

    [Vb6] datareport: associazione oggetti report a campi recordset

    Ciao Miss Rachele,
    penso di averti risolto il problema...che poi è anche il mio. Puoi fare una cosa molto semplice.
    Innanzitutto lascia perdere sia i Data Environment, sia le Connection e sia i Command.
    Crea un data report con le sezioni standard quindi con:
    - Intestazione report (Section4)
    - Intestazione pagina (Section2)
    - Dettaglio (Section1)
    - Piè di pagina pagina (Section3)
    - Piè di pagina report (Section5)
    Visto che le textbox si possono inserire solo nel Dettaglio, nelle altre sezioni inserisci delle label. Mi spiego meglio: se ad esempio devi creare un elenco che sia completamente dinamico costruito in questo modo:

    nella Section4 c'è Label1 e Label2
    nella Section2 c'è Label3 e Label4
    nella Section1 c'è TextBox1
    nella Section2 c'è Label5 e Label6
    nella Section2 c'è Label7 e Label8

    e poniamo caso che in MiaTabella hai i campi Cognome, Nome, Cellulare, Indirizzo e Telefono
    puoi settare tutti le varie informazioni con il seguente codice di esempio:

    Set Rc = Cn.Execute("SELECT * FROM MiaTabella", , adCmdText)
    Set drMioReport.DataSource = Rc

    If Rc.RecordCount <> 0 Then

    drMioReport.Sections("Section4").Controls("Label1" ).Caption = "Cognome: "
    drMioReport.Sections("Section4").Controls("Label2" ).Caption = Rc"Cognome")
    drMioReport.Sections("Section2").Controls("Label3" ).Caption = "Nome: "
    drMioReport.Sections("Section2").Controls("Label4" ).Caption = Rc("Nome")
    drMioReport.Sections("Section1").Controls("TextBox 1").Caption = "Cellulare"
    drMioReport.Sections("Section3").Controls("Label5" ).Caption = "Indirizzo: "
    drMioReport.Sections("Section3").Controls("Label6" ).Caption = Rc("Indirizzo")
    drMioReport.Sections("Section5").Controls("Label7" ).Caption = "Telefono: "
    drMioReport.Sections("Section5").Controls("Label8" ).Caption = Rc("Telefono")
    End If

    drFatturaUscita.WindowState = vbMaximized
    drFatturaUscita.Show vbModal

    Ovviamente all'inizio devi aprire la connessione. Poi in DataReport_Terminate devi chiudere sia il recorset sia la connessione, in questo modo quando lo riapri all'interno della stessa maschera la visualizzazione è sempre veloce).

    Ovviamente potresti anche settare manualmente il campo nella Section1 e gli altri come nel codice di esempio.

    Comunque se non fosse chiaro puoi fare due cose: o mi rispondi sul forum o mi contatti privatamente a questo indirizzo (paolopaciaroni@hotmail.com). OK?

    Fammi sapere come è andata

    Paolo

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465

    Moderazione

    Originariamente inviato da Paolo72
    Comunque se non fosse chiaro puoi fare due cose: o mi rispondi sul forum o mi contatti privatamente [...]
    E' sempre meglio discuterne sul forum, così ogni considerazione o soluzione può essere utile anche ad altre persone.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    12

    [Vb6] datareport: associazione oggetti report a campi recordset

    Ciao Alka,
    ciò che tu dici è molto esatto. In effetti lo spirito di questi forum come di altri è proprio questo: condividere con altre persone le proprie esperienze in fatto di programmazione.
    Infatti il mio invito a Miss Rachele era solo per non appesantire troppo questo intervento. Mi spiego: una volta discusso in modo approfondito il problema e trovata la soluzione più ottimale, non avrei fatto altro (o lo avrebbe fatto Miss Rachele) che inserire il tutto come ultimo intervento e dichiarare come risolto il problema.
    Mi scuso comunque con te e con gli altri iscritti al forum per l'aspetto "ambiguo" della richiesta.

    Paolo

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465

    Moderazione

    Originariamente inviato da Paolo72
    Infatti il mio invito a Miss Rachele era solo per non appesantire troppo questo intervento.
    Premetto che il mio intervento era volto a fornire una linea guida, non era un vero e proprio rimprovero.

    Comunque, non ci sono problemi di "appesantimento" negli interventi: il forum è fatto proprio per ospitare la discussione, anche perché qualsiasi trattazione in forma privata impedisce sostanzialmente la partecipazione di altri utenti che potrebbero correggere o apportare informazioni interessanti sulla questione trattata, cosa che risulta impossibile se si adotta il forum come un mezzo di contatto per "collaborazione privata".

    Nessun problema comunque. Buona prosecuzione!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    12

    [Vb6] datareport: associazione oggetti report a campi recordset

    - Messaggio per il Moderatore -
    Ok...in effetti non avevo pensato al fatto delle correzzioni...di conseguenza ritiro la mia proposta fatta a Miss Rachele di contattarmi privatamente.

    - Messaggio per Miss Rachele -
    Fammi sapere se ti sono stato utile e/o se ti serve qualche altro aiuto rispondendo a questo intervento.

    Ciao

    Paolo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.