Private Sub cmdElimina_Click()
On Error GoTo Err_cmdElimina_Click
intScelta = MsgBox("Sei sicuro di voler eliminare questo record?", vbYesNo)
If intScelta = vbNo Then
MsgBox "Operazione annullata", vbInformation
Exit Sub
Else
Me.AllowEdits = True
DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70
Me.AllowEdits = False
Me.AllowAdditions = False
cmdNuovo.Enabled = True
cmdModifica.Enabled = True
cmdSalva.Enabled = False
Me.Requery
If Me.CurrentRecord = 0 Then
Me.AllowAdditions = True
Me.AllowEdits = True
cmdSalva.Enabled = False
Else
Exit Sub
Exit_cmdElimina_Click:
Exit Sub
Err_cmdElimina_Click:
MsgBox Err.Description
Resume Exit_cmdElimina_Click
End If
End If
End Sub
geniale!!!
sei riuscito a eliminare la scritta "oggetto senza nome"?
Ciao, Carlo
>
Fai una cosa crea una query di eliminazione che abbia nei criteri il valore
del record selezionato, le esegui e fai un requery del recordset.
Il codice diventa:
Private Sub cmdElimina_Click()
Dim intScelta As Integer
intScelta = MsgBox("Sei sicuro di voler eliminare questo record?", vbYesNo)
If intScelta = 6 Then
DoCmd.SetWarnings False
DoCmd.OpenQuery "MiaQueryDiEliminazione"
DoCmd.SetWarnings True
Else
MsgBox "Operazione annullata", vbInformation
end if
end sub
Ciao, Carlo
Ci sono situazioni diversi con questo problema.
p.e. forse si tratta di un nuovo record che non è ancora salvato.
Prova se puoi cancelare il record a mano con la tastatura.
Un altra possibilità:
Hai scritto codice come
>Me.AllowEdits = True
ecc.
Sei siccuro che la proprietà AllowDeletions è True nel momento?
--
HTH
Karl
*********
Access-FAQ (tedesco): http://www.donkarl.com
?
Prendi la tastiera e piantala verso la posizione del record
al monitore.
Ok, forse è colpa del mio italiano perché vedo che lo strumento
si chiama "tastiera". Allora provo un'altra volta con una
descrizione da un libro italiano per A97:
*****
A questo scopo, fate clic sul quadratino grigio a sinistra del
record (l'area di selezione del record).
Eseguite una delle seguente operazioni:
- fate clic sul pulsante "Elimina record" sulla barra degli strumenti
- premete il tasto CANC sulla tastiera
- selezionate "Modifica", "Elimina"
- selezionate "Modifica", "Elimina Record"
*****
Se nessuno di questi metodi funzione non è la colpa del codice
ma della situazione del record, del recordset o della maschera.
Se con "debug" intendi esecuzione passo passo forse
si tratta di un problema del timing. p.e. forse una delle
proprietà nel esecuzione non ha ancora o non ha più il valore
che bisogna nel momento quando il codice prova ad eliminare
il record.
Prova a mettere tutte le proprietà della maschera a un valore
che rende possibile l'eliminazione. Nel codice fai niente che il
Runcommand per l'eliminazione. Se funzione prova di mettere
la prima proprietà a un valore critico e cambia il valore nel
codice, esegui il codice ecc.
E' una forma arcaica che non si usa più, che viene però ancora usata nelle
autocomposizioni di Access.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------
io avere sembre faddo cosi', mai avuto rogne
form.recordsetclone.bookmark = form.bookmark
form.recordsetclone.delete
e mango faccio la requery e dudde quelle altre brudde cose.
Mia roudine essere un poco piu' gomplessa berche' buo' gangellare
moldi record.
Io essere barecchio ignorande ma quando stai in debug i menu's
sono gli sdessi di guando non stai in debug?
--
a.cara
Togli qualcosa dall'email
a dire la verità ho cercato quale autocomposizione o trasformazione di macro
in VBA potesse averla generata, ma non sono riuscito a trovarla...
ZAO
di leggere i post di roberto e il mio
> Private Sub cmdElimina_Click()
> On Error GoTo Err_cmdElimina_Click
si, decisamnete
> DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
questa istruzione significa: esegui il comado "Elimina della barra dei
menu", non è il modo corretto di eliminare un record, potresti, invece,
usare:
If Me.Recordset.AbsolutePosition <> -1 Then Me.Recordset.Delete
> DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70
questa istruzione significa: esegui il comado "Incolla come collegamento
iperetstuale", che non ho capito bene a cosa serva
mi fermo qui
ciao
Non so di dove hai queste idee ma non hai ragione.
Le 2 istruzioni sono giusti per selezionare e eliminare un record.
Certo da anni è meglio di usare
RunCommand acCmdDeleteRecord
perchè è più leggibile e anche funzione se la maschera è un Popup.
--
cu
In Access 97 Autocomposizione Pulsante di comando; Categoria: Operazioni su
Record; Azioni: Elimina record.
forse giusti non è la parola giusta in quanto (copincolla da guida):
<copincolla>
Nota In Microsoft Access 97 il metodo DoMenuItem era stato sostituito con
il metodo RunCommand. Il metodo DoMenuItem è incluso in questa versione di
Microsoft Access solo per compatibilità con le versioni precedenti. Quando
viene eseguito un codice Visual Basic esistente che contiene il metodo
DoMenuItem, Microsoft Access visualizza il comando del menu o della barra
degli strumenti appropriato per Microsoft Access 2000. Diversamente
dall'azione EseguiVoceMenu in una macro, tuttavia, il metodo DoMenuItem nel
codice di Visual Basic non viene convertito nel metodo RunCommand quando
viene convertito un database creato con una versione precedente di Microsoft
Access.
Alcuni comandi delle versioni precedenti di Microsoft Access non sono
disponibili in Microsoft Access 2000 e i metodi DoMenuItem che eseguono
questi comandi causano un errore quando vengono eseguiti in Visual Basic. È
necessario modificare il codice di Visual Basic per sostituire o eliminare
le occorrenze di questi metodi DoMenuItem.
</copincolla>
Beh, e cosa vuoi dire con questo testo che conosciamo da anni?
Che cosa ha da fare con il problema di Guiseppe o con la tua
interpratezione strana delle 2 MenuItems?
--
?
Dato che le autocomposizioni vengono scritte da "programmatori" potrei
anche concordare con te...
--
Ciao :-)
Maurizio
--------
?SPQR(C)
X
--------
niente
Finalmente funziona!
Grande Ale.
Grazie Buana!
>
> > DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
>
> questa istruzione significa: esegui il comado "Elimina della barra dei
> menu", non č il modo corretto di eliminare un record, potresti, invece,
> usare:
>
> If Me.Recordset.AbsolutePosition <> -1 Then Me.Recordset.Delete
>
>
> > DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70
>
> questa istruzione significa: esegui il comado "Incolla come collegamento
> iperetstuale", che non ho capito bene a cosa serva
>
> mi fermo qui
> ciao
>
Non uso macro.Il codice che vedi l'ho fatto creando un pulsante elimina
record con il wizard
e poi gli ho aggiunto il codice per confermare l'eliminazione.Prometto di
non farlo mai piů.
Cmq ho risolto con l'e-mail di Alessandro Cara.Il problema era cmq perchč
funziona solo
in debug.
Grazie delle spiegazioni che sono sempre molto utili.
Giuseppe.
Sono poco esperto nell'uso del domenuitem (non mi piace il meccanismo)
Nella mia e-mail dicevo se eri sicuro della presenza sui menu' delle
voci che richiamavi. Se non ho capito male il domenuitem fa eseguire
il comando che c'e' sulla voce richiamata. Se la voce richiamata
non e' presente sul menu' che succede?
La cosa strana e' che non ti funziona il comando suggerito da Karl.
Sul Menu esistono queste voci infatti Karl mi aveva consigliato di provare
a farlo dal menu e cosě funzionava.Un ultima cosa che non ho ben capito
dalla tua e-mail.Il codice che mi hai scritto cancella il record corrente e
mi
sembra vada sul primo record automaticamente.Ma cancella il solo record
corrente vero?
Ciao
Giuseppe
si, cancella solo il record corrente (Almeno dovrebbe). Come dicevo
nella mia email fa parte di una routine piu' complessa che consente
di cancellare n record selezionati. Se ti interessa questa "feature"
fammelo sapere, se non mi ricordo male quella routine riposiziona anche
il recordset
>
> si, cancella solo il record corrente (Almeno dovrebbe). Come dicevo
> nella mia email fa parte di una routine piu' complessa che consente
> di cancellare n record selezionati. Se ti interessa questa "feature"
> fammelo sapere, se non mi ricordo male quella routine riposiziona anche
> il recordset
>
Mi interesserebbe parecchio sia per cultura personale che praticamente
avendo come avrai notato dal
passaggio del codice
If Me.CurrentRecord = 0 Then
la necessità di capire dove ci si trova nel recordset in quanto la frm in
questione lavora anche con
una routine del tipo
Sub ControllaRecord()
Dim intNum As Integer
intNum = Me.RecordsetClone.RecordCount
If intNum < 1 Then
Me.AllowAdditions = True
Me.AllowEdits = True
cmdSalva.Enabled = True
Else
Exit Sub
End If
End Sub
Ciao
Giuseppe
cmq questa e' la routine che uso per cancellare piu' record
"selezionati"
' la proprieta' selheight contiene il numero di righe selezionate.
' Attenzione va salvata in uscita da un subform perche' e' volatile
NumRighe = Frm.Form.SelHeight
If NumRighe = 0 Then NumRighe = 1
Set rst = Frm.Form.RecordsetClone
' allinea il recordsetclone con il form per ricordarsi dove era
rst.Bookmark = Frm.Form.Bookmark
' vabbe' qui ho una gestione degli errori "personalizzata" che manda un
' messaggio che suona "sta in campana stai per eliminare nnnnn record"
If objAppl.LoadMsg("UTN0133Q", CStr(NumRighe)) = 2 Then
rst.MoveFirst
' la proprieta' seltop "racconta" qual'e' il primo record selezionato,
mi muovo
' sul record ed elimino il numero di record selezionati
rst.Move Frm.Form.SelTop - 1
For i = 1 To NumRighe
rst.Delete
' qui testo il fine file (questo succede quando selezionano per la
cancellazione
' anche l'ultimo record)
If Not rst.EOF Then rst.MoveNext
Next
' questa ripristina il puntamento del form
Frm.Form.Bookmark = rst.Bookmark
Else
Exit Sub
End If
[CUT]
> > If Me.CurrentRecord = 0 Then
> io questo non lo farei ma testerei le proprieta' EOF e/o BOF anche
> perche'
> se non stai attento rischi di beccarti l'errore "no current record"
..azzo l'ho fatto apposta per intercettare questo errore.lo cambio subito.
> ' la proprieta' selheight contiene il numero di righe selezionate.
> ' Attenzione va salvata in uscita da un subform perche' e' volatile
> NumRighe = Frm.Form.SelHeight
Questa la posso mettere in testa al codice cosě non me la perdo.
Grazie Alessandro non avevo mai osato affrontare il problema di cancellare
piů record
contemporaneamente.non hai idea di che regalo mi hai fatto.
P.S. perchč non scrivi un lavoretto da mandare sul sito tipo "Come si
cancella uno o piů
record".Spero che non faccia la fine del mio sul controllo calendario.
Ciao
Giuseppe