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

Discussione: [VB6] ListView

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    26

    [VB6] ListView

    Ciao a tutti,
    ho scritto questa procedura per visualizzare in una ListView i campi di una tabella ma, quando parte la sub del bottone per inserire un nuovo record nella tabella, e richiedo di visualizzare i campi nella listview, mi da errore.......
    Mi potete aiutare???
    Grazie 1000!

    Private Sub Command1_Click()
    ........
    rs.Open sql
    Do While Not rs.EOF

    Set liS = ListView1.ListItems.Add(, rs(0) & "XXX", rs(0) & "")
    liS.Tag = rs(0)
    liS.ListSubItems.Add , , rs(1) & ""
    liS.ListSubItems.Add , , rs(2) & ""
    liS.ListSubItems.Add , , rs(3) & ""
    liS.ListSubItems.Add , , rs(4) & ""
    liS.ListSubItems.Add , , rs(5) & ""
    liS.ListSubItems.Add , , rs(6) & ""

    i = i + 1

    rs.MoveNext
    Loop

  2. #2
    Prima di tutto usa i Tag per il codice [*code][*/code] (senza *)

    Secondo: ogni volta che ricarichi una listview devi ripulirla.
    Presumo che l'errore che ti genera sia "chiave duplicata"; se è così allora modifica il tuo codice aggiungendo la riga che è in neretto:
    codice:
    Private Sub Command1_Click() 
    
    ListView1.ListItems.Clear
    
    rs.Open sql 
    Do While Not rs.EOF 
    
    Set liS = ListView1.ListItems.Add(, rs(0) & "XXX", rs(0) & "") 
    liS.Tag = rs(0) 
    liS.ListSubItems.Add , , rs(1) & "" 
    liS.ListSubItems.Add , , rs(2) & "" 
    liS.ListSubItems.Add , , rs(3) & "" 
    liS.ListSubItems.Add , , rs(4) & "" 
    liS.ListSubItems.Add , , rs(5) & "" 
    liS.ListSubItems.Add , , rs(6) & "" 
    
    i = i + 1 
    
    rs.MoveNext 
    Loop

    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    26
    Grazieeeeeee LadyBlu!!!!!!:gren: :gren: :gren:
    Sei sempre grande!!!!
    Scusa per il codice.......

  4. #4
    Originariamente inviato da Mocchi
    Grazieeeeeee LadyBlu!!!!!!:gren: :gren: :gren:
    Sei sempre grande!!!!
    Scusa per il codice.......
    prego, ma la prossima volta vedi di ricordateli sti benedetti tag, non ne posso più di ripeterlo ogni due minuti.

    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    26
    Ciao! Ho provato a richiamare la form: "Form1" per visualizzare la Listview (di cui sopra) da una form con un menu, in questo modo:
    codice:
    Private Sub mnuFileNuovo_Click()
            Form1.Show
         End Sub
    ma quando lo lancio mi da l'errore: "Method or data member not found"
    su questa riga di codice:
    codice:
    liS.ListSubItems.Add , , rs(1) & ""
    Perchè????

  6. #6
    sarebbe meglio se postassi tutto il codice, così sinceramente potrebbero essere diversi i motivi.

    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    26
    ok, la form con la listview è:
    codice:
    Option Explicit
    Private Const SW_SHOWNORMAL As Long = 1
    Private Sub Command1_Click()
        Dim cn 'Creo una variabile per contenere un riferimento all'oggetto
        Dim cnString
        Dim rs
        Dim sql
        Dim i
        Dim liS As ListItem
      
        Set cn = CreateObject("ADODB.Connection")
        Set rs = CreateObject("ADODB.Recordset")
      
        'Impostazioni per la connessione ad DB
        cnString = "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=U:\Monica\work in progress\DB_Ado\db2.mdb"
        cn.ConnectionString = cnString
        cn.Open
        
        'Impostazioni relative al recodset (SQL query)
        rs.activeConnection = cn
        
        'Imposto il tipo di cursore per il recordset (adOpenStatic)
        ' adOpenStatic permette di effettuare scansioni forward & backward
        rs.CursorType = 3
        
        'SQL Statement
        sql = "select * from tblProva"
        
        'Eseguo la query
        rs.Open sql
        MsgBox "La query ha restituito " & rs.recordcount & " record."
                
        'Azzero la lista dei record
        ListView1.ListItems.Clear
    
    
      Do While Not rs.EOF
                
         Set liS = ListView1.ListItems.Add(, rs(0) & "XXX", rs(0) & "")
         'Per assegnare la key (la metto al primo campo (ID))
          
          liS.Tag = rs(0)
         
          '************************************
          '  PB: "Mi conta 9 record in meno"
          '        Perchè???
          '************************************
          liS.ListSubItems.Add , , rs(1) & ""
    
          liS.ListSubItems.Add , , rs(2) & ""
          liS.ListSubItems.Add , , rs(3) & ""
          liS.ListSubItems.Add , , rs(4) & ""
          liS.ListSubItems.Add , , rs(5) & ""
          liS.ListSubItems.Add , , rs(6) & ""
          
          i = i + 1
          
          rs.MoveNext
       Loop
    
        'Chiudo il recordset
        rs.Close
        
        Set rs = Nothing
        
        'Chiudo la connessione al DB
        cn.Close
          
    End Sub
    
    Private Sub Command2_Click()
    On Error GoTo GestoreErrori
    Dim SelectedFile As String
    Dim FilePath As String
    Dim Path As String
    Dim RetVal As Long
    Dim FilenameLength As Integer
    
    With CommonDialog1
       .Flags = cdlOFNHideReadOnly Or cdlOFNFileMustExist Or cdlOFNPathMustExist
      .ShowOpen
       FilePath = .Filename
      SelectedFile = .FileTitle
    End With
    
    GestoreErrori:
    If Err.Number = 32755 Then
      Call MsgBox(Err.Description, vbCritical + vbOKOnly, "Errore" & "apertura file")
       Exit Sub 'Pulsante Annulla.
     End If
     
    'Ho il nome del file e il percorso con il file...
    'Devo trovare semplicemente il path
    FilenameLength = Len(SelectedFile)
    Path = Left(FilePath, Len(FilePath) - FilenameLength)
    
    Call InsertStatment(SelectedFile, Path)
    
    End Sub
    
    Private Sub InsertStatment(Filename As String, Path As String)
        Dim cn 'Creo una variabile per contenere un riferimento all'oggetto
        Dim cnString
        Dim cmd
        Dim sql
        Dim DBRecord
        
        'Impostazioni per la connessione ad DB
        Set cn = CreateObject("ADODB.Connection")
        cnString = "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=U:\Monica\work in progress\DB_Ado\db2.mdb"
        cn.ConnectionString = cnString
        cn.Open
        
        'Impostazione dell'oggetto Command
        Set cmd = CreateObject("ADODB.Command")
        cmd.activeConnection = cn
            
        'SQL Insert Statment
        sql = "INSERT INTO tblProva(Filename,Path,Metadato01,Metadato02,Permission01,Permission02) "
        sql = sql & "VALUES ('" & Filename & "', '"
        sql = sql & Path & "', "
        MsgBox sql
        
        'Imposto la query
        cmd.commandtext = sql
        
        'Eseguo la query
        cmd.Execute
        
        MsgBox "Inserimento del file nel DB avvenuto correttamente."
        
        'Chiudo la connessione al DB
        cn.Close
    
    End Sub
    Mentre la Form1 (per il menu che richiama la form precedente) è:
    codice:
    Option Explicit
    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    Sub OpenFileForModify(frm As Form, File As String, Optional Parameters As String, Optional Folder As String)
        Dim RetVal As Long
        'Apre il file con il programma associato.
        RetVal = ShellExecute(frm.hwnd, "open", File, Parameters, Folder, SW_SHOWNORMAL)
    End Sub
    
    Private Sub mnuFine_Click()
    Unload Me
    End
    End Sub
    
    Private Sub MnuFileApri_Click()
      'Apro un file
      frmShellExecute.Show
    End Sub
    
    Private Sub mnuFileNuovo_Click()
       'Creo un file e lo inserisco nel DB
       Form1.Show
    End Sub
    
    Private Sub MnuRicercaFocExplorer_Click()
       Dim RetVal As Long
       'Lancio il file Explorer
       RetVal = ShellExecute(Me.hwnd, "open", "explorer.exe", "", "", 1)
    End Sub
    P.S.: Tra l'altro, avrai notato il commento nel codice per la parte
    della visualizzazione del database.....perchè, se nel DB ci sono X
    record, nella Msgbox mi comunica che ce ne sono 9 in meno???

  8. #8
    Ti ho modificato un pochino il codice del Command1_Click... puoi provare se funziona?
    In pratica ho dichiarato diversamente la connessione e il recordset e ti ho cambiato l'apertura del recordset, modificando il tipo di Cursore e settandogli il LockTipe.
    Ho anche tolto "i = i + 1" nel ciclo che riempie la listview.
    Prova...
    codice:
    Private Sub Command1_Click()
        Dim cn As New ADODB.Connection
        Dim rs As ADODB.Recordset
        Dim sql As String, cnString As String
        Dim i
        Dim liS As ListItem
    
        'Impostazioni per la connessione ad DB
        cnString = "Provider=Microsoft.Jet.OLEDB.3.51;Data " & _
                  "Source=U:\Monica\work in progress\DB_Ado\db2.mdb"
        cn.ConnectionString = cnString
        cn.Open
    
        'SQL Statement
        sql = "select * from tblProva"
        
        'Eseguo la query
        rs.Open sql, cn, 1, 3
        rs.MoveFirst
        MsgBox "La query ha restituito " & rs.recordcount & " record."
                
        'Azzero la lista dei record
        ListView1.ListItems.Clear
    
      Do While Not rs.EOF
                
         Set liS = ListView1.ListItems.Add(, rs(0) & "XXX", rs(0) & "")
         'Per assegnare la key (la metto al primo campo (ID))      
          liS.Tag = rs(0)
    
          liS.ListSubItems.Add , , rs(1) & ""
          liS.ListSubItems.Add , , rs(2) & ""
          liS.ListSubItems.Add , , rs(3) & ""
          liS.ListSubItems.Add , , rs(4) & ""
          liS.ListSubItems.Add , , rs(5) & ""
          liS.ListSubItems.Add , , rs(6) & ""
          
          rs.MoveNext
       Loop
    
        'Chiudo il recordset
        rs.Close
        Set rs = Nothing
        
        'Chiudo la connessione al DB
        cn.Close
          
    End Sub

    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    26
    Mi da errore sulla variabile:
    codice:
    Dim cn As New ADODB.Connection
    Devo aggiungere qualcosa tra i References???

  10. #10
    certo, devi avere la libreria di ADO inserita nei riferimenti.

    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

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.