Newsgroup: it.comp.appl.access
Titolo: Eliminazione tutti record in form continua

Carissimi amici,
con il codice che segue elimino singolarmente i record presenti nella 
miaMaschera Continua
----------------------------------
Private Sub eliminarecordorfano_Click()
On Error GoTo Err_eliminarecordorfano_Click
    Dim stDocName As String
    Dim strRif As String
    stDocName = "Q_Elimina_Prestazioni_Orfane"
    strRif = Me.PrestazioneID
DoCmd.SetWarnings False
If MsgBox("Sei sicura di voler eliminare la Prestazione N° " & strRif, 
vbCritical + vbOKCancel, "Ge.Sa.- Hair Sudio") = vbOK Then
    CurrentDb.Execute "Delete * From Tb_Prestazioni_Storiche Where 
PrestazioneID = " & Me.PrestazioneID
    'DoCmd.OpenQuery stDocName, acNormal, acEdit
Me.Requery
Me.Q_Elimina_Prestazioni_Orfane
MsgBox "E' stata ELIMINATA la Prestazione N° " & strRif
strRif = ""
DoCmd.SetWarnings True
Else
MsgBox "Annullata l'eliminazione della Prestazione"
End If
Exit_eliminarecordorfano_Click:
    Exit Sub
Err_eliminarecordorfano_Click:
    MsgBox Err.Description
    Resume Exit_eliminarecordorfano_Click
End Sub
-------------------------------------------------------
ho fatto vari tentativi, ma non mi riesce di eliminare tutti i record della 
form, in una volta.
Salutoni
-- 
--------------------------------------
      Cataldo Formaro
-------------------------------------- 

 ha scritto nel messaggio
news:s1sCg.67706$zy5.1...@twister1.libero.it...
Ciao Cataldo :-)
tutto bene ???
Spero di si !!!!!
Allora, nel tuo codice, se utilizzi il metodo execute, puoi evitare di
eliminare i messaggi di errore perchè essendo un action query, viene
eseguita direttamente. Non ho capito in questa sub la dichiarazione della
stringa :
stDocName = "Q_Elimina_Prestazioni_Orfane"
che poi non utlizzi perchè l'eliminazione la fai con currentdb.execute....
Poi la maschera continua è una sottomaschera oppure è una maschera continua
punto e basta ? sembrerebbe la seconda che ho detto, in questo caso dovrebbe
essere sufficiente fare semplicemente
currentdb.execute "delete *  from TUATABELLA", dbFailonError.
al posto di tua tabella ci metti il nome della tabella che mi dovrebbe
essere Tb_Prestazioni_Storiche se non erro.Questa riga la metti al posto di
quella che hai mostrato tu ! Cambia anche un attimino i msg di avviso
ovviamente -->tutti i records sono stati cancellati ecc
Non l'ho testato, ma dovrebbe andare, fai una prova su una copia e fatti
vivo se non va !
UN SALUTONE MEGAGALATTICO !!!!!!!!!!!!!!!!!!!!!
ciao, Sandro
[cut]

 ciao, Sandro



Ciao, Sandro.

Cataldo Formaro ha scritto:

Per l'eliminazione dei Records in modo massivo data la Multiselezione
fatto con una Form in modalità continua è un pò più complesso del
Normale, nulla di drastico ma un pò scomodo.
Puoi recuperare il Record di partenza della selezione con SelTop e
l'estensione con SelWidth
A questo punto devi ciclare il RecordsetClone contando i records e
skippando quelli che non rientrano nella Selezione, quindi comporre la
Stringa per la Query DELETE che dovrà essere di questo tipo:
DELETE * FROM NomeTab WHERE id_pk IN (5,8,9,10,11)
tu devi ricreare solo la parte ta le parentesi, quindi ricordandoti che
la modalità continua consente solo selezioni CONSECUTIVE:
Dim rs as DAO.Recordset
Dim lngRow  as long
Dim lngSelTop as long
Dim lngSelWidth as long
set Rs=Me.RecordsetClone
lngSelTop=Me.SelTop
lngSelWidth=Me.SelWidth
With rs
      If .RecordCount > 0 Then
            lngRow  = lngSelTop
            .MoveFirst
            .Move lngTop - 1
            Do While lngRow< lngSelTop+lngSelWidth
                lngRow = lngRow + 1
                ' Ricorda di mettere gli apici se la PK è stringa
                strOut = strOut & !NomeCampoPK & ","
                .MoveNext
            Loop
      End If
