Newsgroup: it.comp.appl.access
Titolo: inserire path+nomeFile in una tabella da dialog-Box di Windows

Ciao a tutti,
ho recuperato queste instruzioni da Archifoto di @Alex per inserire il nome
dei file di immagine da una cartella sfruttando la dialog box di windows,(
ho modificato qualcosina solo nel command button 0) :
Private Sub Comando0_Click()
    Dim NomeFile As Variant
    Dim lngFlags As Long
    Dim gfni As accOfficeGetFileNameInfo
    Dim nomeDaAccodare As String
    On Error GoTo HandleErrors
    lngFlags = lngFlags Or bacGfniAllowMultiSelect
    lngFlags = lngFlags Or bacGfniInitializeView
    With gfni
        .lngView = 1
        .lngFlags = lngFlags
        ' Make sure not to pass in Null values. adhOfficeGetFile
        ' doesn't like that, and often GPFs.
        '.strFilter = ""
        'If Len(.strFilter) > 0 Then
        '    .lngFilterIndex = CInt(Me.txtFilterIndex)
        'End If
        .strFile = ""
        .strDlgTitle = "Selezione Immagini (Multiselezione)"
        .strOpenTitle = ""
        .strInitialDir = "C:\"
        .hwndOwner = Application.hWndAccessApp
    End With
    If OfficeGetFileName(gfni, -1) = 0 Then
        Me.Recordset.AddNew
        Me!nomeDaAccodare = Trim(gfni.strFile)
     End If
ExitHere:
    Exit Sub
HandleErrors:
    MsgBox "Error: " & Err.Description & " (" & Err.Number & ")"
    Resume ExitHere
End Sub
-----------------------------------------------------------------------
Option Compare Database
Option Explicit
' From Access 2000 Developer's Handbook, Volume I
' by Getz, Litwin, and Gilbert. (Sybex)
' Copyright 1999. All rights reserved.
Private Declare Function accOfficeGetFileName _
 Lib "msaccess.exe" Alias "#56" _
 (gfni As accOfficeGetFileNameInfo, fOpen As Integer) As Long
' Common Dialogs
' OfficeGetFileName errors
Public Const bacAccErrGFNSuccess = 0
Public Const bacAccErrGFNCantOpenDialog = -301
Public Const bacAccErrGFNUserCancelledDialog = -302
' OfficeGetFileName flags
Public Const bacGfniConfirmReplace = &H1              ' Prompt if
overwriting a file?
Public Const bacGfniNoChangeDir = &H2                 ' Don't change to the
directory the user selected?
Public Const bacGfniAllowMultiSelect = &H8            ' Allow
multiple-selection?
Public Const bacGfniDirectoryOnly = &H20              ' Open as directory
picker?
Public Const bacGfniInitializeView = &H40             ' Initialize the view
to the lView member or use last selected view?
' Views in the Office Find File dialog
Public Const bacGfniViewDetails = 0                  ' Details
Public Const bacGfniViewPreview = 1                  ' Preview
Public Const bacGfniViewProperties = 2               ' Properties
Public Const bacGfniViewList = 3                     ' List (typical)
Public Type accOfficeGetFileNameInfo
    hwndOwner As Long
    strAppName As String * 255
    strDlgTitle As String * 255
    strOpenTitle As String * 255
    strFile As String * 4096
    strInitialDir As String * 255
    strFilter As String * 255
    lngFilterIndex As Long
    lngView As Long
    lngFlags As Long
End Type
Public Function OfficeGetFileName( _
 gfni As accOfficeGetFileNameInfo, _
 ByVal fOpen As Integer) As Long
    ' Use the Office file selector common dialog
    ' exposed by Access.
    ' From Access 2000 Developer's Handbook, Volume I
    ' by Getz, Litwin, and Gilbert. (Sybex)
    ' Copyright 1999. All rights reserved.
    Dim lngReturn As Long
    Dim myStrFilter As String
    With gfni
        .strAppName = RTrim$(.strAppName) & vbNullChar
        .strDlgTitle = RTrim$(.strDlgTitle) & vbNullChar
        .strOpenTitle = RTrim$(.strOpenTitle) & vbNullChar
        .strFile = RTrim$(.strFile) & vbNullChar
        .strInitialDir = RTrim$(.strInitialDir) & vbNullChar
        If Len(TrimNull(RTrim$(.strFilter))) = 0 Then
           ' .strFilter = "Tutti formati Immagini
(*.bmp;*.jpg;*.jpeg;*.gif;*.tiff;*.png;*.wmf;*.emf;*.cur;*.ico)" & _
           '              "Immagini BMP (*.bmp)" & _
           '              "Immagini JPG (*.jpg)" & _
           '              "Immagini JPEG (*.jpeg)" & _
           '              "Immagini PNG (*.png)" & _
           '              "Immagini GIF (*.gif)" & _
           '              "Immagini TIFF (*.tiff)" & _
           '              "Immagini WMF (*.wmf)" & _
           '              "Immagini EMF (*.emf)" & _
           '              "Immagini ICO (*.ico)" & _
           '              "Immagini CUR (*.cur)"
            .strFilter = "Tutti formati Immagini
