Guest PauloR Posted April 19, 2009 at 06:05 PM Report #257667 Posted April 19, 2009 at 06:05 PM Bem ... cá estou eu novamente ? Não estou a conseguir fazer UPDATES numa tabela em MSAccess pois tenho sempre o mesmo erro: "data type mismatch in criteria expression" Existe alguma diferença na utilização de parâmetros entre o INSERT e o UPDATE? O código que utilizo é o mesmo para gravar ou actualizar mudando apenas a instrucção SQL. O código é o seguinte: Private Sub btnGravar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGravar.Click Dim CnnString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDb & "; User Id=admin;Password=" Dim strSQL As String = "" Dim iSQLStatus As Integer Dim Cnn As New OleDbConnection(CnnString) Dim Cmd As New OleDbCommand Select Case strModo Case "I" strSQL = " INSERT INTO tabela (campo1, campo2, campo3, campo4)" & _ " VALUES (@campo1, @campo2, @campo3, @campo4)" Case "A" strSQL = " UPDATE tabela SET campo1 = @campo1, campo2 = @campo2, " & _ " campo3 = @campo3, campo4 = @campo4 " & _ " WHERE campo0 = " & CInt(txtRecordID.Text) End Select Try With Cmd .CommandText = strSQL .CommandType = CommandType.Text .Parameters.Add("@campo1", OleDbType.Integer).Value = txtRecord.Text .Parameters.Add("@campo2", OleDbType.Date).Value = "#" & String.Format("{0:d}", dtpRData.Value) & "#" .Parameters.Add("@campo3", OleDbType.VarChar).Value = txtCustom.Text .Parameters.Add("@campo4", OleDbType.Double).Value = txtBaseValue.Text .Connection = Cnn End With Cnn.Open() iSQLStatus = Cmd.ExecuteNonQuery If iSQLStatus = 0 Then MsgBox("Erro") Else MsgBox("OK") End If Catch ex As Exception MessageBox.Show(ex.Message) End Try Cnn.Close() Cnn = Nothing Cmd = Nothing End Sub O INSERT funciona SEM problemas. Obrigado
LuRsT Posted April 19, 2009 at 06:19 PM Report #257669 Posted April 19, 2009 at 06:19 PM Claro, e que tal pesquisares antes de perguntar coisas dessas? É que uma pesquisa como "insert sql" no google dá-te a resposta num instante. http://www.w3schools.com/SQL/sql_insert.asp http://www.w3schools.com/Sql/sql_update.asp BotNet: The Game Tudo Sobre Formigas
Guest PauloR Posted April 19, 2009 at 06:30 PM Report #257671 Posted April 19, 2009 at 06:30 PM Claro, e que tal pesquisares antes de perguntar coisas dessas? É que uma pesquisa como "insert sql" no google dá-te a resposta num instante. http://www.w3schools.com/SQL/sql_insert.asp http://www.w3schools.com/Sql/sql_update.asp Por acaso já procurei e não encontrei nada ? Repara que o INSERT funciona sem problemas e NÃO encontro nenhum problema no UPDATE... Os teus links não me mostram nenhum erro nas minhas instrucções. Obrigado
jpaulino Posted April 19, 2009 at 06:37 PM Report #257672 Posted April 19, 2009 at 06:37 PM A única diferença entre uma instrução e a outra é o txtRecordID.Text. O que é e que valor tem ? Ps: Para a data não precisas de isso tudo, basta fazeres: .Parameters.Add("@campo2", OleDbType.Date).Value = dtpRData.Value
Guest PauloR Posted April 19, 2009 at 07:02 PM Report #257675 Posted April 19, 2009 at 07:02 PM A única diferença entre uma instrução e a outra é o txtRecordID.Text. O que é e que valor tem ? Ps: Para a data não precisas de isso tudo, basta fazeres: .Parameters.Add("@campo2", OleDbType.Date).Value = dtpRData.Value Esqueci-me do campo0 no INSERT ao passar o codigo para o forum. Este campo tem um valor numérico e único. Quando é preciso actualizar um registo apenas os campos 1 a 4 podem ser alterados. O txtRecordID.Text é a valor do campo0 quando foi inserido na tabela. Como é um valor único pode ser utilizador para UPDATES e/ou DELETE. cumpts.
Guest PauloR Posted April 19, 2009 at 08:43 PM Report #257686 Posted April 19, 2009 at 08:43 PM O problema nada tinha a ver com as instrucções do SQL mas sim com a ordem dos parametros. Como tinha dito faltava o campo0 ? assim e para funcionar tem de ser assim: Select Case strModo Case "I" strSQL = " INSERT INTO tabela (campo0, campo1, campo2, campo3, campo4)" & _ " VALUES (@campo0, @campo1, @campo2, @campo3, @campo4)" Case "A" strSQL = " UPDATE tabela SET campo1 = @campo1, campo2 = @campo2, " & _ " campo3 = @campo3, campo4 = @campo4 " & _ " WHERE campo0 = @campo0" End Select ' Para o INSERT .Parameters.Add("@campo0", OleDbType.Integer).Value = txtRecordID.Text .Parameters.Add("@campo1", OleDbType.Integer).Value = txtRecord.Text .Parameters.Add("@campo2", OleDbType.Date).Value = "#" & String.Format("{0:d}", dtpRData.Value) & "#" .Parameters.Add("@campo3", OleDbType.VarChar).Value = txtCustom.Text .Parameters.Add("@campo4", OleDbType.Double).Value = txtBaseValue.Text ' Para o UPDATE .Parameters.Add("@campo1", OleDbType.Integer).Value = txtRecord.Text .Parameters.Add("@campo2", OleDbType.Date).Value = "#" & String.Format("{0:d}", dtpRData.Value) & "#" .Parameters.Add("@campo3", OleDbType.VarChar).Value = txtCustom.Text .Parameters.Add("@campo4", OleDbType.Double).Value = txtBaseValue.Text .Parameters.Add("@campo0", OleDbType.Integer).Value = CInt(txtRecordID.Text) Cumpts
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now