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

Discussione: Ciclare Controllo TextBox su risultato Recordset

  1. #1
    L'avatar di Diego1966
    Diego1966 non è in linea Scolaretto
    Luogo
    Palermo
    Post
    90

    Ciclare Controllo TextBox su risultato Recordset

    Buongiorno al gruppo.

    Chiederei il vostro aiuto su una routine che a quanto pare funziona ma non per come vorrei:

    In una form ho 8 texbox che ho chiamato TxCirc come radice e poi da 1 a 8 come indice, quindi TxCirc1, 2, 3 ecc fino ad 8, tante quanto sono le circoscrizioni della mia città.

    in questa maschera c'è anche una combobox che mi restituisce i nominativi dei coordinatori che dirigono squadre di lavoro che operano nelle circoscrizioni, un coordinatore può avere da 1 a più circoscrizioni assegnate.

    Con l'evento change della combobox parte una routine che estrapola con una query quali sono le circoscrizioni assegnate a quel coordinatore e contestualmente il valore del Field IdCircoscrizione dovrebbe andare a popolare la texbox con il numero corrispondente all'IDCircoscrizione, ma purtroppo la funzione non funge, ovvero mi popola le caselle per quante sono le circoscrizioni assegante, per cui se un cordinatore ha solo una circoscrizione mi ritorna l'id corretto ma sulla prima texbox, se ne ha due o tre mi ritorna gli id ma non nell'ordine esatto ma popola le texbox in maniera consecutiva, ed invece non vorrei che fosse cosiì, se un coordinatore ha assegnata la 3 la 5 e la sesta circoscrizione le texbox che dovrebbero popolarsi dovrebbero essere TxCirc3, TxCirc5 e TxCirc6, e non le prime tre texbox delle 8 presenti.

    Questa è la routine, sareste così gentili da indicarmi dove commetto l'errore?

    codice:
    Function Circoscrizione()
    
    On Error GoTo Errore
    
    Dim rs As Recordset
    Dim i As Integer
    Dim ctrl As Control
    Dim QryCirc As String
    
    'Supponendo che le caselle di testo siano già state create e denominate TxCirc1, TxCirc2, ecc.
    'Svuota e nascondi tutte le caselle di testo TxCirc
    
    For Each ctrl In Me.Controls
    If Left(ctrl.Name, 6) = "TxCirc" Then
            ctrl.Visible = False
            ctrl.Value = ""
        End If
    Next ctrl
    
    Set db = CurrentDb
    
    QryCirc = "SELECT TblCircoscrizioni.IDCircoscrizione, TblCircoscrizioni.Circoscrizione " & _
    "FROM TblCircoscrizioni INNER JOIN TblCooCir ON TblCircoscrizioni.IDCircoscrizione = TblCooCir.IdCirc " & _
    "WHERE (((TblCooCir.IdCoord)=" & Me.ComboCoord.Column(1) & "))"
    
    
    Set rs = db.OpenRecordset(QryCirc, dbOpenDynaset)
    
    If rs.EOF And rs.BOF Then
    Else
        i = 1
        Do While Not rs.EOF
    
            'Impostare il valore di ogni casella di testo sul 1 valore dell' IDCircoscrizione del recordset
    
            Me.Controls("TxCirc" & i).Value = rs!IDCircoscrizione.Value
    
    
    
    
            'Mostra la casella di testo
    
            Me.Controls("TxCirc" & i).Visible = True
    
            'iterare il contatore che passa alla casella di testo successiva
    
                i = i + 1
    
            rs.MoveNext
        Loop
    End If
    
    
    rs.Close
    db.Close
    Set rs = Nothing
    Set db = Nothing
    
    
    Errore: Exit Function
    End Function
    Grazie a tutti

  2. #2
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,158
    Blogs
    5
    Scusa ... è ovvio che il problema è in

    "TxCirc" & i

    dato che i è un contatore che parte da 1 e va avanti ...

    Al posto di i devi mettere il valore della circoscrizione prelevato dal recordset. Non so in quale campo sia ...
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  3. #3
    L'avatar di Diego1966
    Diego1966 non è in linea Scolaretto
    Luogo
    Palermo
    Post
    90
    Ho risolto.

    codice:
    Function Circoscrizione()
    
    On Error GoTo Errore
    
    Dim rs As Recordset
    Dim QryCirc As String
    
    Set db = CurrentDb
    
    QryCirc = "SELECT TblCircoscrizioni.IDCircoscrizione, TblCircoscrizioni.Circoscrizione " & _
    "FROM TblCircoscrizioni INNER JOIN TblCooCir ON TblCircoscrizioni.IDCircoscrizione = TblCooCir.IdCirc " & _
    "WHERE (((TblCooCir.IdCoord)=" & Me.ComboCoord.Column(1) & "))"
    
    
    Set rs = db.OpenRecordset(QryCirc, dbOpenDynaset)
    
    
    Do Until rs.EOF
    
    Me("TxCirc" & rs!IDCircoscrizione).Value = rs!IDCircoscrizione
    
    
    
    
            rs.MoveNext
        Loop
    
    
    rs.Close
    db.Close
    Set rs = Nothing
    Set db = Nothing
    
    Me.ComboCirc.RowSourceType = "TABLE/QUERY"
    Me.ComboCirc.RowSource = QryCirc
    
    
    Errore: Exit Function
    End Function

  4. #4
    L'avatar di Diego1966
    Diego1966 non è in linea Scolaretto
    Luogo
    Palermo
    Post
    90
    Il Campo è IDcircoscrizione, rs!IDCircoscrizione

  5. #5
    L'avatar di Diego1966
    Diego1966 non è in linea Scolaretto
    Luogo
    Palermo
    Post
    90
    Quote Originariamente inviato da AntonioG Visualizza il messaggio
    Scusa ... è ovvio che il problema è in

    "TxCirc" & i

    dato che i è un contatore che parte da 1 e va avanti ...

    Al posto di i devi mettere il valore della circoscrizione prelevato dal recordset. Non so in quale campo sia ...

    Il Campo è IDcircoscrizione, rs!IDCircoscrizione

    tu come faresti?

  6. #6
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,158
    Blogs
    5
    Ma se hai risolto come ti avevo suggerito di fare, perché chiedi come farei io???
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  7. #7
    L'avatar di Diego1966
    Diego1966 non è in linea Scolaretto
    Luogo
    Palermo
    Post
    90
    Quote Originariamente inviato da AntonioG Visualizza il messaggio
    Ma se hai risolto come ti avevo suggerito di fare, perché chiedi come farei io???

    scusami, intendevo sulla stessa routine usando il for each e il Do While, io l0avevo risolto usando solo il Do Until


    comunque ho provato usando il tuo suggerimento e cioè passando ad i il valore del rs!IdCircoscrizione, e funzona in parte, se un cordinatore segue più di due circoscrizioni va sempre consecutivamente, viceversa fino a due imposta il valore del recordset!field nella texbox corretta

  8. #8
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,158
    Blogs
    5
    Quote Originariamente inviato da Diego1966 Visualizza il messaggio
    scusami, intendevo sulla stessa routine usando il for each e il Do While, io l0avevo risolto usando solo il Do Until
    Continuo a non capire ma non importa

    comunque ho provato usando il tuo suggerimento e cioè passando ad i il valore del rs!IdCircoscrizione, e funzona in parte, se un cordinatore segue più di due circoscrizioni va sempre consecutivamente
    Non può andare consecutivamente dato che non c'è più una variabile i contatore.

    viceversa fino a due imposta il valore del recordset!field nella texbox corretta
    Anche questo non ha senso.

    Sicuro che stai usando l'ultimo codice che hai mostrato?
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  9. #9
    L'avatar di Diego1966
    Diego1966 non è in linea Scolaretto
    Luogo
    Palermo
    Post
    90
    Quote Originariamente inviato da AntonioG Visualizza il messaggio
    Continuo a non capire ma non importa



    Non può andare consecutivamente dato che non c'è più una variabile i contatore.



    Anche questo non ha senso.

    Sicuro che stai usando l'ultimo codice che hai mostrato?
    si te lo posto.

    codice:
    Function Circoscrizione()
    
    On Error GoTo Errore
    
    Dim rs As Recordset
    Dim i As Integer
    Dim ctrl As Control
    Dim QryCirc As String
    
    'Supponendo che le caselle di testo siano già state create e denominate TxCirc1, TxCirc2, ecc.
    'Svuota e nascondi tutte le caselle di testo TxCirc
    
    For Each ctrl In Me.Controls
    If Left(ctrl.Name, 6) = "TxCirc" Then
    '        ctrl.Visible = False
            ctrl.Value = ""
        End If
    Next ctrl
    
    Set db = CurrentDb
    
    QryCirc = "SELECT TblCircoscrizioni.IDCircoscrizione, TblCircoscrizioni.Circoscrizione " & _
    "FROM TblCircoscrizioni INNER JOIN TblCooCir ON TblCircoscrizioni.IDCircoscrizione = TblCooCir.IdCirc " & _
    "WHERE (((TblCooCir.IdCoord)=" & Me.ComboCoord.Column(1) & "))"
    
    
    Set rs = db.OpenRecordset(QryCirc, dbOpenDynaset)
    
    If rs.EOF And rs.BOF Then
    Else
        i = rs!IDCircoscrizione.Value
        Do While Not rs.EOF
    
            'Impostare il valore di ogni casella di testo sul 1 valore dell' IDCircoscrizione del recordset
    
            Me.Controls("TxCirc" & i).Value = rs!IDCircoscrizione.Value
    
    
    
    
            'Mostra la casella di testo
    
    '        Me.Controls("TxCirc" & i).Visible = True
    
            'iterare il contatore che passa alla casella di testo successiva
    
                i = i + 1
    
            rs.MoveNext
        Loop
    End If
    
    
    rs.Close
    db.Close
    Set rs = Nothing
    Set db = Nothing
    
    Me.ComboCirc.RowSourceType = "TABLE/QUERY"
    Me.ComboCirc.RowSource = QryCirc
    
    
    Errore: Exit Function
    End Function

  10. #10
    L'avatar di Brontolo
    Brontolo non è in linea Very Important Person
    Post
    2,816
    La variabile i la devi impostare all'interno del ciclo di lettura e non la devi incrementare.
    Le righe
    codice:
    If rs.EOF And rs.BOF Then
    non servono a niente.
    Il regolamento del forum: la prima cosa da leggere.

+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo

Permessi di invio

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