esiste un modo per eliminare i record (non più necessari) direttamente
dalla casella di riepilogo?
ciao
Sthepan
Si è possibile, ma la soluzione è diversa a seconda del Tipo origine riga (e
quindi dell'Origine riga) della casella di riepilogo.
Quindi dovresti reccontare qualcosa di più dell'Origine riga della casella
di riepilogo.
>
> ciao
> Sthepan
--
Roberto
------------------------------------------------
il Sito Comune di it.comp.appl.access
www.sitocomune.com
-----------------------------------------------
> "Sthepan" <sth...@supereva.it> ha scritto nel messaggio
> news:nb84ob7ypsrh$.1dyjn4hka7nt0$.dlg@40tude.net...
>> Su un archivio con più campi, ho creato una maschera di ricerca che mi
>> elenca i risultati in una casella di riepilogo.
>>
>> esiste un modo per eliminare i record (non più necessari) direttamente
>> dalla casella di riepilogo?
>
> Si è possibile, ma la soluzione è diversa a seconda del Tipo origine riga (e
> quindi dell'Origine riga) della casella di riepilogo.
> Quindi dovresti reccontare qualcosa di più dell'Origine riga della casella
> di riepilogo.
>
>>
>> ciao
>> Sthepan
Ciao
nella casella di riepilogo vanno a finire inordine i dati originati da
tabella tramite querye sono composti da id, campo1, campo 2 e campo3
ciao
Sthepan
Dovresti postare il codice SQL della query che è origine riga della casella
di riepilogo precidando anche quale è la colonna associata della casella di
riepilogo e non guaterebbe sapere la struttura della/e tabella/e su cui è
basata tale query.
Poi dovresti dire anche se vuoi eliminare fisicamente dalla tabella i record
selezionati nella casella di riepilogo oppure vuoi solo NON visualizzarli.
--
Roberto
------------------------------------------------
il Sito Comune di it.comp.appl.access
www.sitocomune.com
-----------------------------------------------
>
> ciao
> Sthepan
Ciao,
questo e l'SQL della query
SELECT tblArchivio.NomeFile, tblArchivio.Percorso, tblArchivio.CD
FROM tblArchivio
WHERE (((tblArchivio.NomeFile) Like "*" & [form]![frmRicerca]![txtscr] &
"*")) OR (((tblArchivio.Percorso) Like "*" & [form]![frmRicerca]![txtscr] &
"*")) OR (((tblArchivio.CD) Like "*" & [form]![frmRicerca]![txtscr] & "*"))
ORDER BY tblArchivio.NomeFile, tblArchivio.Percorso, tblArchivio.CD;
questo è il codice della maschera
Private Sub txtscr_AfterUpdate()
If IsNull(txtscr) Or txtscr = "" Then
VisTitoli.RowSource = VisTitoli.Tag
res.Caption = "Trovato/i " & VisTitoli.ListCount - 1 & "Voci"
Else
VisTitoli.RowSource = "SELECT tblArchivio.CD, tblArchivio.NomeFile,
tblArchivio.Percorso FROM tblArchivio WHERE (((tblArchivio.CD) Like '*" &
txtscr & "*')) OR (((tblArchivio.Percorso) Like '*" & txtscr & "*')) OR
(((tblArchivio.NomeFile) Like '*" & txtscr & "*')) ORDER BY
tblArchivio.NomeFile, tblArchivio.CD, tblArchivio.Percorso;"
res.Caption = "Trovato/i " & VisTitoli.ListCount - 1 & "Voci"
'MsgBox VisTitoli.RowSource
End If
End Sub
intendevo eliminarli definitivamente o in alternativa spostarli in altra
tabella usata come cestino
ciao
Sthepan
Scusa ma non mi è chiaro se devi cancellare dalla tabella tblArchivio TUTTI
i record visualizzati nella casella di riepilogo VisTitoli (ovvero contenuti
nella query) oppure vuoi cancellare solo quelli che andrai a selezionare con
il mouse tra quelli visualizzati nella casella di riepilogo.
>
>
> ciao
> Sthepan
--
Volevo eliminare solamente quelli che seleziono nella casella di
riepilogo. Per interderci Eseguo una ricerca con 10 risultati di questi 10
mi accorgo che 2 non intendo piů tenerli e voglio eliminarli o spostarli.
ciao Sthepan
Se, come mi sembra di capire la casella di riepilogo si chiama VisTitoli ed
ha tre colonne, per cancellare il record relativo alla riga della casella di
riepilogo selezionata con il mouse, a fronte dell'evento "Su clic" della
casella di riepilogo genera il seguente codice VBA:
Private Sub VisTitoli_Click()
Dim strSQL As String
strSQL = "DELETE * FROM tblArchivio " & _
"WHERE NomeFile ='" & Me!VisTitoli.Column(0) & _
"' AND Percorso ='" & Me!VisTitoli.Column(1) & _
"' AND CD ='" & Me!VisTitoli.Column(2) & "';"
DoCmd.SetWarnings False
DoCmd.RunSQL strSQL
DoCmd.SetWarnings True
Me!VisTitoli.Requery
End Sub
> Se, come mi sembra di capire la casella di riepilogo si chiama VisTitoli ed
> ha tre colonne, per cancellare il record relativo alla riga della casella di
> riepilogo selezionata con il mouse, a fronte dell'evento "Su clic" della
> casella di riepilogo genera il seguente codice VBA:
>
> Private Sub VisTitoli_Click()
> Dim strSQL As String
> strSQL = "DELETE * FROM tblArchivio " & _
> "WHERE NomeFile ='" & Me!VisTitoli.Column(0) & _
> "' AND Percorso ='" & Me!VisTitoli.Column(1) & _
> "' AND CD ='" & Me!VisTitoli.Column(2) & "';"
> DoCmd.SetWarnings False
> DoCmd.RunSQL strSQL
> DoCmd.SetWarnings True
> Me!VisTitoli.Requery
> End Sub
>
>>
Ciao Roberto,
il codice che mi hai mandato non funziona, ho provato, ma non cancella
nulla.
Forse non sarebbe meglio se io aggiungo una colonna alla casella di
Riepilogo VisTitoli , ideintificata ID, non visibile, abilitando anche la
selezione multipla. e poi far eseguire la cancellazione da un tasto?
Forse per vedere meglio i risultati si potrebbe far si che i dati vengano
solamente spostati dalla tabella tblArchivio ad una tblCestino, in modo
che qualsiasi errore sia cmq recuperabile.
Grazie per l'aiuto che mi stai dando
Ciao
Sthepan
> Se, come mi sembra di capire la casella di riepilogo si chiama VisTitoli ed
> ha tre colonne, per cancellare il record relativo alla riga della casella di
> riepilogo selezionata con il mouse, a fronte dell'evento "Su clic" della
> casella di riepilogo genera il seguente codice VBA:
>
> Private Sub VisTitoli_Click()
> Dim strSQL As String
> strSQL = "DELETE * FROM tblArchivio " & _
> "WHERE NomeFile ='" & Me!VisTitoli.Column(0) & _
> "' AND Percorso ='" & Me!VisTitoli.Column(1) & _
> "' AND CD ='" & Me!VisTitoli.Column(2) & "';"
> DoCmd.SetWarnings False
> DoCmd.RunSQL strSQL
> DoCmd.SetWarnings True
> Me!VisTitoli.Requery
> End Sub
>
Ciao ho sistemato il problema, ora funziona, solamente un dubbio mi č
rimasto visto cosě č facile eliminare un record per sbaglio, forse sarebbe
il caso di far eseguire la cancellazione da un tasto nella stessa maschera.
e cmq per evitare danni si potrebbe far si che i dati vengano
solamente spostati dalla tabella tblArchivio ad una tblCestino, in modo
che qualsiasi errore sia cmq recuperabile, sempre tramite un tasto.
che ne dici?
ciao Sthepan
Non so proprio che dirti: ho provato la soluzione che ti ho suggerito e a me
funziona egregiamente: probabilmente hai copiato male qualcosa o io nella
mia soluzione uso nomi di oggetti diversi da quelli che tu devi usare.
>
> Forse non sarebbe meglio se io aggiungo una colonna alla casella di
> Riepilogo VisTitoli , ideintificata ID, non visibile, abilitando anche la
> selezione multipla. e poi far eseguire la cancellazione da un tasto?
Certo che č meglio, cosě si semplifica la WHERE della query di
cancellazione.
Se poi devi usare anche la selezione multipla il codice VBA cambia
radicalmente ed certamente necessario far ricorso ad un pulsante di comando
per avviare la cancellazione dei record selezionati.
>
> Forse per vedere meglio i risultati si potrebbe far si che i dati vengano
> solamente spostati dalla tabella tblArchivio ad una tblCestino, in modo
> che qualsiasi errore sia cmq recuperabile.
Questo puoi deciderlo solo tu.
Se vuoi farlo devi solamente far precedere l'esecuzione della query di
cancellazione da una query di accodamento che accoda appunto i/l record
selezionato/i nella tabella tblCestino prima di cancellarli dalla tabella
tblArchivio.
>
> Grazie per l'aiuto che mi stai dando
>
> Ciao
> Sthepan
--
Quando si trova una soluzione ad un malfunzionamento è buona norma in un NG
raccontare a tutti i frequentatori cosa non funzionava e come hai rimosso il
malfunzionamento.
> solamente un dubbio mi è
> rimasto visto così è facile eliminare un record per sbaglio, forse sarebbe
> il caso di far eseguire la cancellazione da un tasto nella stessa
maschera.
Se ne senti la necessità fai pure: è sufficiente generare il codice VBA che
ti ho suggerito a fronte dell'evento "Su clic" di un pulsante di comando
invece che a fronte dell'evento "Su clic" della casella di riepilogo.
>
> e cmq per evitare danni si potrebbe far si che i dati vengano
> solamente spostati dalla tabella tblArchivio ad una tblCestino, in modo
> che qualsiasi errore sia cmq recuperabile, sempre tramite un tasto.
>
> che ne dici?
A questo problema ho già risposto nel mio messaggio in risposta al tuo
messaggio di ieri sera delle ore 20:35.
Ciao
e grazie per l'aiuto.
Dunque il problema che ho risolto era relativo alla numerazione delle
colonne, nel tuo codice non erano come nel mio, è bastato riordinare i
numeri e tutto ha funzionato.
per quanto riguarda la selezione multipla tramite codice,
io sono arrivato ad un punto morto, adattando un pezzo di codice sono
arrivato a questo punto:
Private Sub Erase_Click()
On Error GoTo Err_Erase_Click
Me!Lista = Null
Dim strLista As String
Dim strCriteri As String
Dim varItem As Variant
If Me!VisTitoli.ItemsSelected.Count = 0 Then Exit Sub
For Each varItem In Me!VisTitoli.ItemsSelected
strLista = strLista & _
Me!VisTitoli.Column(0, varItem) & ","
Me!Lista = Me!Lista & _
Me!VisTitoli.Column(1, varItem) & ", "
Next varItem
strLista = Left$(strLista, Len(strLista) - 1)
Me!Lista = Left$(Me!Lista, Len(Me!Lista) - 2)
strCriteri = "[IDFile] IN (" & strLista & ")"
Dim strSQL As String
strSQL = "DELETE * FROM tblArchivio "
però ora non riesco a continuare. Non so come far eseguire la stringa SQL
in base alla stringa Criteri.
quindi devo di nuovo chiedere aiuto.
ciao Grazie Sthepan
Prova così:
Private Sub Erase_Click()
Dim strLista As String
Dim strCriteri As String
Dim varItem As Variant
If Me!VisTitoli.ItemsSelected.Count = 0 Then Exit Sub
For Each varItem In Me!VisTitoli.ItemsSelected
strLista = strLista & _
Me!VisTitoli.Column(0, varItem) & ","
Next varItem
strLista = Left$(strLista, Len(strLista) - 1)
strCriteri = "[IDFile] IN (" & strLista & ")"
Dim strSQL As String
strSQL = "DELETE * FROM tblArchivio " & _
"WHERE " & strCriteri & ";"
DoCmd.SetWarnings False
DoCmd.RunSQL strSQL
DoCmd.SetWarnings True
End Sub
>
> ciao Grazie Sthepan
> Prova cosě:
>
> Private Sub Erase_Click()
> Dim strLista As String
> Dim strCriteri As String
> Dim varItem As Variant
> If Me!VisTitoli.ItemsSelected.Count = 0 Then Exit Sub
> For Each varItem In Me!VisTitoli.ItemsSelected
> strLista = strLista & _
> Me!VisTitoli.Column(0, varItem) & ","
> Next varItem
> strLista = Left$(strLista, Len(strLista) - 1)
> strCriteri = "[IDFile] IN (" & strLista & ")"
> Dim strSQL As String
> strSQL = "DELETE * FROM tblArchivio " & _
> "WHERE " & strCriteri & ";"
> DoCmd.SetWarnings False
> DoCmd.RunSQL strSQL
> DoCmd.SetWarnings True
> End Sub
>
>
Ciao,
ho provato, ma quando l'eseguo mi da l'errore "impossibile trovare il Campo
Lista indicato".
ciao
Sthepan
Ciao di Nuovo,
risolto il problema, mi sono dimenticato di creare una casella di testo non
visibile nella maschera che conterra l'elenco dei file da cancellare
ciao
Sthepan
Scusa se disturbo di nuovo
ho un problema con questo codice che volevo utilizzare prima di quello
sopra per copiare i record nella tbl Cestino
Dim strSQL As String
strSQL = "INSERT INTO tblCestino * FROM tblArchivio " & _
"WHERE " & strCriteri & ";"
DoCmd.SetWarnings False
DoCmd.RunSQL strSQL
DoCmd.SetWarnings True
ma mi da sempre errore di sintassi.
Dove sbaglio?
ciao Sthepan
Come indicato sull'help la sintassi dell'istruzione INSERT INTO che devi
usare è il seguente:
INSERT INTO destinazione [(campo1[, campo2[, ...]])]
SELECT [origine.]campo1[, campo2[, ...]
FROM espressionetabella
Insomma, prima della FROM devi scrivere la SELECT.
Non ti scrivo la strSQL in quanto non conosco in dettaglio la struttura
delle due tabelle.
>
> ciao Sthepan