Discussione:
scorrere recordset non aggiornabile
(troppo vecchio per rispondere)
Akery
2024-02-28 09:14:49 UTC
Permalink
buongiorno,
con il seguente script
_________________________________________________________________________________
Dim rs As Recordset
Dim tmp As String

On Error Resume Next

DoCmd.GoToRecord , , acFirst


Do Until Me.Recordset.EOF = True

Kill Me.cert
tmp = "select * from check_att_base where cf='" & Me.codice_fiscale
& "'"
Set rs = CurrentDb.OpenRecordset(tmp, dbOpenDynaset)
rs.Edit
rs!att_delete = True
rs.Update
rs.Close
Set rs = Nothing
Me.Refresh

'Error 11

DoCmd.GoToRecord , , acNext

Loop

MsgBox ("fatto!")
_________________________________________________________________________________

cancello dei file che non mi servono più, lo script funziona ma poi
resta impallato sull'ultimo record.
come faccio per uscire dal loop?

grazie
BFS
2024-02-28 13:03:14 UTC
Permalink
Post by Akery
buongiorno,
con il seguente script
_________________________________________________________________________________
Dim rs As Recordset
Dim tmp As String
On Error Resume Next
DoCmd.GoToRecord , , acFirst
Do Until Me.Recordset.EOF = True
    Kill Me.cert
    tmp = "select * from check_att_base where cf='" & Me.codice_fiscale
& "'"
    Set rs = CurrentDb.OpenRecordset(tmp, dbOpenDynaset)
    rs.Edit
    rs!att_delete = True
    rs.Update
    rs.Close
    Set rs = Nothing
    Me.Refresh
    'Error 11
    DoCmd.GoToRecord , , acNext
Loop
MsgBox ("fatto!")
_________________________________________________________________________________
cancello dei file che non mi servono più, lo script funziona ma poi
resta impallato sull'ultimo record.
come faccio per uscire dal loop?
grazie
brutta sta cosa di scorrere i record della maschera...

sarebbe meglio che tu aprissi un recordset con l'origine dati della tua
maschera

cicli il recordset e per ogni ciclo cancelli le righe dell'altra tabella
con un

docmd.runsql "delete * from ...where cf=" & rs.fields("cf")



BFS
Akery
2024-02-28 20:01:45 UTC
Permalink
Post by BFS
Post by Akery
buongiorno,
con il seguente script
_________________________________________________________________________________
Dim rs As Recordset
Dim tmp As String
On Error Resume Next
DoCmd.GoToRecord , , acFirst
Do Until Me.Recordset.EOF = True
     Kill Me.cert
     tmp = "select * from check_att_base where cf='" &
Me.codice_fiscale & "'"
     Set rs = CurrentDb.OpenRecordset(tmp, dbOpenDynaset)
     rs.Edit
     rs!att_delete = True
     rs.Update
     rs.Close
     Set rs = Nothing
     Me.Refresh
     'Error 11
     DoCmd.GoToRecord , , acNext
Loop
MsgBox ("fatto!")
_________________________________________________________________________________
cancello dei file che non mi servono più, lo script funziona ma poi
resta impallato sull'ultimo record.
come faccio per uscire dal loop?
grazie
brutta sta cosa di scorrere i record della maschera...
sarebbe meglio che tu aprissi un recordset con l'origine dati della tua
maschera
la query che da origine alla maschera è una query unione
Post by BFS
cicli il recordset e per ogni ciclo cancelli le righe dell'altra tabella
con un
docmd.runsql "delete * from ...where  cf=" & rs.fields("cf")
non devo cancellare righe, in questo campo ci inserisco una spunta che
dice che il file è stato cancellato
Post by BFS
BFS
BFS
2024-02-29 06:47:54 UTC
Permalink
Post by Akery
Post by BFS
Post by Akery
buongiorno,
con il seguente script
_________________________________________________________________________________
Dim rs As Recordset
Dim tmp As String
On Error Resume Next
DoCmd.GoToRecord , , acFirst
Do Until Me.Recordset.EOF = True
     Kill Me.cert
     tmp = "select * from check_att_base where cf='" &
