Oppure

Loading
07/05/09 12:12
emanulele75
Ciao a tutti, vorrei aprire questo topic per via di un problema che mi attanaglia da parecchio tempo.
avevo già scritto su un vecchio post che sembrava avesse il mio medesimo problema.

Sto creando un gestionale e nella modifica o inserimento nuovo utente mi da l'errore in oggetto

il collegamento al db(access) lo effetto tramite ADO e le select me le fa tranquillamente fare, ma quando vado a modificare/inserire un nuovo utente subito mi compare quell'orrido mex

premetto che l'istruzione di update l'ho provata in mille modi, anche passando valori fissi, ma nulla niente da fare.
Vi posto anche il click del tasto che fa l'update

Grazie anticipatamente, Emanuele
ps. la connessione la effettuo all'interno di un modulo e la apro al momento del login e funziona perfettamente.
------------------------ codice incriminato ----------------------------------------------
Private Sub psbConfermaModifica_Click()
Dim sql As String
'Dim DET_REC As New ADODB.Recordset


'DET_REC.Open "UPDATE utenti SET " _
' & "USER = '" & Replace(entUser.Text, "'", "''";) & "', " _
' & "PASSWORD = '" & Replace(entPw.Text, "'", "''";) & "', " _
' & "ABILITAZIONE = '" & Replace(Combo1.Text, "'", "''";) & "', " _
' & "DESCRIZIONE = '" & Replace(entDescrizione.Text, "'", "''";) & "' " _
' & " WHERE descrizione = " & "'" & CmbUtente.Text & "'", Connessione, 3


'Sql = "UPDATE utenti SET USER = " & "'" & entUser.Text & "'" _
& " WHERE descrizione = " & "'" & CmbUtente.Text & "' "


'Sql = "UPDATE utenti SET user ='" & Trim(entUser) & "' where descrizione = " & CmbUtente.Text

sql = " update utenti set user = '" & Replace(entUser.Text, "'", "''";) & "', " _
& " WHERE descrizione = " & "'" & CmbUtente.Text & "'"


MsgBox sql & Connessione

Connessione.Execute sql


MsgBox "Modifica eseguita correttamente", vbOKOnly, "Modifica Utente"

End Sub
------------------------ fine codice incriminato ----------------------------------------
aaa
07/05/09 13:18
Louis
Ciao,
ritengo che vi siano errori nel concatenamento delle stringhe; a mio avviso dovrebbe essere così:
DET_REC.Open "UPDATE utenti SET USER= ('" & Replace(entUser.Text, "'", "''") & "'), PASSWORD=('" & Replace(entPw.Text, "'", "''") _
            & "'), ABILITAZIONE =('" & Replace(Combo1.Text, "'", "''") & "'), DESCRIZIONE =('" & Replace(entDescrizione.Text, "'", "''") _
            & "') WHERE descrizione=('" & Replace(CmbUtente.Text, "'", "''") & "'), Connessione, 3"


Poi ti suggerirei d'usare l'oggetto Command, nel seguente modo (ti posto un esempio concreto in uso):

' Salva le modifiche ai dati nel DB TblAnagCliente - FrmPaziente:
Public Sub SalvaDataModPaz()
    On Error GoTo ErrHandler
        
        Dim Ogg5 As New ADODB.Command
        Dim Cns5 As New ADODB.Connection
        
        With Cns5
            .ConnectionString = DataConnessione
            .CursorLocation = adUseClient   'tipo di cursore
            .Mode = adModeShareDenyNone     'nessuna limitazione
            .CommandTimeout = 15
            .Open
        End With
        
        Ogg5.ActiveConnection = Cns5
        Ogg5.CommandType = adCmdText

        Ogg5.CommandText = "UPDATE TblAnagCliente Set Titolo=('" & Replace(FrmPaziente.CmbCl1.Text, "'", "''") & "'),  Nome=('" & Replace(FrmPaziente.TxtCt1.Text, "'", "''") _
        & "'), Cognome=('" & Replace(FrmPaziente.TxtCt2.Text, "'", "''") & "'), CodFisc=('" & Replace(FrmPaziente.TxtCt3.Text, "'", "''") & "'), LuogoN=('" & Replace(FrmPaziente.TxtCt19.Text, "'", "''") _
        & "'), ProvN=('" & Replace(FrmPaziente.CmbCl3B.Text, "'", "''") & "'), DataN=('" & (FrmPaziente.TxtCt21.Text) & "'), Eta=('" & (FrmPaziente.TxtCt22.Text) & "'), Sesso=('" & (FrmPaziente.CmbCl5.Text) _
        & "'), CodiSSN=('" & (FrmPaziente.TxtCt12.Text) & "'), CodiASL=('" & (FrmPaziente.TxtCt13.Text) _
        & "'), Via=('" & Replace(FrmPaziente.CmbCl2.Text, "'", "''") & "'), NomeVia=('" & Replace(FrmPaziente.TxtCt4.Text, "'", "''") & "'), Ncivico=('" & (FrmPaziente.TxtCt5.Text) & "'), Cap=('" & (FrmPaziente.TxtCt6.Text) _
        & "'), Citta=('" & Replace(FrmPaziente.TxtCt7.Text, "'", "''") & "'), Provincia=('" & Replace(FrmPaziente.CmbCl3.Text, "'", "''") & "'), Telefono=('" & (FrmPaziente.TxtCt8.Text) _
        & "'), Cellulare=('" & (FrmPaziente.TxtCt9.Text) & "'), Fax=('" & (FrmPaziente.TxtCt10.Text) & "'), Email=('" & Replace(FrmPaziente.TxtCt11.Text, "'", "''") _
        & "'), Profes=('" & Replace(FrmPaziente.CmbCl4.Text, "'", "''") & "'), Nazion=('" & (FrmPaziente.TxtCt16.Text) & "'), CivSt=('" & (FrmPaziente.TxtCt17.Text) & "'), Relig=('" & (FrmPaziente.TxtCt18.Text) _
        & "'), Segnal=('" & (FrmPaziente.TxtCt14.Text) & "'), Famil=('" & Replace(FrmPaziente.RTB1(0).Text, "'", "''") & "'), Patolog=('" & Replace(FrmPaziente.RTB1(1).Text, "'", "''") & "'), Esami=('" & Replace(FrmPaziente.RTB1(2).Text, "'", "''") _
        & "'), Abitud=('" & Replace(FrmPaziente.RTB1(3).Text, "'", "''") & "'), PatologImp=('" & Replace(FrmPaziente.RTB1(4).Text, "'", "''") & "'), Interv=('" & Replace(FrmPaziente.RTB1(5).Text, "'", "''") _
        & "'), Terap=('" & Replace(FrmPaziente.RTB1(6).Text, "'", "''") _
        & "') WHERE Nome=('" & Replace(FrmPaziente.TxtCt1.Text, "'", "''") & "') AND Cognome=('" & Replace(FrmPaziente.TxtCt2.Text, "'", "''") & "')"
        Ogg5.Execute
        
    ' Verifica se l'aggiornamento del DB è avvenuto:
        Dim recs As Long
        Set Ogg5.ActiveConnection = Cns5
        Ogg5.Execute recs
        'Print "Records affected = " & recs
        If recs > 0 Then
            MsgBox "Le modifiche ai dati del paziente" & Chr(13) _
            & FrmPaziente.CmbCl1.Text & Space(1) & FrmPaziente.TxtCt1.Text & Space(1) & FrmPaziente.TxtCt2.Text & Chr(13) _
            & "sono state inserite nel DB.", vbInformation, "Modifica dei dati - ......"
        End If
        
'Chiude la connessione:
    If GetState(Cns5.State) = "adStateOpen" Then
        Cns5.Close
        Set Cns5 = Nothing
    End If
' Cancella l'oggetto:
    Set Ogg5 = Nothing

ErrHandler:
    If Err.Number <> 0 Then
        MsgBox "Errore: " & Err.Number & " " & Err.Description & "." & Chr(13) _
        & "Errore nella procedura.", vbExclamation, "....."
        Err.Clear
        Exit Sub
    End If
End Sub


Spero che sia utile. ;)
aaa
07/05/09 14:48
emanulele75
ti ringrazio tantissimo.. ora mi studio bene il tuo codice e appena ho notizie ti faccio sapere.
Un saluto, Emanuele
aaa
07/05/09 15:21
emanulele75
Postato originariamente da emanulele75:

ti ringrazio tantissimo.. ora mi studio bene il tuo codice e appena ho notizie ti faccio sapere.
Un saluto, Emanuele


Louis putroppo anche con il tuo codice mi da problemi.
te la posto adeguata alla mia necessita e l'update l'ho messa secca per vedere cosa tirava giù

Private Sub psbConfermaModifica_Click()

'Public Sub SalvaDataModPaz()
On Error GoTo ErrHandler

Dim Ogg5 As New ADODB.Command
Dim Cns5 As New ADODB.Connection

With Cns5
.ConnectionString = Connessione
.CursorLocation = adUseClient 'tipo di cursore
.Mode = adModeShareDenyNone 'nessuna limitazione
.CommandTimeout = 15
.Open
End With

Ogg5.ActiveConnection = Cns5
Ogg5.CommandType = adCmdText

