Newsgroup: it.comp.appl.access
Titolo: [PER IL NG] - Posizionamento cursore dopo eliminazione record con Requery

Ciao, ieri sera ho chiesto aiuto ad un mio amico di Milano che,
fortunatamente, è un programmatore Access. Gli ho spedito il mio
database, e me lo ha riconsegnato via email con la soluzione ai
problemi che non riuscivo a risolvere (per la cronaca: io il 18 Giugno
sono a Milano, gli offrirò una cena :D).
Giro le soluzioni qui al ng, sperando di fare cosa gradita.
PROBLEMA
Dopo l'eliminazione di un record vuoi posizionarti su quello
immediatamente successivo.
SOLUZIONE:
sull'evento Click() del pulsante di comando 'Elimina Record Corrente'
immetti il codice seguente:
Private Sub cmdElimina_Click()
Dim rif As Variant
Dim ultimo_id As Variant
Dim res As Variant
rif = [Forms]![frmSchedaPrimoContatto]![id]
ultimo_id = DMax("idUtente", "tblUtenti")
If IsNull(rif) Then
    MsgBox "Nessun Utente selezionato!", vbCritical
    Exit Sub
  Else
    res = MsgBox("Elimino dall'archivio " &
UCase([Forms]![frmSchedaPrimoContatto]![Nome] & " " &
[Forms]![frmSchedaPrimoContatto]![Cognome]) & "?", vbQuestion +
vbYesNo)
    If res = 7 Then Exit Sub
End If
If rif = ultimo_id Then
    DoCmd.GoToRecord acDataForm, "frmSchedaPrimoContatto", acPrevious
  Else
    DoCmd.GoToRecord acDataForm, "frmSchedaPrimoContatto", acNext
End If
DoCmd.RunSQL "DELETE * FROM tblInterventi WHERE idUtente = " & rif
DoCmd.RunSQL "DELETE * FROM tblUtenti WHERE idUtente = " & rif
MsgBox "Utente eliminato.", vbInformation
End Sub
L'ho testato e funziona perfettamente solo che ha un problema: lascia
cmq un buco grigio al posto del record selezionato perchè non fa il
requery. Ho provato a mettere un Me.Requery in vari eventi della
sottomaschera ma non serve a niente.
Un saluto.

 ultimo_id = DMax("idUtente", "tblUtenti")
e se cancelli non 'ultimo cliente?
-- 
_ _
Ciao
MAssimiliano Amendola            
www.accessgroup.it
Cisa1 - I° Conferenza Italiana per Sviluppatori Access Arezzo 4+5
Giugno 2005 Sono aperte le iscrizioni  Info:  
www.donkarl.com/it

Se cancello l'ultimo mi va a quello precedente. Appena provato.
Cmq ha detto che se ce la fa per stasera mi rimanda il database cone
alcune aggiunte, tipo questa.
Ecco cosa mi ha scritto ora in email:
[IO] -  Quando elimino un record, il puntatore mi si posiziona si sul
record successivo però se poi torno indietro vedo una schermata
grigia. Ho provato a mettere un Me.Requery per la sottomaschera in vari
eventi ma non accade nulla. Come posso fare?
[LUI] - In fondo al codice del pulsante Cancella, bisognerebbe
aggiungere una parte per:
1. memorizzare l'id
2. aggiornare il recordset di tutt'e due le maschere
3. andare all'id memorizzato > questo perché se fai il requery della
maschera, si riposiziona al primo record.
Per quest'ultimo punto magari ci sentiamo stasera, io però ci sono
fino alle 19.30. Se riesco ti rimando il db con queste modifiche, ma
non ti prometto nulla.
Inoltre è stato un grande e mi ha risolto il problema della tabella
interventi.
Posto la soluzione in un altro topic :)

 
[CUT]
L'ultimo non è inteso nel senso della progressione, ma
l'ultimo rimasto.....!!!!!
@Alex
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Ahhhh, aspetta ora controllo.........
Mi da errore di debug infatti :( mo glielo scrivo......
Anzi.....ehmm....che potresti per favore aggiustare un pochettino la
routine :) ?
Io non ci capisco ancora molto di RecordCount e di come usarle :(
Grazie a scusa :)

 maschera, si riposiziona al primo record.
C'è la soluzione su 
www.donkarl.com/it


Ciao MA, si ho letto le FAQ (le ho stampate tutte e rilegate in un
volumetto) ma pare che la soluzione non funzioni per me.
Ecco il codice corrente del pulsante Elimina:
Dim rif As Variant
Dim ultimo_id As Variant
Dim res As Variant
rif = [Forms]![frmSchedaPrimoContatto]![id]
ultimo_id = DMax("idUtente", "tblUtenti")
If IsNull(rif) Then
    MsgBox "Nessun Utente selezionato!", vbCritical
    Exit Sub
  Else
    res = MsgBox("Elimino dall'archivio " &
UCase([Forms]![frmSchedaPrimoContatto]![Nome] & " " &
[Forms]![frmSchedaPrimoContatto]![Cognome]) & "?", vbQuestion +
vbYesNo)
    If res = 7 Then Exit Sub
End If
If rif = ultimo_id Then
    DoCmd.GoToRecord acDataForm, "frmSchedaPrimoContatto", acPrevious
  Else
    DoCmd.GoToRecord acDataForm, "frmSchedaPrimoContatto", acNext
End If
DoCmd.RunSQL "DELETE * FROM tblInterventi WHERE idUtente = " & rif
DoCmd.RunSQL "DELETE * FROM tblUtenti WHERE idUtente = " & rif
MsgBox "Utente eliminato.", vbInformation
End Sub
Tu come integreresti con il codice suggerito nella FAQ?
Io sto andando per tentativi ma faccio solo casino :(

Si, ma non è possibile. Copio e incollo e non appare una mazza.
Riprovo:
Private Sub cmdElimina_Click()
'Routine di Walter_Il_Mago
Dim rif As Variant
Dim ultimo_id As Variant
Dim res As Variant
rif = [Forms]![frmSchedaPrimoContatto]![id]
ultimo_id = DMax("idUtente", "tblUtenti")
If IsNull(rif) Then
    MsgBox "Nessun Utente selezionato!", vbCritical
    Exit Sub
  Else
    res = MsgBox("Elimino dall'archivio " &
UCase([Forms]![frmSchedaPrimoContatto]![Nome] & " " &
[Forms]![frmSchedaPrimoContatto]![Cognome]) & "?", vbQuestion +
vbYesNo)
    If res = 7 Then Exit Sub
End If
'Forms![frmSchedaPrimoContatto]![subSchedaPrimoContatto].Requery
If rif = ultimo_id Then
    DoCmd.GoToRecord acDataForm, "frmSchedaPrimoContatto", acPrevious
  Else
    DoCmd.GoToRecord acDataForm, "frmSchedaPrimoContatto", acNext
End If
DoCmd.RunSQL "DELETE * FROM tblInterventi WHERE idUtente = " & rif
DoCmd.RunSQL "DELETE * FROM tblUtenti WHERE idUtente = " & rif
MsgBox "Utente eliminato.", vbInformation
End Sub
come integreresti questa routine con il codice nella FAQ?
Io vado per tentativi :(