Newsgroup: it.comp.appl.access
Titolo: Cancellare dei record

Salve atutto il NG e buona domenica
Ho un form che chiamo Fattura e in questo form ho una combo che punta a 
tblPagamenti e una sottomaschera tipiPagamenti, se scelgo dalla combo p.e. 
il tipo di pagamento es.30/60/90/120  per un importo fattura di 1000 mi va a 
popolare la sottomaschera TipiPagamenti con le date e gli importi stabiliti 
da una routin e qui tutto ok, ma se percasso volessi cambiare dalla combo il 
tipo di pagamento per una ragione qualunque e sostituirlo a quello che é già 
presente nella sottomaschera come posso cancellare in automatico i record e 
sostituirli con i nuovi? "adesso li seleziono e poi li cancello con il tasto 
canc"
Grazie
-- 
Carlo
:-)
--------------------------------------------------------------------------------
La mia Cartella di Posta in Arrivo è protetta con SPAMfighter
1230 messaggi contenenti spam sono stati bloccati con successo.
Scarica gratuitamente SPAMfighter! 

 Carlo
Io per fare quello che tu dici, sfrutto il recordset della sottomaschera
Per esempio, se sei in Maschera principale potrestri fare così:
---------------------------------------------------
Private Sub PulisciSottoMaschera()
Echo False
Dim Rcd As DAO.Recordset
Set Rcd = Me![NomeControlloSottoMaschera].Form.Recordset
If Not Rcd.EOF Then Rcd.MoveLast
If Rcd.RecordCount = 0 Then
    Set Rcd = Nothing
    Echo True
    Exit Sub
End If
Rcd.MoveFirst
Do While Not Rcd.EOF
    Rcd.Delete
    Rcd.MoveNext
End If
Set Rcd = Nothing
 Me![NomeControlloSottoMaschera].Form.Refresh
Echo True
End Sub
----------------------------------------
E' una sub da inserire nel modulo della maschera principale, a tua cura sostituire il 
nomecontrollsottomaschera e creare la chiamata.
Dovrebbe funzionare, serve il riferimento DAO 3.6
Michele

 ha scritto nel messaggio
news:45aa2f23$0$16151$4faf...@reader3.news.tin.it...

Ma non è meglio una "DELETE * FROM NomeTabella WHERE CampoPK=" &
Me.NomeCampoPK
Una riga di codice....!
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.alessandrobaraldi.it
---------------------------------------------------------------------------

 Una riga di codice....!
Si, hai ragione, però la mia routine lavora su un oggetto che è già aperto e che in assoluto sta 
avendo i maggiori diritti per leggere e scrivere su quei records.....
Almeno....
Poi veda lui....
Michele 

 ha scritto nel messaggio
news:45aa36ea$0$16160$4faf...@reader3.news.tin.it...

Non c'azzecca nulla, il metodo è troppo lento, quindi è bocciato in
partenza.
Si deve sempre ottimizzare il codice, il tuo ragionamento andrebbe bene su
WorkSpace
diversi...., ma lavori sempre su CurrentDb, ed a meno di blocchi
pessimistici, che non si usano
mai....
Poi come hai detto tu ognuno è libero di farsi male come meglio crede....!
;-)


o devo creare un controllo.
Grazie
Ciao
Carlo
:-)
--------------------------------------------------------------------------------
La mia Cartella di Posta in Arrivo è protetta con SPAMfighter
1231 messaggi contenenti spam sono stati bloccati con successo.
Scarica gratuitamente SPAMfighter! 

 :-)
Non sò quale sia l'evento che ti deve far scatenare la cancellazione.... ma
quello
lo individui da solo, magari un Click di un Button o l'AfterUpdate della
combo..., sinceramente
non ho capito bene la dinamica...!
Quindi usi il Metodo Execute membro dell'oggetto Database che ti evita i
messaggi
di Warnings...!
CurrentDb.Execute "DELETE * FROM NomeTabella WHERE CampoPK=" &
Me.NomeCampoPK,dbFailOnerror
Saluti