(*.bmp;*.jpg;*.jpeg;*.gif;*.tiff;*.png;*.wmf;*.emf;*.cur;*.ico)" & _
                         "|Immagini BMP (*.bmp)" & _
                         "|Immagini JPG (*.jpg)" & _
                         "|Immagini JPEG (*.jpeg)" & _
                         "|Immagini PNG (*.png)" & _
                         "|Immagini GIF (*.gif)" & _
                         "|Immagini TIFF (*.tiff)" & _
                         "|Immagini WMF (*.wmf)"
            .lngFilterIndex = 0
        End If
        .strFilter = RTrim$(.strFilter) & vbNullChar
        lngReturn = accOfficeGetFileName(gfni, fOpen)
        .strAppName = TrimNull(.strAppName)
        .strDlgTitle = TrimNull(.strDlgTitle)
        .strOpenTitle = TrimNull(.strOpenTitle)
        .strFile = TrimNull(.strFile)
        .strInitialDir = TrimNull(.strInitialDir)
        .strFilter = TrimNull(.strFilter)
    End With
    OfficeGetFileName = lngReturn
End Function
Public Function TrimNull(strVal As String) As String
    ' From Access 2000 Developer's Handbook, Volume I
    ' by Getz, Litwin, and Gilbert. (Sybex)
    ' Copyright 1999. All rights reserved.
    ' Trim the end of a string, stopping at the first
    ' null character.
    Dim intPos As Integer
    intPos = InStr(1, strVal, vbNullChar)
    Select Case intPos
        Case Is > 1
            TrimNull = Left$(strVal, intPos - 1)
        Case 0
            TrimNull = strVal
        Case 1
            TrimNull = vbNullString
    End Select
End Function
il problema è che utilizzando per intero la .strFilter (quella che vedete
non commentata), forse a causa della sua lunghezza (>255, in
contrapposizione alla dichiarazione che vedete nella type), non filtra i
files come dovrebbe. Lo fa invece se la .strFilter è impostata come nella
parte non commentata. Si può sistemare il tutto in modo da impostare
correttamente il filtro facendolo funzionare come dovrebbe nella parte non
commentata ?
Sarà mangari una sciocchezza, ma proprio non ci arrivo !! ;-)
Grazie per l'attenzione, un saluto a tutti.
Sandro

Bene, ricominciamo daccapo, non considerate il post precedente, c'erano
delle incongruenze :
ho recuperato queste instruzioni da Archifoto di @Alex per inserire il nome
dei file di immagine in una tabella selezionandolo da una cartella
sfruttando la dialog box di windows,(
ho modificato qualcosina solo nel command button 0) :
Private Sub Comando0_Click()
    Dim NomeFile As Variant
    Dim lngFlags As Long
    Dim gfni As accOfficeGetFileNameInfo
    On Error GoTo HandleErrors
    lngFlags = lngFlags Or bacGfniAllowMultiSelect
    lngFlags = lngFlags Or bacGfniInitializeView
    With gfni
        .lngView = 1
        .lngFlags = lngFlags
        ' Make sure not to pass in Null values. adhOfficeGetFile
        ' doesn't like that, and often GPFs.
        '.strFilter = ""
        'If Len(.strFilter) > 0 Then
        '    .lngFilterIndex = CInt(Me.txtFilterIndex)
        'End If
        .strFile = ""
        .strDlgTitle = "Selezione Immagini (Multiselezione)"
        .strOpenTitle = ""
        .strInitialDir = "C:\"
        .hwndOwner = Application.hWndAccessApp
    End With
    If OfficeGetFileName(gfni, -1) = 0 Then
        result = Trim(gfni.strFile)
        result = Split(CStr(result), Chr(9))
        If IsArray(result) Then
            For Each NomeFile In result
                Me.Recordset.AddNew
                Me.nomeDaAccodare = NomeFile
            Next
        End If
    End If
ExitHere:
    Exit Sub
HandleErrors:
    MsgBox "Error: " & Err.Description & " (" & Err.Number & ")"
    Resume ExitHere
End Sub
-------------------------------------------------











          '  .strFilter = myStrFilter





il problema è che utilizzando la .strFilter (quella che vedete
commentata), forse a causa della sua lunghezza (>255, in
contrapposizione alla dichiarazione che vedete nella type), non filtra i
files come dovrebbe, nel senso che nella dialog box nella parte relativa al
tipo file compare invece che l'intestazione :
Tutti i fomati immagine e poi la possibilità cliccando sulla combobox
preposta, immagine bmp *.bmp, immagine jpg *.jpg ecc... compare, permettendo
di filtrare o solo i bmp, piuttosto che i jpg ecc... semplicemente Tutti i
file.
Lo fa invece se la .strFilter è impostata come nella
parte non commentata. Si può sistemare il tutto in modo da impostare
correttamente il filtro facendolo funzionare come dovrebbe nella parte
commentata ?
Sarà mangari una sciocchezza, ma proprio non ci arrivo !! ;-)
Ri -grazie per l'attenzione, scusate ma la stanchezza del periodo è
devastante.
Sandro