Newsgroup: it.comp.appl.access
Titolo: dopo requery in maschera ritornare al record dopo quello cancellato

Ciao a tutti,
 
ho una maschera con un pulsante di comando che dopo operazioni mi elimina un determinato record.
quando faccio il requery la maschera mi torna al primo record
 
vorrei una soluzione al fine di tornare al record immediatamente dopo a quello eliminato
 
grazie
 

Prima di eliminare il record corrente vai a leggere la PK del record successivo muovendo solo il recordsetclone, salvi in variabile locale, torni al bookmark di maschera cancelli poi vai al memorizzato con findfirst...
 
Una cosa simile... ovviamente se eri già all'ultimo va al precedente... 
 
DIM LPK Ad Long 
With Me.RecordsetClone
   If not .Eof
      .movenext 
   Else
      If not .Bof then
         .moveprevious
      End if
   End if
   Lpk=.fields("idpk")
   .Bookmark=Me.Bookmark
   ' CANCELLI IL RECORD ATTUALE 
   ......
   .Findfirst "Idpk=" & lpk
   If not .nomatch then
      Me.bookmark=.bookmark
   End if
End with
 
@Alex

vito.fa...@pietrodabano.it
 formulated the question :

==========================
Dim BMK as string
BMK=Bookmark
 
 < fa' quel che devi fare >
 
Bookmark=BMK
==========================
 
Più facile di così...
 
Bruno


Hai letto bene la richiesta Bruno... il Record è Cancellato... quindi deve memorizzare un BKM diverso, quindi....
 
@Alex


grazie grazie


niente Alex, non mi funziona
ti allego una immagine
https://ibb.co/Sd2wkwC
 
come vedi dalla immagine il cursore è su prezzemolo. quando clicco sul pulsante
pareggia differenze parte un codice che alla fine fa un requery della maschera.
Dopo il requery il cursore non si posiziona dopo prezzemolo......
 
Dim LPK As Long
With Me.RecordsetClone
   If Not .EOF Then
      .MoveNext
   Else
      If Not .BOF Then
         .MovePrevious
      End If
   End If
   LPK = .Fields("Id_prodotto")
   .Bookmark = Me.Bookmark
   Me.Requery
   .FindFirst "id_prodotto=" & LPK
   If Not .NoMatch Then
      Me.Bookmark = .Bookmark
   End If
End With
 
forse dopo il requery si disiallineano i bookmarks? boh

Non ha nulla a che vedere con il bookmark usato come pointer, cosa che invece aveva suggerito Bruno...
Io uso il bookmark solo per spostarmi nel clone e ricavare la PK... da usare successivamente al requery...
 
Ora tu dici che lanci un codice che esegue il requery... e nella porzione di codice che posti hai nuovamente il requery...
Ecco forse il problema è li... il requery che hai nel.codice che ti ho proposto è quello della tua procedura... in sostanza prima di lanciare la tua procedura esegui la prima parte del codice proposto, fai il requery e poi la seconda parte.
 
Saluti
@Alex

Il giorno martedì 10 dicembre 2019 07:31:55 UTC+1, @Alex ha scritto:

ciao,
il discorso di muoversi tra il recordsetClone non funziona perché ha numerazione diversa da quello che vedo in maschera, quindi mi salta da una parte all'altra.
 
Ho pensato: non vado al prossimo muovendomi nel recordsetClone, bensì (suggerimento di Mazza)
con
DoCmd.GoToRecord acDataForm, Me.Name, acNext
 
allora il codice diventa:
 
inizio procedura dietro cmd button
......
dim intId as long
DoCmd.GoToRecord acDataForm, Me.Name, acNext
intId = Me.id_prodotto
 
........ tutto il codice.......
 
'********** per ritornare al record dopo quello di partenza (tuo codice)
Dim LPK As Long
With Me.RecordsetClone
   If Not .EOF Then
      .MoveNext
   Else
      If Not .BOF Then
         .MovePrevious
      End If
   End If
   LPK = intId


vito.fa...@pietrodabano.it
 wrote :

