Newsgroup: it.comp.appl.access
Titolo: accodare record selezionato da casella riepilogo

Ciao ragazzi vorrei saper come faccio ad accodare alla tabella pippo il 
record che io seleziono in una casella di riepilogo che ha tre colonne 
contenenti i campi A - B - C

Ciao a tutti, per accodare un record selezionato in una casella di 
riepilogo ho scritto:
Private Sub elenco_arredi_KeyDown(KeyCode As Integer, Shift As Integer)
Dim richiesta As String
Dim contatore As Integer
Dim cod_meccanografico As String
Dim descrizione As String
Dim unità_misura As String
Dim prezzo As Integer
Dim anno As Integer
Dim sql As String
contatore = elenco_arredi.Column(0)
cod_meccanografico = elenco_arredi.Column(1)
descrizione = elenco_arredi.Column(2)
unità_misura = elenco_arredi.Column(3)
prezzo = elenco_arredi.Column(4)
Bari = elenco_arredi.Column(5)
Taranto = elenco_arredi.Column(6)
Totale = elenco_arredi.Column(7)
anno = elenco_arredi.Column(8)
If Me.elenco_arredi.ItemsSelected.Count = 0 Then
	MsgBox "Non hai selezionato alcun arredo." & vbCrLf & "Seleziona 
almeno un arredo prima di procedere.", vbExclamation, "Seleziona 	arredo"
Exit Sub
Else
     If KeyCode = vbKeyA Then
         richiesta = MsgBox("Attenzione stai per archiviare un articolo" 
& vbCrLf & "sei davvero sicuro di voler procedere?", vbQuestion + 
vbYesNo, "Richiesta archiviazione")
         Select Case richiesta
         Case vbYes
             riferimento_meccanografico = Me.elenco_arredi.Column(1)
             sql = "INSERT INTO archivio_arredi ( contatore, 
meccanografico, descrizione, unità_misura, prezzo, Bari, Taranto, 
Totale, anno )" & _
             "VALUES (""" & contatore & """,""" & cod_meccanografico & 
""", """ & descrizione & """,""" & unità_misura & """,""" & prezzo & 
""", """ & anno & """)" & _
             "WHERE meccanografico= (""" & riferimento_meccanografico & 
