Newsgroup: it.comp.appl.access
Titolo: Salvare record via codice

Scusate, ma ho un problema con il codice che gestisce i CV.
In pratica sia quando aggiungo un CV sia quando lo elimino Access mi
avverte che un altro utente ha modificato il record corrente e mi
chiede cosa fare. Vorrei evitare questo.
CODICE PER AGGIUNGERE CV
Private Sub cmdAggiungiCV_Click()
Dim strAttach As Variant
Dim rif As Variant
rif = [Forms]![frmSchedaPrimoContatto]![id]
    strAttach = cmdlg_file("C:\", "All files (*.*)" & Chr(0) & "*.*" &
Chr(0))
    Me!subCurriculumLink.Value = strAttach
    ccCVAllegato = 0
    DoCmd.RunSQL "UPDATE tblUtenti SET CurriculumLink = strAttach WHERE
idUtente = " & rif
    Me!subCurriculumLink.Requery
    Me.Requery
End Sub
CODICE PER ELIMINARE CV
Private Sub cmdEliminaCurriculum_Click()
Dim strAttach As Variant
Dim rif As Variant
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("tblUtenti")
rif = [Forms]![frmSchedaPrimoContatto]![id]
If (Me!subCurriculumLink <> "VUOTO") Then
    If MsgBox("Sei sicuro di voler eliminare il CV di " &
UCase([Forms]![frmSchedaPrimoContatto]![Nome] & " " &
[Forms]![frmSchedaPrimoContatto]![Cognome]) & " ?", vbQuestion +
vbYesNo, "Eliminazione Curriculum") = vbYes Then
        rst.Edit
        DoCmd.RunSQL "UPDATE tblUtenti SET CurriculumLink = ""VUOTO""
WHERE idUtente = " & rif
        rst.Update
        rst.Close
        Me!subCurriculumLink.Requery
        Me.Requery
        MsgBox "CV eliminato", vbInformation, "Eliminazione Curriculum"
    End If
Else
    MsgBox "Nessun CV per l'utente corrente", vbInformation,
"Eliminazione Curriculum"
    Exit Sub
End If
End Sub
dove subCurriculumLink è il controllo nascosto che contiene il
percorso del CV.
Pensavo che la clausola UPDATE salvasse automaticamente il record.
In questo caso il codice che ELIMINA il CV mi genera un errore di
conversione dei dati...e Access mi chiede se intendo ignorare l'errore
ed eseguire lo stesso la query.
Dove potrebbe stare l'errore?
Grazie.


non ci azzecca nulla con questa tua domanda (che non ho neanche letto)
Tuo problema su inserimento del tellefono:
Quando lo valorizzi idUtente?
Fai queste variazioni:
1) su form scheda primo contatto
Private Sub OpenChildForm()
DoCmd.OpenForm formname:="frmTblTelefono",openargs:=Me!idUtente
End Sub
inoltre il filtro che fai a parte puoi anche risparmiartelo se fai:
DoCmd.OpenForm 
FormName:="frmTblTelefono",Openargs:=Me!idUtente,WhereCondition:="idUtente=" 
& me!idutente
2) su form del telefono aggiungi questo evento:
Private Sub Form_BeforeInsert(Cancel As Integer)
idUtente = OpenArgs
End Sub
ora non ho molto tempo. In serata ti guardo l'altra cosa
--
a.cara

ed eseguire lo stesso la query.
Il codice è "incasinato" di brutto...oltre a postarlo dovresti spiegare 
quello che vuoi ottenere...che significa
DoCmd.RunSQL "UPDATE tblUtenti SET CurriculumLink = ""VUOTO""
WHERE idUtente = " & rif ?
Aggiorna la tabella utenti dove CurriculumLink ha il valore "VUOTO" e 
idutente = valore restituito da rif...che significa?
Prima "esterna" quello che vuoi fare e poi posta il codice che non va...
Se devi cancellare perchè non usi  delete?
rs.Delete
Così perdi tempo e spendi soldi "inutilmente" -> CREDIMI
Gaspare 

Grazie tantissimissimeeeeeeeeeeeeeeeeeeee :))))))))