Me.codice_fiscale & "'"
     Set rs = CurrentDb.OpenRecordset(tmp, dbOpenDynaset)
     rs.Edit
     rs!att_delete = True
     rs.Update
     rs.Close
     Set rs = Nothing
     Me.Refresh
     'Error 11
     DoCmd.GoToRecord , , acNext
Loop
MsgBox ("fatto!")
_________________________________________________________________________________
cancello dei file che non mi servono più, lo script funziona ma poi
resta impallato sull'ultimo record.
come faccio per uscire dal loop?
grazie
brutta sta cosa di scorrere i record della maschera...
sarebbe meglio che tu aprissi un recordset con l'origine dati della
tua maschera
la query che da origine alla maschera è una query unione
nulla vieta di aprire un rst con una query di unione
Post by Akery
Post by BFS
cicli il recordset e per ogni ciclo cancelli le righe dell'altra
tabella con un
docmd.runsql "delete * from ...where  cf=" & rs.fields("cf")
non devo cancellare righe, in questo campo ci inserisco una spunta che
dice che il file è stato cancellato
docmd.runsql "update tuatabella set tuoFlag=true where cf=" &
rs.fields("cf")
Post by Akery
Post by BFS
BFS
Bruno Campanini
2024-02-28 13:12:39 UTC
Permalink
Post by Akery
buongiorno,
con il seguente script
_________________________________________________________________________________
Dim rs As Recordset
Dim tmp As String
On Error Resume Next
DoCmd.GoToRecord , , acFirst
Do Until Me.Recordset.EOF = True
Kill Me.cert
tmp = "select * from check_att_base where cf='" & Me.codice_fiscale &
"'"
Set rs = CurrentDb.OpenRecordset(tmp, dbOpenDynaset)
rs.Edit
rs!att_delete = True
rs.Update
rs.Close
Set rs = Nothing
Me.Refresh
'Error 11
DoCmd.GoToRecord , , acNext
Loop
MsgBox ("fatto!")
_________________________________________________________________________________
cancello dei file che non mi servono più, lo script funziona ma poi resta
impallato sull'ultimo record.
come faccio per uscire dal loop?
grazie
A me sembra tu voglia cancellare records non files,
ma forse ho male inteso.
Comunque per cancellare un record io faccio così:
==================================
Tabella: LT_Inviti
Cancellazione del record che ha il campo [ID_Ditta] = 164

Dim RS As Recordset
Set RS = CurrentDb.OpenRecordset("LT_Inviti", dbOpenDynaset)
Do Until RS.EOF
If RS![ID_ditta] = "164" Then
RS.Edit
RS.Delete
Exit Do
End If
RS.MoveNext
Loop

Bruno
Bruno Campanini
2024-02-28 13:18:42 UTC
Permalink
Post by Bruno Campanini
Post by Akery
buongiorno,
con il seguente script
_________________________________________________________________________________
Dim rs As Recordset
Dim tmp As String
On Error Resume Next
DoCmd.GoToRecord , , acFirst
Do Until Me.Recordset.EOF = True
Kill Me.cert
tmp = "select * from check_att_base where cf='" & Me.codice_fiscale &
"'"
Set rs = CurrentDb.OpenRecordset(tmp, dbOpenDynaset)
rs.Edit
rs!att_delete = True
rs.Update
rs.Close
Set rs = Nothing
Me.Refresh
'Error 11
DoCmd.GoToRecord , , acNext
Loop
MsgBox ("fatto!")
_________________________________________________________________________________
cancello dei file che non mi servono più, lo script funziona ma poi resta
impallato sull'ultimo record.
come faccio per uscire dal loop?
grazie
A me sembra tu voglia cancellare records non files,
ma forse ho male inteso.
==================================
Tabella: LT_Inviti
Cancellazione del record che ha il campo [ID_Ditta] = 164
Dim RS As Recordset
Set RS = CurrentDb.OpenRecordset("LT_Inviti", dbOpenDynaset)
Do Until RS.EOF
If RS![ID_ditta] = "164" Then
RS.Edit
RS.Delete
Exit Do
End If
RS.MoveNext
Loop
Bruno
Un'altra osservazione:
per muoverti dentro un definito RS (Recordset)
RS.MoveFirst
RS.MoveLast
RS.MoveNext

