Newsgroup: it.comp.appl.access
Titolo: Nuova Ricerca Dati

Ciao a Tutti,
sto costruendo un DB e la cosa mi piace molto. E' già funzionante, ma 
vorrei che avesse quelle piccole utilità che rendono facile e semplice la 
vita lavorativa.
Ho una maschera (frmTrova) nella quale vi sono dei campi non associati 
che vanno a pescare in una query ("QryGen"), quando premo il pulsante 
"Ricerca", la routine va a popolare una seconda query 
("Q_ricercaMultipla") e mostra i dati filtrati nella maschera 
"frmVisualizzaRicerche1".
Fin qui tutto bene, anzi benissimo!!!!!!!!!!!!!!!
Nella maschera di output visualizzazione dati filtrati ho inserito un 
pulsante Trova, il quale mi apre sempre la maschera frmTrova, effettuo 
una nuova ricerca......ma i dati mostrati nella maschera 
"frmVisualizzaRicerche1" sono quelli precendenti!!!?????????????
E' come se non effettuasse il Requery della nuova ricerca, come mai 
questo??
Questa particolarità negativa si manifesta solamente se sono nella 
maschera di output dei dati filtrati "frmVisualizzaRicerche1", mentre se 
mi trovo nella maschera frmDataEntry oppure nella frmEntryPage il Requery 
viene effettuato.
Essendo nella maschera "frmVisualizzaRicerche1" e premendo il pulsante 
Trova, come posso fare per *Chiudere fisicamente* la maschera di output 
dati filtrati "frmVisualizzaRicerche1"?
Su click del pulsante Trova ho provato ad inserire un DoCmd.Close acForm 
"frmVisualizzaRicerche1", ma non funziona.
Grazie in anticipo per qualunque risposta!
-- 
Nemo
Vi scrivo qui di seguito la sintassi della routine della maschera
frmTrova:
-----------------------------------------------------------------------
Private Sub Ricerca_Click()
On Error GoTo Err_Ricerca_Click
Dim v_ctrl As Access.Control
Dim v_value(19), v_name(19), v_sql, v_cond As String
Dim v_ind, v_ind_max, v_len, v_conta, v_type(19) As Integer
Dim v_query As QueryDef
For Each v_query In CurrentDb.QueryDefs
    If v_query.Name = "Q_ricercaMultipla" Then
       CurrentDb.QueryDefs.Delete "Q_ricercaMultipla"
    End If
Next v_query
v_ind = 0
 
For Each v_ctrl In Me.Form.Controls
' Testa se e' una casella combinata
    If v_ctrl.ControlType = acComboBox Then
       If Not IsNull(v_ctrl.Value) Then
          v_value(v_ind) = v_ctrl.Value
          v_name(v_ind) = v_ctrl.Name
          v_type(v_ind) = VarType(v_ctrl.Value)
          'Debug.Print v_ctrl.Name & " Tipo di dato " & VarType
(v_ctrl.Value)
          v_ind = v_ind + 1
       End If
    End If