Ciao Gaspy, io non devo cancellare il record, devo solo AGGIORNARLO.
Ovvero con quei due pulsanti devo aggiornare il campo CurriculumLink
del record corrente.
Con AggiungiCV aggiorno nel senso che nel campo ci metto la stringa che
raapresenta il percorso del CV su disco, con ELIMINA CV ri-aggiorno il
campo CurriculumLink con la stringa "VUOTO".
Quindi Access giustamente si incazza perchè dice 'Oi, guarda che
qualcun'altro ha modificato il record che tu hai aperto, pirlone!! che
vogliamo fare?! lo salviamo, annulliamo!?! o ce ne andiamo al mare?'
Il bello è che io penso che la clausola UPDATE aggiorni il record
grazie alla direttiva SET e che i vari .Edit .Update dell'oggetto rst
aggiornino il recordset da soli.
Solo che non è così...boh!
Cmq ricapitolando:
1. visualizzo il record corrente
2. aggiungo un cv all'utente ---> aggiorno valore del campo
CurriculumLink della tabella tblUtenti alla stringa che contiene il
percorso del cv su disco---->aggiorno recordset
3. elimino il cv dell'utente--->aggiorno il campo CurriculumLink della
tabella tblUtenti alla stringa "VUOTO" (perchè non so come si fa a
passare una stringa vuota "")--->aggiorno recordset.
Questo è quello che dovrei fare....
Grazie :)

Per Alessandro Cara: ti ringrazio tantissimo, davvero!!!!! Funziona
alla perfezione!
Domandona da un miliardo di sterline inglesi: ma perchè nell'esempio
di Napoleone, invece, funzionava?
Se vuoi stasera ti passo il suo db d'esempio. Ho bisogno di capire.
E scusa se abuso della tua disponibilità ma ho bisogno di capire :)
Grazie!!!!

[CUT]
Hai sempre la scadenza di fine mese per il lavoro?

Ciao Ale, una domanda: ma se il record non esiste ancora e lo sto
aggiungendo proprio in questo momento ho un errore.
Infatti io apro la maschera AggiungiTelefono anche da
frmAggiungiUtente. In quel momento, però, ancora non esiste un record
correlato in tblUtenti - esisterà solo nel momento in cui, uscendo,
cliccherò su SI, salva i dati - perciò OpenArgs restituisce un valore
nullo.
Come posso bypassare questo problema?
Grazie!

 Hai sempre la scadenza di fine mese per il lavoro?
NOTA: Google, per ora, ha detto basta. Posto da Newsland.
Gaspy: si, purtroppo. Stanotte ho fatto le 4.30 per capire il codice di
Napoleone e per aggiustare in modo 'decente' quello dei CV (che per'altro
funziona makle). Sveglia alle 6.30 sono rintronato perso.
-- 
Non avere mai pura dei momenti bui perchè, facci caso, anche le stelle
hanno bisogno della notte per brillare.
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

P.S. Ho aggiunto anche una tblEmail....praticamente più email per ogni
singolo utente. Ora devo riprogettare l'invio delle email. Non più da
un pulsante ma dalle mascherine che si apromo.
Ale se ti interessa posso mandarti il database corrente con queste
aggiunte :)
EDIT: per il problema del record inesistente provo a spiegarmi un
pelino meglio.
1. voglio aggiungere un nuovo utente: apro frmAggiungiUtente. In questo
momento l'idUtente corrente è NULL
2. inserisco il primo carattere nel primo campo; in questo momento
idUtente ha il valore Me!idUtente
3. vado ad inserire i numeri telefonici; errore: pur esistendo il nuovo
record, questi non è stato ancora salvato nella tabella perciò
l'integrità referenziale mi vieta di poter inserire i dati. Stessa
cosa per le email.
4. solo dopo aver salvato il record posso aggiungere i telefoni e/o le
email, ma a questo punto non sono più in formAggiungiUtente ma in
frmSchedaPrimoContatto.
Quindi che fare? Togliere la possibilità di aggiungere numeri
telefonici e email in fase di creazione dell'utente, delegando questa
operazione alla maschera frmAggiungiUtente? O fare in modo che in fase
di creazione dell'utente l'integrità referenziale non blocchi
l'aggiunta di nuovi record?
Posto qui il codice interessante:
Private Sub cmdApriEmail_Click()
If Not IsNull(Me!id) Then
    MsgBox "IDUtente = " & Me!id, vbInformation, "Informazione di
debug"
    DoCmd.OpenForm FormName:="frmTblEmail", OpenArgs:=Me!id,
WhereCondition:="idUtente= " & Me!id
Else
    MsgBox "   Stai cercando di aggiungere un valore ad un record
inesistente" & Chr(10) & Chr(13) & Chr(10) & Chr(13) & "
            ( idUtente = NULL )  ", vbCritical, "ERRORE"
    Exit Sub
End If
End Sub
Private Sub cmdApriTelefoni_Click()
If Not IsNull(Me!id) Then
    MsgBox "IDUtente = " & Me!id, vbInformation, "Informazione di