Scusa @Alex, ho inserito nella combo AfterUpdate questa tringa
CurrentDb.Execute "DELETE* forms[tblFatture]![sottomaschera_tblPagamenti] 
WHERE idPagamento =" & Me!IdPagamento, dbFailOnError
Mi dice che non trova il campo IDPagamento. Dove sbaglio?
Grazie


 ;-)
Che hai scritto....?
Il predicato SQL è :
"DELETE * FROM NomeTabella WHERE [NomeCampo]=" & Me!IdPagamento
Al posto di NomeTabella metterai il Nome della Tabella origine(presumo
tblPagamenti)
Al posto di NomeCampo metterai il Nome del Campo(presumo sia IdPagamenti)
Se non ho frainteso sarà:
"DELETE * FROM tblPagamenti WHERE [IdPagamenti]=" & Me!IdPagamento
Fai un Requery dell'oggetto e dovrebbe andare...!
P.S. mi rimane ancora da capire perchè su AfterUpdate....?


@Alex scusa,
Ho messo la stringa in un Pulsante
ho messo la stringa su di un Pulsante di comando: e se ho ben capito
Private Sub CancellaScadenze_Click()
CurrentDb.Execute "DELETE * FROM tblPagamenti (nome della tabella) WHERE 
[IDPagamento](nome del Campo della tblPagamenti)=" & Me!IdPagamento(IDEM)
Me.Sottomaschera_tblPagamenti.Requery
Mi da sempre lo stesso errore non trova il CAmpo IDPagamento.
Lo scopo é se hò sbagliato nell'inserire la forma di pagamento per quel 
documento e nella sottotabella pagamenti sono state inserire le scadenze 
sbagliate in modo da cancellarle per poi inserire quelle nuove
Mi auguro di essere stato esaustivo.
Ti ringrazio per la tua gentilezza e pazienza
Carlo
:-))


 :-))
Carlo, senti ti ho scritto la stringa spiegandoti il significato dei
parametri perchè
hai fatto una cosa di Programmazione Creativa...????
Ti riscrivo nuovamente la stringa per l'ultima volta:
"DELETE * FROM tblPagamenti WHERE [IdPagamenti]=" & Me!IdPagamento
Dove(leggi e rileggi):
tblPagamenti ----> E' la tabella origine nella quale vuoi Cancellare
IdPagamenti -----> E' il campo definito ChiavePrimaria nella tabella(ma devi
valutare tu se è corretto)


 Poi come hai detto tu ognuno è libero di farsi male come meglio crede....!
Io nutro una specie di avversione verso le query action. Pensa che ho provato ad utilizzarle nel mio 
codice in alcune funzioni che dovevano cancellare alcuni record. Utilizzando la funzione da sola, 
tutto OK, utilizzando la funzione all'interno di una cosa più grossa durante una transazione, si 
piantava tutto. Adesso nn ricordo che errore mi era venuto fuori, ma invece di cozzare la testa, ho 
detto "meglio prima" e ho riportato tutto a DAO.
Stiamo parlando di CurrentDb.Execute, e non di Docmd.RunSQL
Magari un giorno, se proprio non potrò farne a meno, mangerò pane e SQL. Adesso mi limito a mangiare 
pane e DAO.
Michele

@Alex, grazie per il tuo Aiuto alla fine c'é l'ho fatta
--------------------------------------------------------------------------------
La mia Cartella di Posta in Arrivo è protetta con SPAMfighter
1236 messaggi contenenti spam sono stati bloccati con successo.
Scarica gratuitamente SPAMfighter! 

 @Alex, grazie per il tuo Aiuto alla fine c'é l'ho fatta
Carlo, ti invito caldamente a limitarti nel quotare solo ilo stretto indispensabile. 
Nel tuo ultimo post hai replicato l'intero contenuto del post precedente, 
solo per aggiungere una riga di ringraziamento.
Altra cosa gradita sarebbe la rimozione delle tre righe finali relative a 
SpamFighter.
--
PBsoft di Gabriele Bertolucci
www.pbsoft.it
skype:pbsoftsolution