Newsgroup: it.comp.appl.access
Titolo: posinarso su un record con FindRecord (o altro)

Ciao a tutti
Ho una maschera associata ad una tabella.
Vorrei posizionarmi su un record specifico della tabella.
Goglando nel ng ho trovato la soluzione (credevo): uso di
DoCmd.FindRecord.
Ho una tebella TAB_CLIENTI, tra i cui campi c'è il codiceCliente in
formato testo.
Dunque, nella maschera creo una casella di testo txtCasella, (non
associata ad alcun campo) nella quale inserisco il codiceCliente del
record da trovare,
e con un pulsante attivo il segente codice:
   i = DCount("*", "TAB_CLIENTI", "codiceCliente'" &
Me!txtCasellaDiTesto & "'")
    If i <> 0 Then
        DoCmd.FindRecord Me!txtCasellaDiTesto, , True, , True, acAll
    End If
dovrebbe funzionare ma la maschera anzichè posizionarsi sul record del
codiceCliente inserito, se ne resta tranquilla sul primo record.
Il bello è che se nella DoCmd inserisco una costante, esempio:
        DoCmd.FindRecord "123456", , True, , True, acAll
dove 123456 è un codice cliente, allora funziona!
Con "123456" funziona, ma se lo stesso valore lo prelevo dalla casella
di testo non funziona.
Sono sicuro che mi sto perdendo in un bicchier d'acqua, ma non riesco a
venirne fuori...
Grazie a chi vorrà indicarmi l'uovo di colombo.
Ciao Filippo.

 ...
Con acAll dici a Access di cerchare tra tutti controlli. Quindi trova
il tuo controllo txtCasella che contiene il valore cerchato. Prova con:
Me!codiceCliente.SetFocus
DoCmd.FindRecord Me!txtCasellaDiTesto, , True, , True
Vedi anche 
www.donkarl.com/it
 FAQ 4.4 Cercare un record.
-- 
HTH
Karl
*********
Access FAQ: 
www.donkarl.com/it
 

Karl Donaubauer ha scritto:

Suppongo che con Me!codiceCliente intendi il controllo della maschera
associato al codiceCliente, comunque ho provato, niente.
Credo che il problema sia nel far valutare nel modo corretto
l'espressione Me!txtCasellaDiTesto
alla FindRecord perchè se tale espressione la sostituisco con una
costante, es "123456", allora funziona.
Comunque grazie, provo a dare un'occhiata alle faq, ma... altri
suggerimenti sono ben accetti :-)
Grazie Filippo

 comunque ho provato, niente...
Hai anche lasciato perdere acAll come nel mi esempio?


 ha scritto nel messaggio 
news:1165090026.0...@j44g2000cwa.googlegroups.com...
   i = DCount("*", "TAB_CLIENTI", "codiceCliente'" &
Me!txtCasellaDiTesto & "'")
    If i <> 0 Then
        DoCmd.FindRecord Me!txtCasellaDiTesto, , True, , True, acAll
    End If
Sono sicuro che mi sto perdendo in un bicchier d'acqua, ma non riesco a
venirne fuori...
Grazie a chi vorrà indicarmi l'uovo di colombo.
Ciao Filippo.
Prova a vedere cosa stampa il debug.print nella finestra immediata prima e dopo il findrecord:
    If i <> 0 Then
        debug.print "Prima: " & me!txtcaselladitesto.value
        DoCmd.FindRecord Me!txtCasellaDiTesto, , True, , True, acAll
        debug.print "Dopo: " & me!txtcaselladitesto.value
    End If
Se non ti stampa niente, memorizzati il contenuto della casella in una variabile a livello di modulo 
maschera. Poi passerai il tutto al findrecord
Oppure prova una forma del tipo (non me ne voglia nessuno):
    If i <> 0 Then
        DoCmd.FindRecord """" & Me!txtCasellaDiTesto & """", , True, , True, acAll
    End If
Fammi sapere
Michele

 
Si.... ma niente :-(

Michele (Giò) ha scritto:

ora provo...


ma dove stampa il debugprint? in ogni caso ho usato il controllo
immediato del debug pe controlare Me!txtCasellaDiTesto: i valori sono
giusti ma non funziona. Ho usato anche la variabile: niente. Ho provato
anche la forma che mi hai suìggeriito: niente.
Continuo a pensare che la FindRecord non interpreta correttamente
l'argomento... vado a cercare nelle faq....
boh... se trovo la soluzione la posto...
Filippo

Risolto! Come suggerito da Karl nelle faq c'è la soluzione:
    i = DCount("*", "TAB_CLIENTI", "codiceCliente='" &
Me!txtCasellaDiTesto & "'")
    If i <> 0 Then
        Me!txtCodiceCliente.SetFocus
        DoCmd.FindRecord Me!txtCasellaDiTesto
    End If
Così funziona.
Grazie 1000 a entrambi.
Ciao Filippo

 Cosě funziona.
Nota:
Se questo č il tuo codice completo, cioč nessuna reazione se
il valore non esiste nella tabella, puoi anche lasciare perdere
il test con DCount, If i ... End If ecc. Non ha nessun effetto fuori
al rallentamento del codice.


 --
no, non è il codice completo. Il test di Dcount serve per verifivare
l'esistenza del record, se esiste deve eseguire il codice
posizionandosi sul record, se non esiste (i=0) va creato uin nuovo
record con il nuovo codiceCliente. devo ancora sviluparlo, se avrò
problemi non mancherò di postare :-).
A tal proposito avete sugerimenti?
Grazie Filippo.