Bruno
Akery
2024-02-28 20:12:34 UTC
Permalink
Post by Bruno Campanini
Post by Bruno Campanini
Post by Akery
buongiorno,
con il seguente script
_________________________________________________________________________________
Dim rs As Recordset
Dim tmp As String
On Error Resume Next
DoCmd.GoToRecord , , acFirst
Do Until Me.Recordset.EOF = True
     Kill Me.cert
     tmp = "select * from check_att_base where cf='" &
Me.codice_fiscale & "'"
     Set rs = CurrentDb.OpenRecordset(tmp, dbOpenDynaset)
     rs.Edit
     rs!att_delete = True
     rs.Update
     rs.Close
     Set rs = Nothing
     Me.Refresh
     'Error 11
     DoCmd.GoToRecord , , acNext
Loop
MsgBox ("fatto!")
_________________________________________________________________________________
cancello dei file che non mi servono più, lo script funziona ma poi
resta impallato sull'ultimo record.
come faccio per uscire dal loop?
grazie
A me sembra tu voglia cancellare records non files,
ma forse ho male inteso.
==================================
Tabella: LT_Inviti
Cancellazione del record che ha il campo [ID_Ditta] = 164
Dim RS As Recordset
Set RS = CurrentDb.OpenRecordset("LT_Inviti", dbOpenDynaset)
Do Until RS.EOF
    If RS![ID_ditta] = "164" Then
        RS.Edit
        RS.Delete
        Exit Do
    End If
    RS.MoveNext
Loop
Bruno
per muoverti dentro un definito RS (Recordset)
RS.MoveFirst
RS.MoveLast
RS.MoveNext
Bruno
mi sto muovendo su una maschera, trovo il percorso del file "me.cert"
poi kill cancella il file poi apro una tabella che contiene dei flag
quindi spunto che il file è stato cancellato, tutto funziona! Poi arrivo
all'ultimo valore della maschera e da quel momento in poi si impalla
tutto, nel senso che non esce dalla sub e devo interompere forzatamente.
Pertanto la questione è come far capire ad access che una volta arrivato
in fondo alla maschera deve interrompere le operazioni?
Bruno Campanini
2024-02-28 22:09:46 UTC
Permalink
Post by Bruno Campanini
Post by Bruno Campanini
Post by Akery
buongiorno,
con il seguente script
_________________________________________________________________________________
Dim rs As Recordset
Dim tmp As String
On Error Resume Next
DoCmd.GoToRecord , , acFirst
Do Until Me.Recordset.EOF = True
     Kill Me.cert
     tmp = "select * from check_att_base where cf='" & Me.codice_fiscale
& "'"
     Set rs = CurrentDb.OpenRecordset(tmp, dbOpenDynaset)
     rs.Edit
     rs!att_delete = True
     rs.Update
     rs.Close
     Set rs = Nothing
     Me.Refresh
     'Error 11
     DoCmd.GoToRecord , , acNext
Loop
MsgBox ("fatto!")
_________________________________________________________________________________
cancello dei file che non mi servono più, lo script funziona ma poi resta
impallato sull'ultimo record.
come faccio per uscire dal loop?
grazie
A me sembra tu voglia cancellare records non files,
ma forse ho male inteso.
==================================
Tabella: LT_Inviti
Cancellazione del record che ha il campo [ID_Ditta] = 164
Dim RS As Recordset
Set RS = CurrentDb.OpenRecordset("LT_Inviti", dbOpenDynaset)
Do Until RS.EOF
    If RS![ID_ditta] = "164" Then
        RS.Edit
        RS.Delete
        Exit Do
    End If
    RS.MoveNext
