Newsgroup: it.comp.appl.access
Titolo: Selezione Multipla File

Salve a  tutto il NG.
Vorrei chiedere che qualcuno ha mai avuto a che fare co nuna selezione
multipla da access...???
Io no, però e quello che devo ottenere.
Preticamente da una finestra di selezione dovrei cliccare su + file (ad
esempio tenendo premuto il tasto control) e come risultato dovrei ottenere
un lenco di file (2...infiniti) compresi di percors o fisico sul disco.
Saluti Galvy

 ha scritto nel messaggio news:cy3e9.9170$AW6.1...@twister2.libero.it...

Potresti usare Open dei MS Common Dialogs.
Mat.


Cioč?? io sino ad ora ho usato questo codice per la selezione di un singoli
file e.
Option Compare Database
Option Explicit
Private Declare Function GetOpenFileName Lib "comdlg32.dll" _
            Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Private Type OPENFILENAME
   lStructSize As Long
   hwndOwner As Long
   hInstance As Long
   lpstrFilter As String
   lpstrCustomFilter As String
   nMaxCustFilter As Long
   nFilterIndex As Long
   lpstrFile As String
   nMaxFile As Long
   lpstrFileTitle As String
   nMaxFileTitle As Long
   lpstrInitialDir As String
   lpstrTitle As String
   flags As Long
   nFileOffset As Integer
   nFileExtension As Integer
   lpstrDefExt As String
   lCustData As Long
   lpfnHook As Long
   lpTemplateName As String
End Type
Public Function cmdlg_file() As String
   'Autore: Stefano Bettini
   'Restituisce: il percorso completo del file selezionato
   Dim OpenFile As OPENFILENAME
   Dim lReturn As Long
   Dim sFilter As String
   OpenFile.lStructSize = Len(OpenFile)
   'sFilter = "Database di Microsoft Access (*.mdb)" & Chr(0) & "*.mdb" &
Chr(0)
   'sFilter = "Foglio di lavoro Microsoft Excel (*.xls)" & Chr(0) & "*.xls"
& Chr(0)
   sFilter = "Tutti (*.*)" & Chr(0) & "*.*" & Chr(0)
   OpenFile.lpstrFilter = sFilter
   OpenFile.nFilterIndex = 1
   OpenFile.lpstrFile = String(257, 0)
   OpenFile.nMaxFile = Len(OpenFile.lpstrFile) - 1
   'OpenFile.nMaxFile = 10
   OpenFile.lpstrFileTitle = OpenFile.lpstrFile
   OpenFile.nMaxFileTitle = OpenFile.nMaxFile
   OpenFile.lpstrInitialDir = "C:\"
   OpenFile.lpstrTitle = "Seleziona file(s)"
   OpenFile.flags = 0
   lReturn = GetOpenFileName(OpenFile)
   If lReturn = 0 Then
      cmdlg_file = ""
   Else
      cmdlg_file = Left(OpenFile.lpstrFile, InStr(OpenFile.lpstrFile,
Chr$(0)) - 1)
   End If
End Function
Poi nella form su evento click di un pulsante ho messo
Me.nome_file = cmdlg_file
Vorrei invece una selezione multipla e che i flies che ho selezioanto vadano
ea riempire una tabella
Saluti Galvy

 ha scritto nel messaggio
news:bj4e9.9385$AW6.1...@twister2.libero.it...