debug"
    DoCmd.OpenForm FormName:="frmTblTelefono", OpenArgs:=Me!id,
WhereCondition:="idUtente= " & Me!id
Else
    MsgBox "   Stai cercando di aggiungere un valore ad un record
inesistente" & Chr(10) & Chr(13) & Chr(10) & Chr(13) & "
            ( idUtente = NULL )  ", vbCritical, "ERRORE"
    Exit Sub
End If
End Sub
e sull'evento Current() delle due form:
idUtente = OpenArgs
A presto!!!!

 
inserendo l'utente in precedenza.
Ho aperto la maschera nuovo utente e non trovo il modo
di aggiungere i dati telefonici.
cmq. se funzionasse come l'altra devi prima procedere all'inserimento
dell'utente (eseguire il salvataggio del record  corrente cfr acsaverecord)
--
a.cara

 Dove potrebbe stare l'errore?
Private Sub cmdAggiungiCV_Click()
Dim strAttach As Variant
Dim rif As Variant
rif = [Forms]![frmSchedaPrimoContatto]![id]
     strAttach = cmdlg_file("C:\", "All files (*.*)" & Chr(0) & "*.*" & 
Chr(0))
     If strAttach <> "" Then
         Me!subCurriculumLink.Value = strAttach
         DoCmd.RunSQL "UPDATE tblUtenti SET CurriculumLink ='" & 
strAttach & "' WHERE idUtente = " & rif
         Me!subCurriculumLink.Requery
     End If
End Sub
------------
Variazione:
1) ho aggiunto la if per tener conto dell'annullamento del commondialog
2) strattach e' una variabile quindi la update non andava bene
    (solito problema)
Private Sub cmdEliminaCurriculum_Click()
Dim strAttach As Variant
Dim rif As Variant
rif = [Forms]![frmSchedaPrimoContatto]![id]
If (Me!subCurriculumLink <> "VUOTO") Then
     If MsgBox("Sei sicuro di voler eliminare il CV di " & 
UCase([Forms]![frmSchedaPrimoContatto]![Nome] & " " & 
[Forms]![frmSchedaPrimoContatto]![Cognome]) & " ?", vbQuestion + 
vbYesNo, "Eliminazione Curriculum") = vbYes Then
         DoCmd.RunSQL "UPDATE tblUtenti SET CurriculumLink = '' WHERE 
idUtente = " & rif
         Me!subCurriculumLink.Requery
         Me.Requery
         MsgBox "CV eliminato", vbInformation, "Eliminazione Curriculum"
         Me.cmdAnteprimaCV.HyperlinkAddress = ""
         End If
Else
     MsgBox "Nessun CV per l'utente corrente", vbInformation, 
"Eliminazione Curriculum"
     Exit Sub
End If
End Sub
---
variazione:
1) ho messo a "" il CurriculumLink (si puo' fare anche CurriculumLink = null
2) ho ripulito l'hyperlinkaddress.
E la notte dormi altrimenti fai tanti di quei casini che il giorno dopo 
non bastano tutte le risorse del NG (intendo dire gli operatori 
umanitari) per rimetterli a posto ;<)
--
a.cara

 
[cut]
P.S. Non personalizzare i post hai un intero NG a tua disposizione
--
a.cara

 E la notte dormi
Sante parole!!!! 

Okkei, spero di copia-incollare per bene la sintassi...Google è una
caciara!
Cmq grazie siete stati veramente gentili :)

Ah una cosa....all'interno della stringa SQL hai usato '' ovvero il
simbolo sotto il punto interrogativo?
Non si capisce da qui..... :D


si, sono 2 apici
--
a.cara

Ale, ma perchè ora non funziona più? :(

 
Giulio, per favore, le domande *private*, visto che la mia email la hai, 
falle in privato. Come ho gia' scritto in altro post, nuovamente per 
favore, non personalizzare le richieste.
Come detto prima, se devi fare questo, scrivi sulla mia email privata.
--
a.cara

Alessandro Cara wrote:
P.S.
e poi .....non funziona piu' che?
--
a.cara


Si vede che vuole portare fuori il vosto amore e soprattutto la sua
defaillance.
Oh sta moda dell'outing...
-- 
_ _
Ciao
MAssimiliano Amendola            
www.accessgroup.it
Cisa - Conferenza Italiana per Sviluppatori Access
Info:  
www.donkarl.com/it

Ma io non voglio rompere via email, cmq okkei.... in email poi la
soluzione sul ng. Penso sia la cosa più giusta.

Email mandata. Grazie :)