Jump to content
Peter

Mais um problema com SQL (provavelmente)

Recommended Posts

Peter

o objectivo disto é fazer um update a uma linha da base de dado, antes tenho um select que me verifica se a data do dia actual já existe, se sim, entao faz o update, se nao faz um insert identido. o insert funciona mas o update nao faz nada, no entanto a connectionstring retorna 0, o que significa que há um erro. nao vejo é onde e ja hando ha um par de horas de volta disto. se alguem poder dar um olhinho e vir algo que me diga

obrigado

If data = databd Then

                Dim ConnectionString As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Application.StartupPath & "\bd.mdb")
                Dim query As String = "UPDATE " & username & " SET energia = @Energia, proteinas = @Proteinas, hc = @Hc, hcs = @Hcs, lipidos = @Lipidos, lipidoss = @Lipidoss, fibras = @Fibras, sodio = @Sodio, sal = @Sal, calcio = @Calcio WHERE data = " & data & " "

                Dim command As New OleDbCommand(query, ConnectionString)

                command.Parameters.Add("@Data", OleDbType.VarChar).Value = data
                command.Parameters.Add("@Energia", OleDbType.VarChar).Value = energiatb.Text
                command.Parameters.Add("@Proteinas", OleDbType.VarChar).Value = proteinastb.Text
                command.Parameters.Add("@Hc", OleDbType.VarChar).Value = hctb.Text
                command.Parameters.Add("@Hcs", OleDbType.VarChar).Value = hcstb.Text
                command.Parameters.Add("@Lipidos", OleDbType.VarChar).Value = lipidostb.Text
                command.Parameters.Add("@Lipidoss", OleDbType.VarChar).Value = lipidosstb.Text
                command.Parameters.Add("@Fibras", OleDbType.VarChar).Value = fibrastb.Text
                command.Parameters.Add("@Sodio", OleDbType.VarChar).Value = sodiotb.Text
                command.Parameters.Add("@Sal", OleDbType.VarChar).Value = saltb.Text
                command.Parameters.Add("@Calcio", OleDbType.VarChar).Value = calciotb.Text


                ConnectionString.Open()

                Dim x As Integer = command.ExecuteNonQuery()

                If x < 1 Then
                    MessageBox.Show("Erro ao aceder à base de dados", My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)

                Else

                    

                    MessageBox.Show("Dados inseridos com sucesso!", My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Information)

Share this post


Link to post
Share on other sites
Caça

Troca isto

Dim query As String = "UPDATE " & username & " SET energia = @Energia, proteinas = @Proteinas, hc = @Hc, hcs = @Hcs, lipidos = @Lipidos, lipidoss = @Lipidoss, fibras = @Fibras, sodio = @Sodio, sal = @Sal, calcio = @Calcio WHERE data = " & data & " "

por

Dim query As String = "UPDATE " & username & " SET energia = @Energia, proteinas = @Proteinas, hc = @Hc, hcs = @Hcs, lipidos = @Lipidos, lipidoss = @Lipidoss, fibras = @Fibras, sodio = @Sodio, sal = @Sal, calcio = @Calcio WHERE data = @Data

Os teus campos são todos do tipo varchar? De certo não...


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Peter

obrigado pelas respostas, estavam ambos correctos. no entanto depois das alterações que fiz  com a vossa ajuda continua me a retornar 0 na execução query

ja agora, sabem como fazer uma msgbox da query em que apareça realmente o conteudo e nao os @

            If data = databd Then

                Dim ConnectionString As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Application.StartupPath & "\bd.mdb")
                Dim query As String = "UPDATE " & username & " SET [energia] = @Energia, [proteinas] = @Proteinas, [hc] = @Hc, [hcs] = @Hcs, [lipidos] = @Lipidos, [lipidoss] = @Lipidoss, [fibras] = @Fibras, [sodio] = @Sodio, [sal] = @Sal, [calcio] = @Calcio WHERE data = @Data"

                Dim command As New OleDbCommand(query, ConnectionString)

                command.Parameters.Add("@Data", OleDbType.VarChar).Value = data
                command.Parameters.Add("@Energia", OleDbType.Integer).Value = energiatb.Text
                command.Parameters.Add("@Proteinas", OleDbType.Integer).Value = proteinastb.Text
                command.Parameters.Add("@Hc", OleDbType.Integer).Value = hctb.Text
                command.Parameters.Add("@Hcs", OleDbType.Integer).Value = hcstb.Text
                command.Parameters.Add("@Lipidos", OleDbType.Integer).Value = lipidostb.Text
                command.Parameters.Add("@Lipidoss", OleDbType.Integer).Value = lipidosstb.Text
                command.Parameters.Add("@Fibras", OleDbType.Integer).Value = fibrastb.Text
                command.Parameters.Add("@Sodio", OleDbType.Integer).Value = sodiotb.Text
                command.Parameters.Add("@Sal", OleDbType.Integer).Value = saltb.Text
                command.Parameters.Add("@Calcio", OleDbType.Integer).Value = calciotb.Text
                MsgBox(query)

                ConnectionString.Open()

                Dim x As Integer = command.ExecuteNonQuery()

                If x < 1 Then
                    MessageBox.Show("Erro ao aceder à base de dados", My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)

                Else



                    MessageBox.Show("Dados inseridos com sucesso!", My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Information)


                End If

                ConnectionString.Close()
                command = Nothing

Share this post


Link to post
Share on other sites
Caça

O campo data não é do tipo data?

Também não trocaste a linha de código que te coloquei


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Peter

editei agora.

nao, é mesmo texto para nao fazer confusão com o formato de data enviado pelo programa, o access é um pouco estranho. no entanto o IF com a data que recolho da base de dados antes inserida e a data que guardo na variavel data atraves de DateString  é confirmado

Share this post


Link to post
Share on other sites
Caça

Eu não uso access, mas lembro-me de uma vez que queria fazer um Update e estava com o mesmo problema que o teu, porque não declarei os parâmetros por ordem. Podes sempre tentar... Passa o parâmetro data para o final

                command.Parameters.Add("@Energia", OleDbType.Integer).Value = energiatb.Text
                command.Parameters.Add("@Proteinas", OleDbType.Integer).Value = proteinastb.Text
                command.Parameters.Add("@Hc", OleDbType.Integer).Value = hctb.Text
                command.Parameters.Add("@Hcs", OleDbType.Integer).Value = hcstb.Text
                command.Parameters.Add("@Lipidos", OleDbType.Integer).Value = lipidostb.Text
                command.Parameters.Add("@Lipidoss", OleDbType.Integer).Value = lipidosstb.Text
                command.Parameters.Add("@Fibras", OleDbType.Integer).Value = fibrastb.Text
                command.Parameters.Add("@Sodio", OleDbType.Integer).Value = sodiotb.Text
                command.Parameters.Add("@Sal", OleDbType.Integer).Value = saltb.Text
                command.Parameters.Add("@Calcio", OleDbType.Integer).Value = calciotb.Text
                command.Parameters.Add("@Data", OleDbType.VarChar).Value = data


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
bioshock

editei agora.

nao, é mesmo texto para nao fazer confusão com o formato de data enviado pelo programa, o access é um pouco estranho. no entanto o IF com a data que recolho da base de dados antes inserida e a data que guardo na variavel data atraves de DateString  é confirmado

Wrong. Antes de fazeres a inserção na BD deves converter o formato inicial para o formato que a BD autoriza, é simples! :)

Faz como o @Caça te disse e se não der, faz só o seguinte, troca esta linha:

command.Parameters.Add("@Data", OleDbType.VarChar).Value = data

por:

command.Parameters.Add("@Data", OleDbType.VarChar).Value = Date.Now

Só para certificar que o erro não consta aqui.

Edit: Well done! :P

Share this post


Link to post
Share on other sites
Caça

é que era mesmo isso, nunca me ia lembrar. obrigado!

Às vezes aparece cada coisa...


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.