Loop
Bruno
per muoverti dentro un definito RS (Recordset)
RS.MoveFirst
RS.MoveLast
RS.MoveNext
Bruno
mi sto muovendo su una maschera, trovo il percorso del file "me.cert" poi
kill cancella il file poi apro una tabella che contiene dei flag quindi
spunto che il file è stato cancellato, tutto funziona! Poi arrivo all'ultimo
valore della maschera e da quel momento in poi si impalla tutto, nel senso
che non esce dalla sub e devo interompere forzatamente.
Pertanto la questione è come far capire ad access che una volta arrivato in
fondo alla maschera deve interrompere le operazioni?
Cosa vuol dire "mi sto muovendo su una maschera"?
La procedura sarà attivata da un codice che è nel Form, o no?

E comunque prova a togliere, per la prova, questi inutili orpelli:
- On error Resume Next
- DoCmd.GoToRecord , , acFirst
- rs.Close
- Set rs = Nothing
- Me.Refresh
- sostituisci: DoCmd.GoToRecord , , acNext
con: rs.MoveNext

Senza una prova concreta io non do dire altro.

Bruno
Akery
2024-02-29 06:41:48 UTC
Permalink
Post by Bruno Campanini
Post by Akery
Post by Bruno Campanini
Post by Bruno Campanini
Post by Akery
buongiorno,
con il seguente script
_________________________________________________________________________________
Dim rs As Recordset
Dim tmp As String
On Error Resume Next
DoCmd.GoToRecord , , acFirst
Do Until Me.Recordset.EOF = True
     Kill Me.cert
     tmp = "select * from check_att_base where cf='" &
Me.codice_fiscale & "'"
     Set rs = CurrentDb.OpenRecordset(tmp, dbOpenDynaset)
     rs.Edit
     rs!att_delete = True
     rs.Update
     rs.Close
     Set rs = Nothing
     Me.Refresh
     'Error 11
     DoCmd.GoToRecord , , acNext
Loop
MsgBox ("fatto!")
_________________________________________________________________________________
cancello dei file che non mi servono più, lo script funziona ma poi
resta impallato sull'ultimo record.
come faccio per uscire dal loop?
grazie
A me sembra tu voglia cancellare records non files,
ma forse ho male inteso.
==================================
Tabella: LT_Inviti
Cancellazione del record che ha il campo [ID_Ditta] = 164
Dim RS As Recordset
Set RS = CurrentDb.OpenRecordset("LT_Inviti", dbOpenDynaset)
Do Until RS.EOF
    If RS![ID_ditta] = "164" Then
        RS.Edit
        RS.Delete
        Exit Do
    End If
    RS.MoveNext
Loop
Bruno
per muoverti dentro un definito RS (Recordset)
RS.MoveFirst
RS.MoveLast
RS.MoveNext
Bruno
mi sto muovendo su una maschera, trovo il percorso del file "me.cert"
poi kill cancella il file poi apro una tabella che contiene dei flag
quindi spunto che il file è stato cancellato, tutto funziona! Poi
arrivo all'ultimo valore della maschera e da quel momento in poi si
impalla tutto, nel senso che non esce dalla sub e devo interompere
forzatamente.
Pertanto la questione è come far capire ad access che una volta
arrivato in fondo alla maschera deve interrompere le operazioni?
Cosa vuol dire "mi sto muovendo su una maschera"?
la maschera (visualizzazione "dividi maschera") è costruita su una query
non aggiornabile, ed è giusto che sia così perchè è una query che mi
cerca dei valori, i valori sono rappresentati dai vari percorsi dei file
da cancellare.

nel do until ho dato l'istruzione di scorrere tutti i record della
maschera me.recordset.eof e
con le istruzioni nel corpo del ciclo do until richiamo un'altra tabella
dove vado ad appuntare di aver fatto l'operazione di cancellazione del file.

