Forum - Visual Basic 6
- errore di runtime '-2147217900' Errore nella sintassi UPDATE
Pagine: [ 1 2 ]
|
emanulele75 (Normal User)
Rookie
Messaggi: 32
Iscritto: 06/05/2009
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 ----------------------------------------
Louis (Normal User)
Pro
Messaggi: 150
Iscritto: 22/04/2008
Ciao,
ritengo che vi siano errori nel concatenamento delle stringhe; a mio avviso dovrebbe essere così:
Codice sorgente - presumibilmente Visual Basic 6
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):
Codice sorgente - presumibilmente VB.NET
' 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:
MsgBox "Errore: " & Err .
Number & " " & Err .
Description & "." & Chr ( 13 ) _
& "Errore nella procedura." , vbExclamation, "....."
Exit Sub
End If
End Sub
Spero che sia utile.
emanulele75 (Normal User)
Rookie
Messaggi: 32
Iscritto: 06/05/2009
ti ringrazio tantissimo.. ora mi studio bene il tuo codice e appena ho notizie ti faccio sapere.
Un saluto, Emanuele
emanulele75 (Normal User)
Rookie
Messaggi: 32
Iscritto: 06/05/2009
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
Louis (Normal User)
Pro
Messaggi: 150
Iscritto: 22/04/2008
Codice sorgente - presumibilmente Plain Text
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 !?
emanulele75 (Normal User)
Rookie
Messaggi: 32
Iscritto: 06/05/2009
il tuo progr funziona... è l'updatee che non va! i riferimenti ado sono attivati.. ce ne sono altri che magari mi sfuggono?
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
Inserisci il nome del campo tra parentesi quadre nella update
" ... [user] ... "
Louis (Normal User)
Pro
Messaggi: 150
Iscritto: 22/04/2008
Ciao,
Codice sorgente - presumibilmente Plain Text
...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
http://nuke.vbcorner.net/Default.aspx?tabid=85 .
In bocca al lupo
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
Postato originariamente da Louis :
... se VB6 é aggiornato col SP2 ...
Il Service Pack e' il SP6 ...