+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: Aprire Report Con Selezione Multipla

  1. #1
    mjjfil non è in linea Novello
    Post
    46

    Aprire Report Con Selezione Multipla

    Ciao a tutti,
    ho cercato nel forum ed era quasi fatta...
    In buona sostanza io devo aprire un report che ha come origine dati una query e vorrei filtrare questo report tramite una listbox a selezione multipla (che si chiama Elenco) che riempie e fa vedere gli "ID" dei clienti selezionati in una textbox che si chiama "Lista"...
    nella listbox che si chiama Elenco e nell'evento "su click" ho messo il seguente codice:
    codice:
    For Each varItem In Me.Elenco.ItemsSelected
    Me.Lista = Me.Lista & Me.Elenco.Column(0, varItem) & ","
    Next varItem
    poi ho il pulsante che apre il report e nel suo evento "su click" ho messo il seguente codice:
    codice:
    'On Error GoTo Err_Comando5_Click
    Dim strCondizione As String
        If IsNull(Me.Lista) Then
        strCondizione = ""
        Else
        strCondizione = "[Id_cliente] In (" & Me.Lista & ")"
        End If
    Dim stDocName As String
        stDocName = "rptGruppoClienteServizio"
        DoCmd.OpenReport stDocName, acViewPreview, , strCondizione
        
    Exit_Comando5_Click:
        Exit Sub
    Err_Comando5_Click:
        MsgBox Err.Description
        Resume Exit_Comando5_Click
    a questo punto tutto funziona correttamente solo che nella textbox visualizzo solo gli "ID" dei clienti mentre vorrei visualizzare solo la "ragione sociale"...
    non so se (e preferirei fare così) si può nella seguente stringa di codice vba associare la colonna "0" e visualizzare la colonna "1" ovvero "ragione_sociale"...
    e poi la mia ultima richiesta di aiuto è la seguente:
    come faccio a far si, una volta risolto il primo problema, che se x sbaglio (anke se nel report nn si vede) l'utente sceglie due volte lo stesso cliente dalla listbox: la ragione sociale non si ripeta due volte nella textbox?

    Vi prego aiutatemi...
    Grazie in anticipo
    Abbraccio
    Ciao
    Filippo


    P.S.
    uso Access 2007

  2. #2
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,519
    Ipotizzando che la LlistBox [Elenco] contenga 2 colonne ID e RAGIONESOCIALE... converrebbe che tu usassi una ListBox per trasferire gli ID selezionati e non una TextBox.
    Questo fermo restando che il criterio devi realizzarlo con il campo ID e non con RagioneSociale...!!!
    A questo punto definendo la ListBox a 2 Colonne la 1° a larghezza ZERO la seconda a larghezza massima, userai il Metodo ADDITEM per inserire gli ITEMS selezionati separando con ; ID e RAGIONESOCIALE.

    Farà quello che hai chiesto...!
    codice:
    Dim strCRIT as string
    For Each varItem In Me.Elenco.ItemsSelected
        strCRIT=strCRIT & Me.Elenco.Column(0, varItem) & ","
        Me.NomeListBoxSelezioni.Additem  Me.Elenco.Column(0, varItem) & ";"  Me.Elenco.Column(1, varItem)
    Next varItem
    
    strCondizione = "[Id_cliente] In (" & strCRIT  & ")"
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  3. #3
    mjjfil non è in linea Novello
    Post
    46
    Ciao Alex e grazie x la risposta...:-)
    Ho cambiato la textbox in una list box a elenco valori con colonna associata 1 e n° colonne 2 con le misure seguenti: 0cm;10cm; e senza origine dati e origine riga...
    poi nell'evento su click della listbox da cui si scelgono i valori ho inserito il seguente codice:
    codice:
    Dim strCRIT As String
    For Each varItem In Me.Elenco.ItemsSelected
        strCRIT = strCRIT & Me.Elenco.Column(0, varItem) & ","
        Me.Lista.AddItem Me.Elenco.Column(0, varItem) & ";" & Me.Elenco.Column(1, varItem)
    Next varItem
    Poi nell'evento su click del pulsante che apre il report ho inserito il seguente codice:
    codice:
    'On Error GoTo Err_Comando5_Click
    Dim strCondizione As String
        If IsNull(Me.Lista) Then
        strCondizione = ""
        Else
        strCondizione = "[Id_cliente] In (" & strCRIT & ")"
        End If
    Dim stDocName As String
        stDocName = "rptGruppoClienteServizio"
        DoCmd.OpenReport stDocName, acViewPreview, , strCondizione
        
    Exit_Comando5_Click:
        Exit Sub
    Err_Comando5_Click:
        MsgBox Err.Description
        Resume Exit_Comando5_Click
    Problema1
    Ora se seleziono un cliente dalla prima listbox mi compare il nome nella nuova list box però quando apro il report non è filtrato e mi mostra tutti i record.
    Problema2
    Se riseleziono lo stesso cliente mi compare 2 volte nella nuova listbox e vorrei intercettare in qualche modo questo errore
    Problema3
    Vorrei se possibile con un pulsante o magari con l'evento su click della seconda listbox poter eliminare il cliente compreso il suo id...spiego:
    se ho selezionato un cliente e poi quel cliente nn mi interessa + vederlo nel report vorrei poterlo togliere dalla listbox...

    Fammi sapere se mi puoi aiutare con queste 3 difficoltà che mi rimangono....
    Grazie in anticipo x la risposta
    Ciao
    Abbraccio
    Fil

  4. #4
    mjjfil non è in linea Novello
    Post
    46
    Problema n° 3 risolto
    ...rimangono gli altri 2...
    ti prego alex aiutami...

  5. #5
    mjjfil non è in linea Novello
    Post
    46
    Problema n°1 risolto
    ovvero ho modificato il codice su click della prima listbox così:
    codice:
    Dim varItem As String
    For Each varItem In Me.Elenco.ItemsSelected
        Me.Lista = Me.Lista & Me.Elenco.Column(0, varItem) & ","
        Me.Lista.AddItem Me.Elenco.Column(0, varItem) & ";" & Me.Elenco.Column(1, varItem)
    Next varItem
    rimane il Problema n° 2
    cioè dovrei far si che un cliente non possa essere inserito 2 volte...ovvero intercettare l'errore...

    Fammi sapere
    please...:-)

  6. #6
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,519
    Non capisco perchè hai il codice diviso in 2 parti...!
    Poi fai molta confusione con gli oggetti....(p.s. hai impostato la Lista PostSelezione come ELENCO VALORI e non Tabella/Query...?)

    Altra cosa devi DEBUGGARE il codice per capire cosa non funziona... nel tuo caso perchè non verifichi cosa vale alla fine la Stringa che passi come WHERE CONDITION...?
    codice:
    'On Error GoTo Err_Comando5_Click
    Dim strCondizione As String
    Dim strCRIT As String
    
        If Me.Elenco.ListIndex<0 Then
             strCondizione = ""
        Else
             ' Svuota la lista
             Me.Lista.RowSource=""
             For Each varItem In Me.Elenco.ItemsSelected
                 strCRIT = strCRIT & Me.Elenco.Column(0, varItem) & ","
                 Me.Lista.AddItem Me.Elenco.Column(0, varItem) & ";" & Me.Elenco.Column(1, varItem)
             Next varItem
             ' Devi tiogliere l'ultima VIRGOLA...
             strCRIT=Mid$(strCRIT,1,Len(strCRIT)-1)
             strCondizione = "[Id_cliente] In (" & strCRIT & ")"
        End If
        Dim stDocName As String
        stDocName = "rptGruppoClienteServizio"
        DoCmd.OpenReport stDocName, acViewPreview, , strCondizione
        
    Exit_Comando5_Click:
        Exit Sub
    Err_Comando5_Click:
        MsgBox Err.Description
        Resume Exit_Comando5_Click
    End Sub
    Ricorda che la ListBox deve sempre essere SVUOTATA... prima di ririempirla...!
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  7. #7
    mjjfil non è in linea Novello
    Post
    46
    Divido il codice tra il pulsante e la prima listbox perchè voglio che l'utente veda effettivamente cosa ha selezionato o se ha sbagliato a selezionare...
    Adesso funziona con il codice diviso in 2...!!!
    Le uniche 2 cose che non vanno ancora sono le seguenti:

    1-ho creato un pulsante che una volta selezionato (nella 2° listbox), il cliente, lo elimina se non lo si vuole vedere nel report....e il problema è che una volta eliminato dalla seconda lista, il cliente:
    il report (che ha come origine dati una query) non mi visualizza quelli restanti ma quello eliminato ovvero l'ultimo selezionato...
    il codice che uso sul pulsante è il seguente:
    codice:
    On Error GoTo Errore
    Dim i As Integer
    
    For i = Lista.ListCount - 1 To 0 Step -1
       If Lista.Selected(i) Then Lista.RemoveItem i
    Next i
    Exit Sub
    Errore:
    Resume Next
    2-vorrei poter intercettare l'errore di quando viene selezionato 2 volte un cliente ovvero che se anche dovesse venire selezionato 2 volte viene visualizzato una volta sola...

  8. #8
    mjjfil non è in linea Novello
    Post
    46
    ti prego alex aiutami....sono nelle tue mani...

  9. #9
    mjjfil non è in linea Novello
    Post
    46
    c'è nessuno che mi può aiutare?......

  10. #10
    mjjfil non è in linea Novello
    Post
    46
    Rinnovo la mia richiesta di aiuto....
    e riporto gli ultimi miei due problemi
    Le uniche 2 cose che non vanno ancora sono le seguenti:
    1-ho creato un pulsante che una volta selezionato (nella 2° listbox), il cliente, lo elimina se non lo si vuole vedere nel report....e il problema è che una volta eliminato dalla seconda lista, il cliente:
    il report (che ha come origine dati una query) non mi visualizza quelli restanti ma quello eliminato ovvero l'ultimo selezionato...
    il codice che uso sul pulsante è il seguente:
    codice:
    n Error GoTo Errore
    Dim i As Integer
    
    For i = Lista.ListCount - 1 To 0 Step -1
       If Lista.Selected(i) Then Lista.RemoveItem i
    Next i
    Exit Sub
    Errore:
    Resume Next
    2-vorrei poter intercettare l'errore di quando viene selezionato 2 volte un cliente ovvero che se anche dovesse venire selezionato 2 volte viene visualizzato una volta sola...
    Grazie in anticipo
    Ciao
    Abbraccio
    Filippo

+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi