Newsgroup: it.comp.appl.access
Titolo: if errato

Sono in crisi... c'è un errore in questo codice...
L'intento sarebbe: se la voce che c'è scritta in txtID_ADDETTO esite
nella tabella ADDETTI (mi sono già preoccupato che mi vada a pescare
nella tabella ADDETTI tramite una stringa SQL)
allora mi devi aggiornare il racord con le varie modifiche; altrimenti
se la voce non c'è mi fai l'aggiunta del record.
If Me.txtID_ADDETTO = rst("ID ADDETTO") Then
        rst.Edit
        rst("ID ADDETTO") = Me.txtID_ADDETTO
        rst("NOME") = Me.txtNOME
        rst("COGNOME") = Me.txtCOGNOME
        rst("COMPETENZE") = Me.comCOMPETENZE
        rst("APPARTENENZA") = Me.comAPPARTENENZA
        rst("COSTO ORARIO") = Me.txtCOSTO_ORARIO
        rst.Update
    Else
        rst.AddNew
        rst("ID ADDETTO") = Me.txtID_ADDETTO
        rst("NOME") = Me.txtNOME
        rst("COGNOME") = Me.txtCOGNOME
        rst("COMPETENZE") = Me.comCOMPETENZE
        rst("APPARTENENZA") = Me.comAPPARTENENZA
        rst("COSTO ORARIO") = Me.txtCOSTO_ORARIO
        rst.Update
    End If
Facendo il Debug mi dice che l'errore è in rst.Update come se non
guardasse la condizione. L'errore avviene solo nel caso in cui si debba
fare modifiche, se devo aggiungere il campo non mi dà errore...
Mi potete aiutare?? Spero di essere stato chairo
Grazie

Raptor ha scritto:

rst.Update la puoi mettere fuori dal controllo.... vedi che viene
eseguita in entrambi i casi...?
Parli di Recordset ADO o DAO in ogni caso...?
Io sospetto che l'errore sia il tentativo di modificare la PK:
rst("ID ADDETTO") = Me.txtID_ADDETTO
In caso di EDIT togli quella riga.... la PK non DEVE essere toccata.
@Alex

non funziona.... il tipo di recordset credo sia dao ma non ne sono
sicuro.. come faccio a capirlo??

Per informazione quando faccio il Debug continua a darmi errore su
rst.Upadate
Grazie mille

 sicuro.. come faccio a capirlo??
Prima di buttarsi è sempre bene studiare qualcosa, se non altro per
capire di
cosa si parla........
Lo vedi dai Riferimenti, ma se non li hai toccati è probabilmente
ADO.... nel caso non serve EDIT.
La cosa deve andare togliendo l'assegnazione della PrimaryKey....
Di più non saprei che dire.
@Alex

in effetti hai ragione.. ma io sono in fase di apprendimento.. sono uno
stagista e mi hanno messo a fare un db per la manutenzione e devo
costruirci delle maschere per la navigazione... molte cose non le
conosco e mi faccio aiutare... sia da persone gentilissime come te sia
dai miei tutor...
Cerco di fare da me il più possibile ma alcune cose non le so
proprio...
Provo a riguardalo un po'... cosa vorresti dire non mi serve edit??

ho guardato.. tra i riferimenti ho spuntato:
- Visual Basic For Application;
- Microsoft Access 9.0 Object Library;
- OLE Automation:
- Microsoft Visual Basic for Application Extensibility 5.3;
- Microsoft DAO 3.6 Object Library;
- Microsoft Calendar Control 9.0
Viene in mente niente???
Grazie ancora

 - Microsoft Calendar Control 9.0
Il codice e' per DAO ed e' corretto.
Il problema secondo me sta nella "sincronizzazione" di rst
cosa c'e' prima delle istruzioni che hai riportato?
Dove lo cerchi Me.txtID_ADDETTO?
La update ti va in errore perche' Me.txtID_ADDETTO  esiste
il codice lo semplificherei in:
If Me.txtID_ADDETTO = rst("ID ADDETTO") Then
         rst.Edit
     Else
         rst.AddNew
end if
rst("ID ADDETTO") = Me.txtID_ADDETTO
rst("NOME") =  Me.txtNOME
rst("COGNOME") =  Me.txtCOGNOME
rst("COMPETENZE") = Me.comCOMPETENZE
rst("APPARTENENZA") = Me.comAPPARTENENZA
rst("COSTO ORARIO") = Me.txtCOSTO_ORARIO
rst.Update
Spero tu abbia controllato che tutti gli attributi che devono essere 
valorizzati (obbligatori) lo siano, questo sarebbe un altro motivo per 
cui la update va in errore
--
ac

Ecco tutto il codice completo.. spero sia di aiuto...
Private Sub cmdSALVA_Click()
    Dim strSQL As String
    Dim rst As Recordset
    strSQL = "SELECT * FROM [ADDETTI] "
    Set rst = CurrentDb.OpenRecordset(strSQL)
    If IsNull(Me.txtID_ADDETTO) Or Me.txtID_ADDETTO = "" Or
IsNull(Me.txtNOME) Or Me.txtNOME = "" Or IsNull(Me.txtCOGNOME) Or
Me.txtCOGNOME = "" Or IsNull(Me.comCOMPETENZE) Or Me.comCOMPETENZE = ""
Or IsNull(Me.comAPPARTENENZA) Or Me.comAPPARTENENZA = "" Or
IsNull(Me.txtCOSTO_ORARIO) Or Me.txtCOSTO_ORARIO = "" Then
        MsgBox "Non sono state inserite tutte le informazioni
obbligatorie !!", vbCritical + vbOKOnly
        Set rst = Nothing
        Exit Sub
    End If
    If rst("ID ADDETTO") = Me.txtID_ADDETTO Then
        rst.Edit
        rst("NOME") = Me.txtNOME
        rst("COGNOME") = Me.txtCOGNOME
        rst("COMPETENZE") = Me.comCOMPETENZE
        rst("APPARTENENZA") = Me.comAPPARTENENZA
        rst("COSTO ORARIO") = Me.txtCOSTO_ORARIO
    Else
        rst.AddNew
        rst("ID ADDETTO") = Me.txtID_ADDETTO
        rst("NOME") = Me.txtNOME
        rst("COGNOME") = Me.txtCOGNOME
        rst("COMPETENZE") = Me.comCOMPETENZE
        rst("APPARTENENZA") = Me.comAPPARTENENZA
        rst("COSTO ORARIO") = Me.txtCOSTO_ORARIO
    End If
    rst.Update
    Set rst = Nothing
    MsgBox "SALVATO!!!"
    Me.txtID_ADDETTO = ""
    Me.txtNOME = ""
    Me.txtCOGNOME = ""
    Me.comCOMPETENZE = ""
    Me.comAPPARTENENZA = ""
    Me.txtCOSTO_ORARIO = ""
    Me.comRICERCA_ADDETTI = ""
 
End Sub

cui la update va in errore
Non capisco quali dovrebbero essere gli attributi.. scusami

Ho provato... anche come hai scritto te mi dà sempre lo stesso errore
comincio ad impazzire...


Diconsi "attributi" le colonne di cui e' formato il record.
"Cognome" e' un attributo
ID_Addetto e' un attributo ed in questo caso, immagino, anche chiave
Perche' la cosa non funziona e' chiaro.
O fai una select con la where sull' "idaddetto" o fai una findfirst per 
l'id_addetto su rst. Come immaginavo fai il confronto sul primo record 
mentre magari il tuo "idaddetto" e' l'ultimo.
Non ce l'ho con te e ti auguro ogni bene e una luminosa carriera, e 
questo e' prevedibile vista la tua intraprendenza,   ma comincio a 
capire perche' l'informatica in Italia e' uno "sfacelo".
Di dove sei Raptor?
--
ac

 ha scritto nel messaggio
news:1160560389.6...@m7g2000cwm.googlegroups.com...

Perdona la domanda...
ma se la maschera ha come origine dati la stessa tabella del recordset
perché fai tutto sto lavoro?
Per salvare i dati a video avrai in qualche modo selezionato un record (con
i pulsantini di navigazione per es)
o ne stai creando uno nuovo...
se modifichi un record selezionato lo puoi capire dalla proprietà del
orm  --> Me.Dirty
che insieme alla proprietà Me.NewRecord ti fa capire se il record è uno
nuovo...
a questo punto con un IF selezioni i due casi: Nuovo o Modificato
e gli fai fare il loro "sporco lavoro" (hihihi)
cioè
If Me.Dirty=True Then
    Me.Dirty=False    'cosi facendo in pratica fai scrivere le modifiche in
sospeso e quindi lo salvi
    MsgBox"Modifiche salvate nel database"
End if
If Me.NewRecord Then
    Me.Dirty=False    'cosi facendo in pratica fai scrivere le modifiche in
sospeso e quindi lo salvi
    MsgBox"Nuovo record aggiunto"
End If
------
Se invece la maschera non è associata alla tabella
adotterei la soluzione di Alessandro Cara, con una modifica
If Me.txtID_ADDETTO = rst("ID ADDETTO") Then
         rst.Edit
     Else
         rst.AddNew
        rst("ID ADDETTO") = Me.txtID_ADDETTO
end if
rst("NOME") =  Me.txtNOME
rst("COGNOME") =  Me.txtCOGNOME
rst("COMPETENZE") = Me.comCOMPETENZE
rst("APPARTENENZA") = Me.comAPPARTENENZA
rst("COSTO ORARIO") = Me.txtCOSTO_ORARIO
rst.Update
perché la PK non la puoi riscrivere e si arrabbia, quindi la scrivi solo per
il nuovo...
Ciao
Nik

    Dim rst As Recordset
