Newsgroup: it.comp.appl.access
Titolo: Eseguire ricerca testo contenuto stile windows da vba

Ciao a tutti,
Ho creato un applicativo con tanti FE e un BE in rete per la l'archiviazione 
e la consultazione di CV.
Chi inserisce riporta una serie di info in access, per le ricerche 
successive, e allega come hyperlink il CV originale (normalmente in word).
Mi chiedono di creare una funzionalità per cui, inserendo delle parole 
chiave, si vada a fare una ricerca testo contenuto nei file word allegati, 
restituendo solo i record con i file allegati contenenti le parole indicate.
E' la classica ricerca da windows di testo contenuto.
Come la chiamo da vba? API?
Ovviamente, se riuscirò ad implementare ciò, non funzionerà sui file PDF 
giusto?
Grazie per le risposte.
Antonio 


Ciao Antonio...!
Non ho capito molto... ma se devi fare una ricerca all'interno di un
File.DOC, io userei l'automazione in LateBinding usando l'Oggetto FIND
di Word di cui trovi nell'Help VBA di Word anche l'esempio.
Chiaramente non funziona con PDF nè con altri formati...
Se vuoi che possa funzionare con tutto credo che l'unica sia aprire il
File in memoria leggendolo quindi usare una funzione di ricerca testo
per determinare la presenza nel documento.
Non ricordo se è più Veloce usare INSTR oppure il REPLACE con
vbNullString e confronto del LEN della variabile.. prima/dopo(se sono
UGUALI non contiene il testo cercato)... tempo addietro feci un test
per l'ottimizzazione usando anche algoritmi di ricerca ottimizzati che
trovai nel Web, ma non ricordo i risultati...
Ciao
@Alex

 ha scritto nel messaggio 
news:48f26876-966d-4c95...@l16g2000yqo.googlegroups.com...





Ciao
@Alex
Il discorso è che volevo evitare di aprire ogni file e andarci a guardare 
dentro, ma volevo proprio agganciarmi alla funzionalità di windows che 
lavora più a basso livello ed è sicuramente più rapida soprattutto se ci 
sono decine di file ove cercare...
Sai come usarla via codice?
Antonio 

 ha scritto nel messaggionews:48f26876-966d-4c95...@l16g2000yqo.googlegroups.com...