Next v_ctrl
v_ind_max = v_ind - 1
v_sql = "select * from QryGen "
For v_ind = 0 To v_ind_max Step 1
' Testa se e' di tipo numerico
        If v_type(v_ind) = vbLong Then
           v_cond = v_cond & v_name(v_ind) & " = "
           v_cond = v_cond & "str(" & v_value(v_ind) & ") and "
        Else
           v_cond = v_cond & v_name(v_ind) & " = """
           v_cond = v_cond & v_value(v_ind) & """ and "
        End If
 
 
Next v_ind
v_len = Len(v_cond)
v_len = v_len - 4
If v_cond <> "" And v_cond <> " " And Not IsNull(v_cond) Then
   v_cond = Mid(v_cond, 1, v_len)
   v_sql = v_sql & " where " & v_cond
End If
CurrentDb.CreateQueryDef("Q_ricercaMultipla").SQL = v_sql
v_conta = DCount("*", "Q_ricercaMultipla")
If v_conta = 0 Then
   MsgBox "Non esistono dati per i criteri impostati"
   Me.Cognome.SetFocus
Else
   DoCmd.OpenForm "frmVisualizzaRicerca1"
End If
Exit_Ricerca_Click:
    Exit Sub
Err_Ricerca_Click:
    MsgBox Err.Description
    Resume Exit_Ricerca_Click
 
End Sub
-----------------------------------------------------------------------

 maschera di output dei dati filtrati "frmVisualizzaRicerche1",
Vuol dire che esegui questo codice se ti trova nella stessa
maschera "frmVisualizzaRicerca1"?
In questo caso per aggiornare i dati non serve il tentativo
 di aprire la maschera già aperta. Invece prova con:
Me.RecordSource = Me.RecordSource
-- 
cu
Karl
*********
Access FAQ: 
www.donkarl.com/it
 



Ciao Karl,
grazie per la tua risposta.
Devo premettere che non sono molto esperto con il linguaggio di 
programmazione VBA, ma ho solo una conoscenza molto elementare.
Ho trovato questa maschera per una Ricerca Multipla in un forum di Access 
 
http://www.ialweb.it/forum/forum_topics.asp?FID=112&PN=1
e l'ho adattata alle mie esigenze all'interno di un mio database.
La maschera “frmTrova” *funziona bene*, solo che, se una persona, 
trovandosi già nella  maschera di output “frmVisualizzaRicerche1” e 
dovesse effettuare delle ripetitive ricerche, la query non aggiorna i 
dati nella maschera di output, a meno che la maschera venga chiusa.
Ho provato ad apportare, nel codice, i suggerimenti che mi hai scritto, 
ma probabilmente ho inserito le stringhe in posizioni non corrette....
Secondo la tua esperienza, è possibile costruire una condizione che dica, 
per esempio:
Se (If) effettui la 1^ (prima ricerca) mi inserisci i dati nella query, 
altrimenti (Then)
se hai già effettuato una ricerca mi aggiorni i nuovi dati.
Grazie per la tua risposta.
-- 
Nemo

 se hai già effettuato una ricerca mi aggiorni i nuovi dati.
Non capisco. Se vuoi cambiare la ricerca circa con il metodo
che hai postato, devi cambiare l'enunciato SQL della query.
Solo che - come ho già scritto - non è necessario di sempre
cancellare e ricreare tutta la query.
Dopo cambiare la query devi aggiornare la maschera
di risultato con uno dei metodi descritti qui soppra.


Il Fri, 18 Jun 2010 12:07:06 +0200, Karl Donaubauer ha scritto:
Ciao Karl, 
grazie ai tuoi consigli ho risolto!!!
Sono contento! (Ich bin zufrieden)
La maschera frmTrova può essere aperta dalla maschera di Avvio 
(frmEntryPage) dalla maschera di inserimento dati (frmDataEntry), ma 
anche dalla maschera frmVisualizza Ricerche1 ed è proprio da questa 
maschera che i dati non facevano (verbo al passato) il requery.
Seguendo i tuoi consigli ho inserito la stringa:
Forms!frmVisualizzaRicerche1.RecordSource = _
Forms!frmVisualizzaRicerche1.RecordSource
ed ora funziona tutto bene!!!!!!
Ti scrivo qui di seguito la routine completa, così può essere utile anche 
ad altre persone:
Private Sub Ricerca_Click()
On Error GoTo Err_Ricerca_Click
Dim v_ctrl As Access.Control
'Dim v_ind As Integer, v_ind_max As Integer, v_len As Integer, v_conta, 
v_type(19) As Integer
Dim v_value(19), v_name(19), v_sql, v_cond As String
Dim v_ind, v_ind_max, v_len, v_conta, v_type(19) As Integer
Dim v_query As QueryDef
For Each v_query In CurrentDb.QueryDefs
    If v_query.Name = "Q_ricercaMultipla" Then
       CurrentDb.QueryDefs.Delete "Q_ricercaMultipla"
    End If
Next v_query
v_ind = 0






CurrentDb.CreateQueryDef("Q_ricercaMultipla").SQL = v_sql
'CurrentDb.QueryDefs("Q_ricercaMultipla").SQL = v_sql
v_conta = DCount("*", "Q_ricercaMultipla")
If v_conta = 0 Then
   MsgBox "Non esistono dati per i criteri impostati"
   Me.Cognome.SetFocus
Else
   DoCmd.OpenForm "frmVisualizzaRicerca1"
  Forms!frmVisualizzaRicerca1.RecordSource = Forms!
_frmVisualizzaRicerca1.RecordSource  '(!!!!!!questa stringa risolve tutto)
'***************************************************************
   'Forms!frmVisualizzaRicerca1.Requery  (questa stringa non mi_ 
funzionava)
   'Me.RecordSource = Me.RecordSource (anche questa stringa non mi_ 
funzionava)
'***************************************************************
End If
Exit_Ricerca_Click:
    Exit Sub
Err_Ricerca_Click:
    MsgBox Err.Description
    Resume Exit_Ricerca_Click
 
End Sub
Grazie mille per i tuoi consigli!!!
Un codiale saluto,
Nemo
<OT>
Du spricht Italien sehr gut. Unsere stadt hat eine stadtpartnerschaft mit 
Leutkirch im Allgau (Deutschland), und am abend, habe ich die Deutsche 
sprache gelernt, aber jetzt habe ich fast alle fergessen.
Ich fermisse Deuschland,
Nette Gruesse aus Gardasee, Italien.
Nemo
</OT>

 </OT>
-- 
Ciao
Karl
*********
Access FAQ: 
http://www.donkarl.com/it
 

> </OT>
Bis zum nächstes Mal :-)
Tschuess
-- 
Nemo