Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

List Box

  1. #1
    L'avatar di dodo47
    dodo47 non  in linea Topo di biblioteca
    Post
    3,107
    Like Inviati  
    0
    Like Ricevuti  
    0
    Ciao a tutti
    a parte complicate (per me) soluzioni Leban, mi sembra di capire che non sia possibile l'update di una "colonna" di una list box.

    Vengo al problema e a come procedo:

    Alimento una ListBox con vari campi derivanti da una query effettuata su una tabella, gi abbastanza pesante in quanto mette nella where tutti i campi.
    quindi:
    ....
    mRst.Move first
    Do Until mRst.EOF
        For X = 0 To mRst.Fields.count - 1
            If X = 8 Then Stop
            mStr = mStr & ";" & mRst.Fields(X)
            End If
        Next
        mStr = mID(mStr, 2, Len(mStr))
        Me.mList.AddItem mStr
        mStr = ""
        mRst.MoveNext
    Loop
    ...
    
    Poi con un ulteriore Loop determino la larghezza delle colonne:
    ....
    
    mLL = ""
    LL = 0
    nR = Me.mList.ListCount - 1
    nC = Me.mList.ColumnCount - 1
    For A = 0 To nC
        For b = 0 To nR
        L = Len(Me.mList.Column(A, b))
        If L > LL Then LL = L
        If L = 1 Then L = 2
        Next b
        If A = 8 Then E = LL
        If A = 10 Then U = LL
        
        mLL = mLL & Int((1140 * LL / 9.25)) & ";"
        LL = 0
    Next A
    mLL = left(mLL, Len(mLL) - 1)
    Me.mList.ColumnWidths = mLL
    ....
    
    E' ancorch vero che tali cicli possono essere integrati in uno solo

    Ora dovrei allineare a destra due colonne numeriche e pensavo di farlo aggiungendo tanti spazi davanti al numero quanto la larghezza della colonna interessata (e precedentemente messa in una variabile) meno la larghezza del campo stesso, un qualcosa tipo:
    ....
    ...
    Ciclo For per le due colonne ineteressate
    Me.mList.Column(8, b) = String$(E - Len(Me.mList.Column(8, b)), " ") & Me.mList.Column(8, b)
    ...
    
    che Access non accetta.

    Devo effettuare l'ennesimo Loop della ListBox ricostruendo l'intera stringa?

    grazie e saluti
    Ultima modifica di dodo47; 10-03-2012 09:46 

  2. #2
    L'avatar di dodo47
    dodo47 non  in linea Topo di biblioteca
    Post
    3,107
    Like Inviati  
    0
    Like Ricevuti  
    0
    Ciao di nuovo
    Vi prego di non tener conto del post precedente


    Chiedo scusa, ma nel frattempo ho trovato una soluzione migliore per l'alimentazione della ListBox, solo che mi trovo in difficolt per l'aggiornamento.

    Struttura adottata:
    - Frm con cbo del dato da trovare
    - ListBox che ne riporta i risultati

    Private Sub Cerca_AfterUpdate()
    Dim mSql As String, mStr As String
    Dim db As DAO.Database
    Dim mRst As DAO.Recordset
    Dim dbs As Database
    Dim qdfNew As QueryDef
    On Error GoTo Esci
    mStr = ""
    mSql = "SELECT * FROM qWeb"
    Set mRst = DBEngine(0)(0).OpenRecordset(mSql)
    
    'costruzione stringa  WHERE con i nomi campi in & e query di ricerca
    For X = 0 To mRst.Fields.count - 1
        mStr = mStr & " " & " " & mRst.Fields(X).NAME & " & ' ' & " & ""
    Next
    mRst.Close
    Set mRst = Nothing
    mStr = mID(mStr, 1, Len(mStr) - 8)
    mStr = mStr & "LIKE '*" & Cerca & "*'"
    mSql = "SELECT * FROM qWeb WHERE" & mStr & " ORDER BY data"
    
    On Error Resume Next
    Set dbs = CurrentDb
    With dbs
        .QueryDefs.Delete "qWebSearch"
        Set qdfNew = .CreateQueryDef("qWebSearch", mSql)
        .Close
    End With
    On Error goto Esci
     Application.Echo False
       DoCmd.Close acForm, ("WebSearch")
       DoCmd.OpenForm ("WebSearch")
      Application.Echo True
    
    
    'errori
    Esci:
    .....
    .....
    End Sub
    
    Ovviamente su origine dati della ListBox c' "qWebSearch"

    Come noterete, alla fine faccio una "schifezza", in quanto non sono riuscito a fare il requery della ListBox con i nuovi dati.
    Inoltre, se il valore cercato non trovato, la form ovviamente si riapre non visualizzando n la cbo di scelta n la listBox.

    L'altro problema legato a quanto riportato nel primo post e cio la possibilit di allineare a destra due colonne in quanto contengono gli importi dei movimenti contabili.

    Grazie per ogni indicazione e suggerimento

    saluti
    Ultima modifica di dodo47; 10-03-2012 12:11 

  3. #3
    L'avatar di dodo47
    dodo47 non  in linea Topo di biblioteca
    Post
    3,107
    Like Inviati  
    0
    Like Ricevuti  
    0
    Ciao
    relativamente all'allineamento, ho utilizzato il seguente metodo visto che il recordSource della ListBox una query, inserisco nel relativo campo della mia query:
    Numero: Space(13-Len(Format([MioCampo];"standard"))) & Format([MioCampo];"standard"))
    
    Resta il problema relativo al post precedente.

    saluti

  4. #4
    L'avatar di @Alex
    @Alex non  in linea Moderatore Globale
    Post
    16,804
    Like Inviati  
    0
    Like Ricevuti  
    23
    Scusa ma mi sono perso dei pezzi...
    Per l'allineamento perfetto, l'altro problema quale sarebbe...? non si aggiorna la combo...?
    Non vedo nel codice il REQUERY o sbaglio...?
    ℹ️ Leggi di pi su @Alex ...

  5. #5
    L'avatar di dodo47
    dodo47 non  in linea Topo di biblioteca
    Post
    3,107
    Like Inviati  
    0
    Like Ricevuti  
    0
    Ciao Alex e grazie

    Mi spiego meglio, questo l'attuale codice:
    Private Sub StringaParziale_AfterUpdate() 'cerca un valore in tutti i campi di una tabella
    Dim mSql As String, mStr As String
    Dim db As DAO.Database
    Dim mRst As DAO.Recordset
    Dim dbs As Database
    Dim qdfNew As QueryDef
    On Error GoTo Esci
    mStr = ""
    mSql = "SELECT * FROM qWeb"
    Set mRst = DBEngine(0)(0).OpenRecordset(mSql)
    
    'costruzione stringa  WHERE con i nomi campi in & e query di ricerca
    For X = 0 To mRst.Fields.count - 1
        mStr = mStr & " " & " " & mRst.Fields(X).NAME & " & ' ' & " & ""
    Next
    mRst.Close
    Set mRst = Nothing
    mStr = mID(mStr, 1, Len(mStr) - 8)
    mStr = mStr & "LIKE '*" & StringaParziale & "*'"
    mSql = "SELECT * FROM qWeb WHERE" & mStr & " ORDER BY data"
    Set mRst = DBEngine(0)(0).OpenRecordset(mSql)
    
    If Not mRst.EOF Then
        
        Set dbs = CurrentDb
        With dbs
        On Error Resume Next
            .QueryDefs.Delete "qWebSearch"  'source della ListBox
        On Error GoTo Esci:
            Set qdfNew = .CreateQueryDef("qWebSearch", mSql)
            .Close
        End With
            Application.Echo False
             DoCmd.Close acForm, ("WebSearch")
             DoCmd.OpenForm ("WebSearch")
            Application.Echo True
    Else
        MsgBox "Nessun risultato"
    End If
    mRst.Close
    Set mRst = Nothing
    Set dbs = Nothing
    Set qdfNew = Nothing
    
    'errori
    Esci:
    ........
    
    alla fine faccio quella "cosa indegna" di chiudere e riaprire la form in quanto non sono riuscito a gestire il requery della ListBox.

    saluti

  6. #6
    L'avatar di @Alex
    @Alex non  in linea Moderatore Globale
    Post
    16,804
    Like Inviati  
    0
    Like Ricevuti  
    23
    Cosa intendi quando dici che non sei riuscito a gestire il REQUERY...?
    Lo hai messo e non funziona...?
    Dove lo hai messo...?
    Hai provato a scrivere questo in opzione al Requery
    Me.NomeListBox.RowSource=Me.NomeListBox.RowSource
    
    Non riesco a centrare il discorso...
    ℹ️ Leggi di pi su @Alex ...

  7. #7
    L'avatar di dodo47
    dodo47 non  in linea Topo di biblioteca
    Post
    3,107
    Like Inviati  
    0
    Like Ricevuti  
    0
    Salvatore della patria!!!...non ci avevo proprio pensato! grazie
    ...
    If Not mRst.EOF Then
        On Error Resume Next
        Set dbs = CurrentDb
        With dbs
            .QueryDefs.Delete "qWebSearch"
            Set qdfNew = .CreateQueryDef("qWebSearch", mSql)
            .Close
        End With
    Me.mList.RowSource = Me.mList.RowSource ' avevo fatto solo Me.mList.Requery
    
    ...
    
    Ultimo consiglio:
    su valore non trovato, come posso cancellare il contenuto della ListBox, visto che non posso utilizzare < Me.mList.RowSource="" >?
    L'unica cosa che mi venuta in mente un cliclo di cancellazione, ma....

    grazie e saluti
    Ultima modifica di dodo47; 14-03-2012 09:17 

  8. #8
    L'avatar di @Alex
    @Alex non  in linea Moderatore Globale
    Post
    16,804
    Like Inviati  
    0
    Like Ricevuti  
    23
    Se la ListBox associata non puoi cancellare nella ListBox ma devi inserire un CRITERIO di esclusione nella Query e REQUERY.
    ℹ️ Leggi di pi su @Alex ...

  9. #9
    L'avatar di dodo47
    dodo47 non  in linea Topo di biblioteca
    Post
    3,107
    Like Inviati  
    0
    Like Ricevuti  
    0
    Ciao
    se ho ben capito, gli dico trova tutto tranne quello che non c'...!

    Se cos , tanto vale mettere un msg di non trovato e lasciare il risultato della interrogazione precedente...o no ?

    saluti

  10. #10
    L'avatar di @Alex
    @Alex non  in linea Moderatore Globale
    Post
    16,804
    Like Inviati  
    0
    Like Ricevuti  
    23
    Credo di aver frainteso pensavo volessi cancellare il singolo ITEM, ho riletto ora la cosa...
    Perch dici di non poter fare
    Me.mList.RowSource=""
    
    Io di solito faccio proprio cos... uso il REMOVEITEM solo se il controllo ha come TipoOrigineRiga=Elenco Valori, visto che per popolarlo uso AddItem.

    Cosa mi sfugge...?
    ℹ️ Leggi di pi su @Alex ...

+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo

Potrebbero interessarti anche ...

  1. list box
    Da marchino86 nel forum Visual Basic 6
    Risposte: 4
    Ultimo Post: 21-10-2005, 10:52
  2. List in documento.txt
    Da SlowMarco nel forum Visual Basic 6
    Risposte: 4
    Ultimo Post: 06-09-2005, 11:15
  3. list box
    Da mon78 nel forum HTML, CSS e JavaScript
    Risposte: 1
    Ultimo Post: 04-04-2005, 12:37
  4. List Box
    Da queen_live78 nel forum Visual Basic 6
    Risposte: 6
    Ultimo Post: 12-01-2005, 20:03
  5. List box
    Da queen_live78 nel forum Visual Basic 6
    Risposte: 3
    Ultimo Post: 30-12-2004, 12:21