Si avevo immaginato...
Anche usando le API, come questo:
Dim SearchFor As String
SearchFor = "*han*"
retResult = SendMessage(Oggetto.hWnd, LB_FINDSTRING, -1, ByVal
SearchFor)
devi sempre aprire il File(pur usando CreateFile API da provare...) in
memoria e credo si risparmi ben poco...!
Se non ricordo male le funzionalità di cui parli sono racchiuse nella
DLL --> SHLWAPI
Io proverei a fare una ricerca nel sito di Randy Birch( oppure nel NG
americano dedicato alle API...
http://vbnet.mvps.org/
http://tinyurl.com/cph8rj
Di più non sò perchè non ho mai affrontato il problema...
@Alex

Questo esempio, che però apre il file, ma in modalità Binary quindi
molto veloce, è discreto come funzionalità:
http://tinyurl.com/bvckv3
@Alex

 ha scritto nel messaggio 
news:83a7d3c2-758b-4839...@x10g2000yqk.googlegroups.com...





http://vbnet.mvps.org/
http://tinyurl.com/cph8rj

@Alex
grazie 

 ha scritto nel messaggio 
news:ff9148c3-7b12-46c4...@f3g2000yqf.googlegroups.com...

http://tinyurl.com/bvckv3
@Alex
Il problema è che apre un file di testo e lo sbatte in una stringa.
Io dovrò lavorare con file word
Antonio 

 ha scritto nel messaggio 
news:P6zml.266843$FR.5...@twister1.libero.it...

Ciao Antonio; puoi utilizzare Index Service (controlla se è già attivo nei 
servizi) o Windows Desktop Search (per XP da scaricare, installare e avviare 
la scansione delle directory) o altri motori di ricerca simili (tipo Goggle 
Search).
Tieni presente che entrambe le opzioni possono indicizzare il contenuto di 
tutti i file Office + txt e anche quelli non conosciuti (devi attivare la 
scelta) ed installando l'IFilter per il pdf 
(
http://www.adobe.com/support/downloads/detail.jsp?ftpID=2611
) indicizzi 
anche il contenuto di quei documenti...
Ciao.
-- 
Sergio MAZZA 

 ha scritto nel messaggio 
news:499aec8a$0$729$5fc...@news.tiscali.it...

Premesso che non ho la più pallida idea di quello di cui parli e che proverò 
a vedere, sono cose che funzionano da dentro un codice vba???
Antonio 

 Antonio
Questo è un esempio di utilizzo:
'---
'-->
'--> referenziare la libreria ixsso Control Library
'-->
On Error GoTo errori
Dim oQuery As CissoQuery, oUtil As CissoUtil, oScope As ScopeFolders, rst As 
ADODB.Recordset
Set oQuery = CreateObject("ixsso.Query")
Set oUtil = CreateObject("ixsso.Util")
Dim oFld As Object
oUtil.AddScopeToQuery oQuery, "C:\Documenti\", "deep"
oQuery.Catalog = "System" '<-- catalogo
oQuery.query = "testo da trovare" '<-- parola da trovare
oQuery.SortBy = "rank[d]" '<-- ordine per occorrenze
oQuery.Columns = "DocAuthor, Size, DocTitle, Write, Path, FileName, 
Characterization" '<-- colonne restituite
Set rst = oQuery.CreateRecordset("sequential")
If rst.EOF Then
    MsgBox "nessun record trovato"
Else
    Dim fso, MyFile
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set MyFile = fso.CreateTextFile(CurrentProject.path & 
"\Risultato_ricercaFileConIndexServer.txt", True)
    Do While Not rst.EOF
        MyFile.WriteLine ("= = = = = = = = = ")
        For Each oFld In rst.Fields
            MyFile.WriteLine (oFld.Name & ": " & oFld)
            MyFile.WriteLine ("- - - - - - - - - - - - - - ")
        Next
        rst.MoveNext
    Loop
    MyFile.Close
    Set MyFile = Nothing
End If
Set oFld = Nothing
Set rst = Nothing
Set oQuery = Nothing
Set oUtil = Nothing
Exit Sub
errori:
    Set oFld = Nothing
    Set rst = Nothing
    Set oQuery = Nothing
    Set oUtil = Nothing
    MsgBox Err.Number & ", " & Application.AccessError(Err.Number)
'---
Ciao.
-- 
Sergio MAZZA 

 Sergio MAZZA
Ci sono casi in cui mi spaventi...
@Alex

 Sergio MAZZA
Ci sono casi in cui mi spaventi...
@Alex
[risposta]
Dici che sono criptico?
Forse è meglio con questi link:
Using Indexing Service with File Systems
http://msdn.microsoft.com/en-us/library/ms692259(VS.85).aspx
Indexing Service Reference
http://msdn.microsoft.com/en-us/library/ms692199(VS.85).aspx
Ciao.
-- 
Sergio MAZZA 

 Sergio MAZZA
Ecco bene... adesso si che si ragiona.
;-)
Ciao Sergio
@Alex

 Antonio
Ci aggiungo un altro esempio forse più comprensibile:
'---
Dim oConn As New ADODB.Connection
oConn.ConnectionString = "Provider=MSIDXS; Data Source='System';"
Dim rst As New ADODB.Recordset
rst.Open "SELECT DocAuthor, Size, DocTitle, Write, FileName,Characterization 
FROM Scope()  WHERE CONTAINS(Contents, 'testo da cercare')", 
oConn.ConnectionString, adOpenForwardOnly
Do While Not rst.EOF
    Debug.Print rst("DocAuthor")
    Debug.Print rst("Size")
    Debug.Print rst("DocTitle")
    Debug.Print rst("Write")
    Debug.Print rst("FileName")
    Debug.Print rst("Characterization")
    Debug.Print "------------------------------"
    rst.MoveNext
Loop
rst.Close
Set rst = Nothing
Set oConn = Nothing


 Sergio MAZZA
Ecco bene... adesso si che si ragiona.
;-)
Ciao Sergio
@Alex
E' un genio incompreso!!! :-)))))))))))))
Tra te e sergio ormai in casa ho un treno di "Libri" e un allevamento di 
"API" :-)))))))))))))
Ma ne sapete una piů del diavolo!!!
Ciao ragas
-- 
Roberto da Parma