""");"
             CurrentDb.Execute sql
             MsgBox "L'articolo con codice meccanografico " & 
riferimento_meccanografico & vbCrLf & "è stato regolarmente 
archiviato!", vbInformation, "Esito archiviazione"
             Me.Testo35.Value = ""
             Me.Testo40.Value = ""
             Me.Testo92.Value = ""
             Me.elenco_arredi.Requery
             Me.Testo35.SetFocus
         Case vbNo
             Exit Sub
         End Select
     End If
End If
End Sub
il codice purtroppo mi da un errore dove sbaglio?
e soprattutto è giusta la clausola WHERE per dire di accodare solo e 
soltanto il record selezionato?


In quale riga si ferma l'esecuzione?
La stringa l'ho modificata in:
sql = "INSERT INTO archivio_arredi ( contatore, meccanografico, descrizione, 
unità_misura, prezzo, Bari, Taranto, Totale, anno )" & _
"VALUES (" & contatore & "," & cod_meccanografico &", " & chr(34) & 
descrizione & chr(34) & ",'" & unità_misura & "'," & prezzo & ", " & anno & 
")" & _
"WHERE meccanografico= (" & riferimento_meccanografico & ");"
Se contatore/cod_meccanografico/prezzo/anno/riferimento_meccanografico sono 
numerici.
Prova a sostituire il metodo Execute con RunSQL;
es.
DoCmd.RunSQL sql
Ciao.
-- 
Sergio MAZZA 

Sergio MAZZA ha scritto:

Ho applicato le correzzioni che mi hai suggerito ma mi da sempre errore 
di run-time  operatore mancante nell'espressione...
forese il problema è nella clausola WHERE che non avrò scritto bene
comunque contatore, prezzo, anno sono integer, metre meccanografico e 
riferimento meccanografico sono string

 riferimento meccanografico sono string
sql = "INSERT INTO archivio_arredi ( contatore, meccanografico, descrizione,
unità_misura, prezzo, Bari, Taranto, Totale, anno )" & _
"VALUES (" & contatore & ",'" & cod_meccanografico & "', " & chr(34) &
descrizione & chr(34) & ",'" & unità_misura & "'," & prezzo & ", " & anno &
")" & _
"WHERE meccanografico= ('" & riferimento_meccanografico & "');"
Veramente i campi interessati sono:
- contatore (numerico);
- meccanografico (testo);
- descrizione (testo) [suggerimento] Cambiagli nome perché "descrizione" 
corrisponde ad un termine utilizzato da Access;
- unità_misura (?);
- prezzo (numerico);
- Bari (?);
- Taranto (?);
- Totale (numerico);
- anno (?).
Questi sono i campi di tabella, ad ogni campo e sua tipologia (se numerico o 
testo) devi associargli dei valori che devono per forza essere della stessa 
natura (numerico o testo).
Fai prima l'elenco dei campi indicando se numerico o testo, vedrai che 
l'errore non è nella condizione WHERE ma nel VALUES...
Ciao.
-- 
Sergio MAZZA 



ciao 
se tu ti leggi il post "Eliminare record da una casella di riepilogo" del
27 dicembre  trovi il codice per creare i criteri per poi accodare li si
sta discutendo anche su come farlo
ciao Sthepan

 Ciao.
Ciao io per fare la stessa cosa stavo provando questo:
Basta creare nella form una casella di testo non visibile con etichetta
"Lista" 
e avere il campo IDnome nella prima colonna della casella di riepilogo
anche questa 
puo essere non visibile.
 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 = "INSERT INTO tblCestino * FROM tblArchivio " & _
                    "WHERE " & strCriteri & ";"
 DoCmd.SetWarnings False
 DoCmd.RunSQL strSQL
 DoCmd.SetWarnings True
 End Sub
L'unico problema è che probabilmente ho sbagliato qualcosa in questa parte
 strSQL = "INSERT INTO tblCestino * FROM tblArchivio " & _
                    "WHERE " & strCriteri & ";"
che ne pensate?
ciao Sthepan 


Bisognerebbe vedere cosa c'è nella variabile strLista; fai una cosa 
visualizza in debug il contenuto della variabile strSQL e inviala all'NG.
Ciao.
-- 
Sergio MAZZA 



ciao e scumasami ma non so come si fa.
Se me lo spieghi lo faccio subito
ciao Sthepan

 ciao Sthepan
Clicchi a sinistra dell'istruzione dove vuoi interrompere l'esecuzione, si 
visualizza un pallino rosso. Quando esegui la form e il codice, arrivati al 
"punto rosso" si apre la finestra del codice e ti visualizza in giallo 
l'istruzione messa in pausa; a questo punto puoi andare avanti passo passo 
con F8 (menů Debug - Esegui istruzione) o riprendere l'esecuzione con F5.
Se non ce l'hai visibile, in menů Visualizza - finestra immediata, la apri e 
dentro ci scrivi:
? strSQl (e premi invio)
sotto vedi il valore della variabile, puoi selezionarlo/copiarlo/incollarlo 
in un messaggio.
(nota) il punto interrogativo č il vecchio Print del basic.
Ciao.
-- 
Sergio MAZZA 

 Ciao.
Ciao ecco il risultato
? strSQL
INSERT INTO tblCestino * FROM tblArchivio WHERE [IDFile] IN (25503);
la stessa procedura solo con una stringa SQL di delete la uso per
cancellare i record da casella di riepilogo e quella funzina perfettamente.
ciao Sthepan

 ciao Sthepan
Prova così:
strSQL="INSERT INTO tblCestino SELECT tblArchivio.* FROM tblArchivio " & _
"WHERE " & strCriteri & ";"
Ciao.
-- 
Sergio MAZZA 

 Ciao.
Ciao Ok Perfetto 
ora va tutto posto il codice per intero così come io lo utilizzo per
spostare i record prima e cancellarli poi
_________________
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)
 
    'Criteri di selezione
 
    strCriteri = "[IDFile] IN (" & strLista & ")"
 
    'Copia i file nella tblCestino
 
    Dim strSQL As String
 
   strSQL = "INSERT INTO tblCestino SELECT tblArchivio.* FROM tblArchivio "
& _
"WHERE " & strCriteri & ";"
    DoCmd.SetWarnings False
    DoCmd.RunSQL strSQL
    DoCmd.SetWarnings True
 
    'Cancella il record filtrando sui
    'Files selezionati in base ai criteri di selezione
 
    Dim strSQL1 As String
 
    strSQL1 = "DELETE * FROM tblArchivio " & _
                        "WHERE " & strCriteri & ";"
 
    DoCmd.SetWarnings False
    DoCmd.RunSQL strSQL1
    DoCmd.SetWarnings True
    Me!VisTitoli.Requery
 
    'Deseleziona tutte le righe della casella di riepilogo
 
    Dim Cont As Integer
    For Cont = 0 To Me!VisTitoli.ListCount - 1
        Me!VisTitoli.Selected(Cont) = False
    Next Cont
 
Exit_Erase_Click:
    Exit Sub
Err_Erase_Click:
    MsgBox Err.Description
    Resume Exit_Erase_Click
End Sub
_____________________
ci sono due cose da ricordare:
1 bisogna creare nella form una casella di testo non visibile con etichetta    
  Lista 
2 io ho abilitato nelle proprietà della casella di riepilogo la selezione 
  multipla
ciao Sthepan