Io utilizzo lo stesso sistema  mettendo in   -  OpenFile.flags =
ANF_EXPLORER Or ANF_PERMETTESELEZIONEMULTIPLA  - qui sotto ci sino le altre
costanti.
Const ANF_PERMETTESELEZIONEMULTIPLA = &H200
Const ANF_CREAPROMPT = &H2000
Const ANF_EXPLORER = &H80000
Const ANF_ENABLETEMPLATE = &H40
Const ANF_ENABLEHOOK = &H20
Const ANF_FILEDEVEESISTERE = &H1000
Const ANF_NASCONDESOLALETTURA = &H4
Const ANF_NONCAMBIACARTELLA = &H8
Const ANF_COLLEGAMENTIRIFERIMENTONODI = &H100000
Const ANF_NESSUNPULSANTEDIRETE = &H20000
Const ANF_NONRESTITUISCESOLALETTURA = &H8000
Const ANF_NESSUNACONVALIDA = &H100
Const ANF_SOVRASCRIVEPROMPT = &H2
Const ANF_PERCORSODEVEESISTERE = &H800
Const ANF_SOLALETTURA = &H1
Const ANF_MOSTRAGUIDA = &H10
Const ANF_NODEREFERENCELINKS = &H100000
Ciao Giorgio


Questa routine utilizza i common dialogs, prova a mettere un riferimento diretto alla libreria nel tuo progetto (comdlg32.ocx : la
trovi nella directory del sistema) e poi, tramite il visualizzatore degli oggetti, prova a guardare le proprietą e i metodi degli
oggetti della libreria.
Mat.


OK :) direi che sei + che esauriente ma......
uno o due chiarimenti in + su come utilizzare le costanti?
nella form come utilizzi il comendo per la selezione multipla?
Il tuo post è sin troppo dettagliato ma come usarlo?
Saluti Galvy

Tutto ok, non avevo capito come metter giù la riga di codice...
Grazie...Mille
Saluti Galvy


Scusa se sono stato troppo sintetico.
Ti volevo ricordare che in lpstrFile ti ritorna una stringa con i campi
separati da chr(0) ad eccezione del primo campo che contiene il percorso e
termina con due chr(0) e che devi dimensionare il buffer di ritorno in base
ad una stima dei files da elencare, io lavoro con un buffers di 4089 byte
che mi permette di selezionare almeno 100 files (40 byte stimati per ogni
nome).
OpenFile.lpstrFile = String(4097, 0)
OpenFile.nMaxFile = Len(OpenFile.lpstrFile) - 1
ciao Giorgio.

 ha scritto nel messaggio
news:0r5e9.72861$pX1.2...@news2.tin.it...

Accidenti mi sono collegato con un altro provider sono sempre Giorgio prx
ciao


Usando questo codice mi restituisce un errore "Tipo dati non corrispondente"
hai idea da cosa dipenda?
Il codice che utilizzo +è errato secondo te?
Saluti Galvy

 ha scritto nel messaggio
news:mt0f9.506$Oz2....@twister2.libero.it...

Non deve dare errore, in sostanza è stata cambiata la dimensione di
OpenFile.lpstrFile da 257 a 4097, in quale riga ti dà l'errore ??
Ciao Giorgio.

 ha scritto nel messaggio
news:alq213$47r$1...@lacerta.tiscalinet.it...

Non mi restituisce un errore a livello di riga semplicemente quando
seleziono + file non mi restiutisce una stringa di testo con nome file e
percorsi relativi  ES  "c:\io.sys""c:\msdos.sys" ma semplicemente "C:\" e se
seleziono un solo file tutto ok,
Saluti Galvy


Usando la selezione multipla in OpenFile.lpstrFile viene restituita una
serie si stringhe separate da chr(0) (come un array di stringhe nel
linguaggio C) quindi devi apportare un piccolo cambiamento al codice
altrimenti estrai solo il primo elemento ed esattamente "C:\",  qui sotto
sono riportate le ultime righe del codice che utilizzi.
If  lReturn = 0 Then
    cmdlg_file = ""
Else
    cmdlg_file = Left(OpenFile.lpstrFile, InStr(OpenFile.lpstrFile, Chr$(0)
& Chr(0)) - 1)
End If
Come puoi vedere ho aggiunto il doppio chr(0) nella funzione instr, come
risultato avrai C:\   io.sys   msdos.sys   ecc,  ora devi solo ricomporre i
vari nomi di file.
Ciao Giorgio