il problema nasce sull'ultimo valore del recordset della maschera perchè
il ciclo non si arresta. Come si fa per far capire ad access che è
arrivato all'ultimo valore di me.recordset?

utilizzo DoCmd.GoToRecord , , acNext perchè sto scorrendo sulla maschera
Post by Bruno Campanini
La procedura sarà attivata da un codice che è nel Form, o no?
- On error Resume Next
tolto ma se il file non esiste esce fuori dalla sub senza controllare il
resto
Post by Bruno Campanini
- DoCmd.GoToRecord , , acFirst
lo utilizzo come comando per andare al primo record della maschera
Post by Bruno Campanini
- rs.Close > - Set rs = Nothing
- Me.Refresh
ok, li toglierò
Post by Bruno Campanini
- sostituisci: DoCmd.GoToRecord , , acNext
         con: rs.MoveNext
il rs richiamato è unico ed appartiene alla tabella dei flag
Post by Bruno Campanini
Senza una prova concreta io non do dire altro.
Bruno
Grazie
Akery
Akery
2024-02-29 11:38:20 UTC
Permalink
Post by Akery
Post by Bruno Campanini
Post by Akery
Post by Bruno Campanini
Post by Bruno Campanini
Post by Akery
buongiorno,
con il seguente script
_________________________________________________________________________________
Dim rs As Recordset
Dim tmp As String
On Error Resume Next
DoCmd.GoToRecord , , acFirst
Do Until Me.Recordset.EOF = True
     Kill Me.cert
     tmp = "select * from check_att_base where cf='" &
Me.codice_fiscale & "'"
     Set rs = CurrentDb.OpenRecordset(tmp, dbOpenDynaset)
     rs.Edit
     rs!att_delete = True
     rs.Update
     rs.Close
     Set rs = Nothing
     Me.Refresh
     'Error 11
     DoCmd.GoToRecord , , acNext
Loop
MsgBox ("fatto!")
_________________________________________________________________________________
cancello dei file che non mi servono più, lo script funziona ma
poi resta impallato sull'ultimo record.
come faccio per uscire dal loop?
grazie
A me sembra tu voglia cancellare records non files,
ma forse ho male inteso.
==================================
Tabella: LT_Inviti
Cancellazione del record che ha il campo [ID_Ditta] = 164
Dim RS As Recordset
Set RS = CurrentDb.OpenRecordset("LT_Inviti", dbOpenDynaset)
Do Until RS.EOF
    If RS![ID_ditta] = "164" Then
        RS.Edit
        RS.Delete
        Exit Do
    End If
    RS.MoveNext
Loop
Bruno
per muoverti dentro un definito RS (Recordset)
RS.MoveFirst
RS.MoveLast
RS.MoveNext
Bruno
mi sto muovendo su una maschera, trovo il percorso del file "me.cert"
poi kill cancella il file poi apro una tabella che contiene dei flag
quindi spunto che il file è stato cancellato, tutto funziona! Poi
arrivo all'ultimo valore della maschera e da quel momento in poi si
impalla tutto, nel senso che non esce dalla sub e devo interompere
forzatamente.
Pertanto la questione è come far capire ad access che una volta
arrivato in fondo alla maschera deve interrompere le operazioni?
Cosa vuol dire "mi sto muovendo su una maschera"?
la maschera (visualizzazione "dividi maschera") è costruita su una query
non aggiornabile, ed è giusto che sia così perchè è una query che mi
cerca dei valori, i valori sono rappresentati dai vari percorsi dei file
da cancellare.
nel do until ho dato l'istruzione di scorrere tutti i record della
maschera me.recordset.eof e
con le istruzioni nel corpo del ciclo do until richiamo un'altra tabella
dove vado ad appuntare di aver fatto l'operazione di cancellazione del file.
il problema nasce sull'ultimo valore del recordset della maschera perchè
il ciclo non si arresta. Come si fa per far capire ad access che è
arrivato all'ultimo valore di me.recordset?
utilizzo DoCmd.GoToRecord , , acNext perchè sto scorrendo sulla maschera
Post by Bruno Campanini
La procedura sarà attivata da un codice che è nel Form, o no?
- On error Resume Next
tolto ma se il file non esiste esce fuori dalla sub senza controllare il
resto
Post by Bruno Campanini
- DoCmd.GoToRecord , , acFirst
lo utilizzo come comando per andare al primo record della maschera
Post by Bruno Campanini
- rs.Close > - Set rs = Nothing
- Me.Refresh
ok, li toglierò
Post by Bruno Campanini
- sostituisci: DoCmd.GoToRecord , , acNext
          con: rs.MoveNext