' Ogg5.CommandText = "UPDATE utenti Set user=('" & Replace(entUser.Text, "'", "''";) & "'), Nome=('" & Replace(FrmPaziente.TxtCt1.Text, "'", "''";) _
' & "'), Cognome=('" & Replace(FrmPaziente.TxtCt2.Text, "'", "''";) & "'), CodFisc=('" & Replace(FrmPaziente.TxtCt3.Text, "'", "''";) & "'), LuogoN=('" & Replace(FrmPaziente.TxtCt19.Text, "'", "''";) _
' & "'), ProvN=('" & Replace(FrmPaziente.CmbCl3B.Text, "'", "''";) & "'), DataN=('" & (FrmPaziente.TxtCt21.Text) & "'), Eta=('" & (FrmPaziente.TxtCt22.Text) & "'), Sesso=('" & (FrmPaziente.CmbCl5.Text) _
' & "'), CodiSSN=('" & (FrmPaziente.TxtCt12.Text) & "'), CodiASL=('" & (FrmPaziente.TxtCt13.Text) _
' & "'), Via=('" & Replace(FrmPaziente.CmbCl2.Text, "'", "''";) & "'), NomeVia=('" & Replace(FrmPaziente.TxtCt4.Text, "'", "''";) & "'), Ncivico=('" & (FrmPaziente.TxtCt5.Text) & "'), Cap=('" & (FrmPaziente.TxtCt6.Text) _
' & "'), Citta=('" & Replace(FrmPaziente.TxtCt7.Text, "'", "''";) & "'), Provincia=('" & Replace(FrmPaziente.CmbCl3.Text, "'", "''";) & "'), Telefono=('" & (FrmPaziente.TxtCt8.Text) _
' & "'), Cellulare=('" & (FrmPaziente.TxtCt9.Text) & "'), Fax=('" & (FrmPaziente.TxtCt10.Text) & "'), Email=('" & Replace(FrmPaziente.TxtCt11.Text, "'", "''";) _
' & "'), Profes=('" & Replace(FrmPaziente.CmbCl4.Text, "'", "''";) & "'), Nazion=('" & (FrmPaziente.TxtCt16.Text) & "'), CivSt=('" & (FrmPaziente.TxtCt17.Text) & "'), Relig=('" & (FrmPaziente.TxtCt18.Text) _
' & "'), Segnal=('" & (FrmPaziente.TxtCt14.Text) & "'), Famil=('" & Replace(FrmPaziente.RTB1(0).Text, "'", "''";) & "'), Patolog=('" & Replace(FrmPaziente.RTB1(1).Text, "'", "''";) & "'), Esami=('" & Replace(FrmPaziente.RTB1(2).Text, "'", "''";) _
' & "'), Abitud=('" & Replace(FrmPaziente.RTB1(3).Text, "'", "''";) & "'), PatologImp=('" & Replace(FrmPaziente.RTB1(4).Text, "'", "''";) & "'), Interv=('" & Replace(FrmPaziente.RTB1(5).Text, "'", "''";) _
' & "'), Terap=('" & Replace(FrmPaziente.RTB1(6).Text, "'", "''";) _
' & "') WHERE Nome=('" & Replace(FrmPaziente.TxtCt1.Text, "'", "''";) & "') And Cognome=('" & Replace(FrmPaziente.TxtCt2.Text, "'", "''";) & "')"

Ogg5.CommandText = "update utenti set user = 'emanuelele' where id = 1"




Ogg5.Execute

' Verifica se l'aggiornamento del DB è avvenuto:
Dim recs As Long
Set Ogg5.ActiveConnection = Cns5
Ogg5.Execute recs
'Print "Records affected = " & recs
If recs > 0 Then
MsgBox "mod eff"
End If

''Chiude la connessione:
' If GetState(Cns5.State) = "adStateOpen" Then
' Cns5.Close
' Set Cns5 = Nothing
' End If
'' Cancella l'oggetto:
' Set Ogg5 = Nothing

ErrHandler:
If Err.Number <> 0 Then
MsgBox "Errore: " & Err.Number & " " & Err.Description & "." & Chr(13) _
& "Errore nella procedura.", vbExclamation, "....."
Err.Clear
Exit Sub
End If
End Sub
aaa
07/05/09 16:03
Louis
Louis putroppo anche con il tuo codice mi da problemi. 
te la posto adeguata alla mia necessita e l'update l'ho messa secca per vedere cosa tirava giù 


Ma guarda che il codice predetto nel mio prog. funziona !
Che errore ti evidenzia ?
Naturalmente hai attivato i Riferimenti !?
aaa
07/05/09 18:51
emanulele75
il tuo progr funziona... è l'updatee che non va! i riferimenti ado sono attivati.. ce ne sono altri che magari mi sfuggono?
aaa
07/05/09 19:38
theprogrammer
Inserisci il nome del campo tra parentesi quadre nella update

" ... [user] ... "
aaa
08/05/09 6:03
Louis
Ciao,

...i riferimenti ado sono attivati.. ce ne sono altri che magari mi sfuggono? 


oltre a fare quanto ti dice Theprogrammer, così scongiuri l'errore per Nomi riservati, ti chiedo se VB6 é aggiornato col SP2 e quindi se stai usando ADO 2.8 library.
Comunque la tua segnalazione "...Errore nella sintassi UPDATE ..." parrebbe derivare dall'uso di una parola riservata da Access; é opportuno che tu faccia una ricerca nella guida in linea di Access.
Ultimo consiglio, passa un argomento alla volta nella query in modo da verificare se stai usando un termine riservato, o meglio ancora imposta la query con i parametri
nuke.vbcorner.net/….
In bocca al lupo
;)
aaa