End Width
' Devo togliere l'Ultima virgola di separazione
strOut=Mid$(strOut,1,Len(strOut)-1)
Ora avrai:
CurrentDb.Execute "DELETE * FROM T1 WHERE id_pk IN (" & strOut & ");"
Scusa se è un pò confusa ma l'ho buttata giù a braccio senza
provarla, volevo semplicemente farti capire il sistema, se trovi
qualche errore è per distrazione.
Ciao
@Alex

 Salutoni
Ciao Cataldo,
per eliminare tutti i record di una maschera puoi fare cosě
----
Do Until Me.RecordsetClone.EOF
   Me.RecordsetClone.Delete
   Me.RecordsetClone.MoveNext
Loop
----
Ciao
-- 
Giorgio Rancati
[Office Access MVP] 

 [Office Access MVP]
E' il caldo forse....
Perchè io ho capito che voleva eliminare i Recods di una Selezione
estesa della mdalità continua...?
Boh....
Appoggio la tua soluzione.
@Alex

Ciao amici, scusatemi se vi rispondo con ritardo ma č un periodo che il 
lavoro richiede molto piů presenza.
faccio un SUPERCUT e cerco di spiegarmi meglio:
... alcune volte il mio db mi crea delle stranezze; alcuni record non sono 
corrispondenti (questi record, li riesco a tirare fuori con la querypippo), 
con una miamaschera in visualizzazione continua con origine dati la 
querypippo, controllo se ci sono questi record orfani (e su questo vorrei 
capirci! Perchč non sistematicamente avviene ciň).
Con un pulsante in corrispondenza di ogni record (nella miamaschera) ed il 
codice in precedenza riportato, elimino i record singolarmente; ma quello 
che cercavo di fare, era di eliminarli tutti in una volta.
Buona giornata


 --------------------------------------
Giorgio ti ha dato la dritta giusta allora.
Ti confermo però che conviene indagare sull'anomalia funzionale che
esponi in quanto
Access non può generare queste cose, che spesso(sempre) derivano da
BUGS di programmazione, e trovarli non è sempre facile.
Finchè non trovi la dinamica sei quasi costretto a ritestare le
procedure....
@Alex

 ha scritto nel messaggio 
news:1155280620....@m73g2000cwd.googlegroups.com...
Cataldo Formaro ha scritto:


@Alex
RISPOSTA
Ciao Alex,
ho provato il codice di giorgio, ma restituisce questo errore:
Impossibile aggiornare. Database o oggetto di sola lettura.
Sarà perchè ha come origine una query?


 Sarà perchè ha come origine una query?
no, dipende da come è fatta la query.
Molto probabilmente puoi eliminare tutti i record orfani con una query di 
eliminazione, ma per aiutarti bisognerebbe sapere qualcosa in più :-)
Ad esempio, come è fatta la query che è origine della 
maschera.in
 questione 
?


 ha scritto nel 
messaggio news:44dc4b6d$0$972$5fc...@news.tiscali.it...

Ciao Giorgio,
ti allego l'SQL della query:
---------------------
SELECT *
FROM Tb_Prestazioni_Storiche LEFT JOIN Tb_Presenze_Storiche ON 
(Tb_Prestazioni_Storiche.VisitaID=Tb_Presenze_Storiche.VisitaID) AND 
(Tb_Prestazioni_Storiche.lCodiceBarreCliente=Tb_Presenze_Storiche.lCodiceBarreCliente)
WHERE Tb_Presenze_Storiche.lCodiceBarreCliente IS NULL;
-------------------


 ha scritto nel messaggio 
news:cuZCg.69373$_J1.7...@twister2.libero.it...

Consideriamola una soluzione "artigianale"
con una query di aggiornamento, mi flaggo un campo ed in successione con una 
query elimino il tutto.


 -------------------
Fai cosě
----
DELETE DISTINCTROW Tb_Prestazioni_Storiche.*
FROM Tb_Prestazioni_Storiche LEFT JOIN Tb_Presenze_Storiche ON
 (Tb_Prestazioni_Storiche.VisitaID = Tb_Presenze_Storiche.VisitaID) AND
 (Tb_Prestazioni_Storiche.lCodiceBarreCliente =
Tb_Presenze_Storiche.lCodiceBarreCliente)
WHERE Tb_Presenze_Storiche.lCodiceBarreCliente Is Null;
----
ovviamente fai una copia di backup prima di provare.
