Newsgroup: it.comp.appl.access
Titolo: Un aiuto importante x la ricerca.

Ciao.
Qualche tempo fa ho chiesto come si potesse effettuare una ricerca di un
record all'interno di diverse tabelle.
Riccardo mi ha inviato questa funzione VBA che purtroppo vista la mia
ignoranza non so come metterla a frutto. Non ho avuto notizie da Riccardo
nonostante le mie richieste. Se qualcuno mi puo' aiutare ne sarei
felicemente grato.
La funzione e' la seguente:
Public Function Trova(valore As Variant) As String
     Dim dbs As DAO.Database
     Dim tbl As DAO.TableDef
     Dim fld As DAO.Field
     Dim rds As DAO.Recordset
     Set dbs = CurrentDb
     Trova = "Nessun record contiene il valore " & valore
     For Each tbl In dbs.TableDefs
         If Left(tbl.Name, 4) <> "MSys" Then
             Set rds = tbl.OpenRecordset(dbOpenDynaset)
             For Each fld In rds.Fields
                 With rds
                     If fld.Type = dbText Then
                         .FindFirst fld.Name & " = '" & valore & "'"
                         If .NoMatch = False Then
                             Trova = "Il valore è stato trovato nel Campo "&
fld.Name & " della Tabella " & tbl.Name & " alla posizione " &
AbsolutePosition
                             Exit Function
                         End If
                     End If
                 End With
             Next
         End If
     Next
 End Function
Come posso usufruirne per far apparire in una maschera apposita il risultato
della ricerca? O se possibile far in modo che una volta trovato il record mi
venga automaticamente aperta la maschera corrispondente:
Grazie per l'aiuto.

 ha scritto nel messaggio
news:9oag4l$39r$1...@nreadb.inwind.it...

Innanzi tutto non mi chiamo Riccardo ma Roberto - Syd, per poter usare la
funzione che ti ho inviato fai una nuova maschera inserisci un nuovo
pulsante che si chiamerà Command1 e una casella di testo che si chiamerà
testo0, poi sull'evento Su click del pulsante scegli Generatore Codice dai
puntini di sospensione e entri nell'ambiente di programmazione a questo
punto scrivi la seguente riga:
MsgBox Trova(me.Testo0)
 a questo punto avrai la seguente situazione:
Private Sub Comando1_Click()
    MsgBox Trova(Me.Testo0)
End Sub
sotto la riga end sub copi la funzione che ti ho inviato, a questo punto vai
in visualizzazione maschera, scrivi il valore da ricercare all'interno delle
tabelle e fai click sul pulsante.
Ciao fammi sapere Roberto - Syd

Scusami per il nome mi sono sbagliato,comunque ti ringrazio per la tua
disponibilità.
Ho fatto come mi hai detto ma quando schiaccio sul pulsante si apre la
finestra di VBA che segnale un errore:
ERRORE DI COMPILAZIONE
TIPO DEFINITO DALL'UTENTE NON DEFINITO
Faccio OK e mi viene segnalata in giallo la riga
 Public Function Trova(valore As Variant) As String
qual è il problema e come posso risolverlo?
Grazie e a presto

 Innanzi tutto non mi chiamo Riccardo ma Roberto - Syd, per poter usare la
Dai Riccardo, non prenderlo in giro...
Antonio

 ha scritto nel messaggio
news:9ob8ha$2qe$1...@nreada.inwind.it...

Nella finestra VBA fai click sul menù Strumenti scegli Riferimenti e si apre
una maschera con tutti i riferimenti, metti il segno di spunta alla riga
dove c'è scritto Microsoft DAO 3.6 Object Library.


Grazie di tutto Roberto del tuo indispensabile aiuto, ma se posso
importunarti ancora ti voglio chiedere se è possibile applicare al script
che mi hai mandato la possibilità di far aprire la tabella corrispondente al
record trovato.

 ha scritto nel messaggio
news:9oi62v$t9m$1...@nreada.inwind.it...

Aggiungi le righe segnate dagli asterischi alla funzione.
Public Function Trova(valore As Variant) As String
    Dim dbs As DAO.Database
    Dim tbl As DAO.TableDef
    Dim fld As DAO.Field
    Dim rds As DAO.Recordset
    Set dbs = CurrentDb
    Trova = "Nessun record contiene il valore " & valore
    For Each tbl In dbs.TableDefs
        If Left(tbl.Name, 4) <> "MSys" Then
            Set rds = tbl.OpenRecordset(dbOpenDynaset)
            For Each fld In rds.Fields
                With rds
                    If fld.Type = dbText Then
                        .FindFirst fld.Name & " = '" & valore & "'"
                        If .NoMatch = False Then
                            Trova = "Il valore è stato trovato nel Campo " &
fld.Name & " della Tabella " & tbl.Name & " alla posizione " &
.AbsolutePosition + 1
**********                            DoCmd.OpenTable tbl.Name
**********                            DoCmd.GoToRecord acDataTable,
tbl.Name, acGoTo, .AbsolutePosition + 1
**********                            DoCmd.GoToControl fld.Name
                            Exit Function
                        End If
                    End If
                End With
            Next
        End If
    Next
End Function
In questo modo si apre la tabella e il cursore si posiziona sul valore
trovato.
