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???