Le tre righe di codice che ti ho inviato, e che forse tu
non hai provato, fanno esattamente quello che stai chiedendo.
Ed inoltre, se elimini l'ultimo recordo, dopo requery ti posizioni
su Nuovo Record.
 
Bruno


ok sta sera provo

Il giorno mercoledì 11 dicembre 2019 11:15:17 UTC+1, Bruno Campanini ha scritto:

ho provato come dici tu, ricevo segnalibro non valido
 
in testa al codice....
Dim BKM As String
BKM = Me.Bookmark 
 
.......tutto il codice.............
 
Me.Requery
 
Me.Bookmark = BKM


scusamiiii ho sbagliato
 
BKM = Me.recordsetCone.Bookmark 
La prima volta che lancio la routine funziona ma non va al record successivo a quello di partenza
tutte le altre volte che rilancio la routine (senza chiudere la maschera)
 
BKM = Me.recordsetCone.Bookmark  mi da nessun record corrente
grazie 

vito.fa...@pietrodabano.it
 has brought this to us :

Con RecordsetClone non può funzionare.
 
Le tre righe che ti ho inviato (senza Me. che nella circostanza
proprio non serve a nulla) a casa mia con Win10 e Office 2019 ENG
funzionano esattamente come ti ho dichiarato.
 
È una routine che ho fatto credo con Office 2007 e fino ad ora
non ha sbagliato un colpo.
Sarà l'aria della mia Romagna...
 
Però non ho mai provato con Office in italiano.
 
Bruno


Ti ringrazio. Perché non va figurati se te lo posso dire io!
io uso win 10 office 2010 italiano.
Ad ogni modo ho usato la procedura di Alex e ottengo quello che mi serve.
Un saluto alla grande romagna
 
Vito

 Un saluto alla grande romagna
 
Non è per convincerti a sottoscrivere i mei bonds che
proprio non ha senso, ma per dissolvere uno di quei dubbi
che la notte mi tiene insoone a lungo.
 
Questo funziona con Windows XP SP3 e Office 2003,
ambedue in italiano:
================================
Private Sub Command9_Click()
Dim BKM As String
 
BKM = Bookmark
    DoCmd.SetWarnings False
    DoCmd.RunCommand acCmdDeleteRecord
    DoCmd.SetWarnings True
    Requery
Bookmark = BKM
 
End Sub
================================
 
Buon Anno Nuovo
Bruno


sai che faccio?
creo una maschera fittizia con una tabella fittizia e riproduco il tuo codice
così vediamo cosa succede.
 
(tieni presente che io devo andare sempre sul record successivo a quello cancelato dopo il requery)
 
ciao

 cancelato dopo il requery)
Salvo che tu cancelli l'ultimo, nel qual caso finisci in RecordNew.
 
Bruno


incredibile funziona!!! senza cento righe di codice.
Ma spiegami come fa andare al record dopo quello cancellato.
 
Logicamente
BKM = Bookmark prende il record dove sono posizionato giusto?
 
poi lo elimina
 
in teoria 
Bookmark = BKM  non dovrebbe trovare il bookmark perché cancelato
 
credo che me lo spiegherai....visto che funziona

 credo che me lo spiegherai....visto che funziona
 
BKM = Bookmark prende la posizione fisica del record
...  ...   ...
Bookmark = BKM ritorna alla stessa posizione fisica
 
Se da 10 record cancelli il sesto avviene che al sesto
ci trovi quello che prima era il settimo, così ritornamdo
al sesto si trova su quello che prima era il settimo.
 
Analogamente se di 10 record cancelli il decimo avviene
che ti trovi 9 record e quando la routine ritorna al 10°
posto... si trova su nuovo record.
 
Sto parlando di posizione FISICA, quindi con
RecordsetClone non può funzionare.
 
Che cosa c'è di più semplice?
 
Bruno


Direi niente ehehehe. Non sapevo della posizione fisica che viene rimpiazzata da un altro record ma che rimane come bookmark. 
Argomento davvero chiuso, buone feste a te grazie ancora.

vito.fa...@pietrodabano.it
 has brought this to us :

Buone Feste anche a te.
 
Bruno