il rs richiamato è unico ed appartiene alla tabella dei flag
Post by Bruno Campanini
Senza una prova concreta io non do dire altro.
Bruno
Grazie
Akery
Ho capito il problema
avevo omesso questa semplice istruzione

Me.Recordset.MoveNext

che confondevo con DoCmd.GoToRecord , , acNext

grazie per il supporto
Bruno Campanini
2024-02-29 22:00:17 UTC
Permalink
[...]
Post by Akery
Post by Bruno Campanini
- On error Resume Next
tolto ma se il file non esiste esce fuori dalla sub senza controllare il
resto
Ho suggerito di toglierlo per vedere dove si verificasse
un eventuale errore: quand'è tutto chiaro rimettiglielo.
Post by Akery
Post by Bruno Campanini
- DoCmd.GoToRecord , , acFirst
lo utilizzo come comando per andare al primo record della maschera
Quando apri un Recordset (Set rs = ...) sei già
al primo record.
Comunque i DoCmd.GotoRecord... non muovono il puntatore
del Recordset, muovono quello della scheda.

Bruno
Bruno Campanini
2024-02-29 22:03:15 UTC
Permalink
Post by Bruno Campanini
[...]
Post by Akery
Post by Bruno Campanini
- DoCmd.GoToRecord , , acFirst
lo utilizzo come comando per andare al primo record della maschera
Quando apri un Recordset (Set rs = ...) sei già
al primo record.
Non ho tenuto conto che ti riferivi proprio alla scheda...
stavo ancora pensando al Recordset.
Come non detto.

Bruno

Akery
2024-02-28 20:05:30 UTC
Permalink
Post by Bruno Campanini
Post by Akery
buongiorno,
con il seguente script
_________________________________________________________________________________
Dim rs As Recordset
Dim tmp As String
On Error Resume Next
DoCmd.GoToRecord , , acFirst
Do Until Me.Recordset.EOF = True
     Kill Me.cert
     tmp = "select * from check_att_base where cf='" &
Me.codice_fiscale & "'"
     Set rs = CurrentDb.OpenRecordset(tmp, dbOpenDynaset)
     rs.Edit
     rs!att_delete = True
     rs.Update
     rs.Close
     Set rs = Nothing
     Me.Refresh
     'Error 11
     DoCmd.GoToRecord , , acNext
Loop
MsgBox ("fatto!")
_________________________________________________________________________________
cancello dei file che non mi servono più, lo script funziona ma poi
resta impallato sull'ultimo record.
come faccio per uscire dal loop?
grazie
A me sembra tu voglia cancellare records non files,
ma forse ho male inteso.
sto cancellando files, infatti, me.cert contiene il percorso del file
che passo al comando kill
poi con "rs!att_delete = True" inserisco la spunta che mi dice che il
file è stato cancellato
Post by Bruno Campanini
==================================
Tabella: LT_Inviti
Cancellazione del record che ha il campo [ID_Ditta] = 164
Dim RS As Recordset
Set RS = CurrentDb.OpenRecordset("LT_Inviti", dbOpenDynaset)
Do Until RS.EOF
   If RS![ID_ditta] = "164" Then
       RS.Edit
       RS.Delete
       Exit Do
   End If
   RS.MoveNext
Loop
Bruno
Continua a leggere su narkive:
Loading...