dim rst as DAO.recordset
-- 
-- 
Massimiliano Amendola
www.accessgoup.it
Il sito italiano di svilupatori Access
www.donkarl.com/it/cisa
 

 mentre magari il tuo "idaddetto" e' l'ultimo.
Perdonami... la where sull'idaddetto la faccio all'interno dell'if
vero???
Ormai non dò niente per scontato...
grazie

Nicola Di Martino wrote:
La form evidentemente non e' associata. Sono d'accordo che se la facesse 
associata sarebbe meglio.
Sull'update della PK mi fido ;<)
--
ac

la form non è associata.. non mi piace scrivere direttamente sul db ed
il metodo che mi sembrava più giusto era questo...
in effetti se faccio dei cambiamenti sul primo record tutto funziona
bene mentre dal secondo in giù non funziona.. che modifiche posso
fare..
dai raga aiutatemi ancora un altro po' vi prego... grazie... ah...ci
sto pensando anche io non vorrei che sembrasse che me ne freghi e mi
appoggi solo a voi.. grazie

 Ormai non dň niente per scontato...
questa deve essere la regola.
Ti riscrivo il tutto:
Private Sub cmdSALVA_Click()
     Dim strSQL As String
     Dim rst As Recordset
     If "" & Me.txtID_ADDETTO = "" Or  "" & Me.txtNOME = "" Or "" 
Me.txtCOGNOME = "" Or "" & Me.comCOMPETENZE = "" or "" & 
Me.comAPPARTENENZA = "" Or "" & Me.txtCOSTO_ORARIO)  "" Then
         MsgBox "Non sono state inserite tutte le informazioni
obbligatorie !!", vbCritical + vbOKOnly
         Exit Sub
     End If
     strSQL = "SELECT * FROM [ADDETTI]  where ID_ADDETTO=" & 
me.txtID_ADDETTO
	 ' se ID_ADDETTO e alfanumerico:
  '     strSQL = "SELECT * FROM [ADDETTI]  where ID_ADDETTO='" & 
me.txtID_ADDETTO & "'"
     Set rst = CurrentDb.OpenRecordset(strSQL)
If rst.bof then
      rst.AddNew
         rst("ID ADDETTO") = Me.txtID_ADDETTO
      Else
	 rst.Edit
end if
rst("NOME") =  Me.txtNOME
rst("COGNOME") =  Me.txtCOGNOME
rst("COMPETENZE") = Me.comCOMPETENZE
rst("APPARTENENZA") = Me.comAPPARTENENZA
rst("COSTO ORARIO") = Me.txtCOSTO_ORARIO
rst.Update
     Set rst = Nothing
     MsgBox "SALVATO!!!"
     Me.txtID_ADDETTO = ""
     Me.txtNOME = ""
     Me.txtCOGNOME = ""
     Me.comCOMPETENZE = ""
     Me.comAPPARTENENZA = ""
     Me.txtCOSTO_ORARIO = ""
     Me.comRICERCA_ADDETTI = ""
End Sub
Non si capisce perche' non e' stata fatta una forma associata (cfr 
risposta di Nicola DeMartino)
--
ac

 
"Ognuno ha il diritto di eleggere tempo e modo  della propria distruzione"
R.A. Heinlein - Double Star
--
ac

       Else
Scusa Alessandro
ma cosi c'è sempre l'errore della PK
una volta fatto AddNew recuperi la PK e poi la passi alla textbox
quindi va invertita l'assegnazione del valore tra i due ...
 Me.txtID_ADDETTO=rst("ID ADDETTO")
Giusto?
Ciao Nik


Aho!!!! Ho fatto copia e incolla di quello che hai scritto tu. E me 
pareva giusto.
--
ac

 ac
anche a me mentre lo scrivevo... ma poi mi ha colpito + il tuo eheheheh
ciao

Alessandro ti ringrazio con tutto il cuore.. adesso funziona che è una
meraviglia.. lo devo testare in tutto e per tutto facendo tutte le
varie casistiche di cambiamento dati ma adesso ci siamo...
Ringrazio moltissimo anche tutti gli altri... grazie grazie grazie...
siete forti ciao

Funziona da tutte le parti tranne che in un punto...
ovvero se modifico lo stesso id addetto (alfanumerico)
in questo caso mi va a scrivere un altro record e non mi modifica lo
stesso...
se ci sono suggerimenti sono bene accetti..
Ma quanto abbiamo scritto!!!!!!!!!!!!!!!!

 ha scritto nel messaggio
news:1160571041.8...@i3g2000cwc.googlegroups.com...

A raptor...
l'Id in quando Id nun se pò modifica!!!!
quindi se lo cambi lui interpreta che ne vuoi fare uno nuovo...
nella modifica lascialo stare
Ciao
nik

Hai ragione comincio a pretendere l'impossibile vi ringrazio
infinitamente, avete fatto tantissimo...