Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Weasel

[RESOLVIDO] .NET - Base de dados Access (.MDB)

Mensagens Recomendadas

Weasel

Boas!

Eu costumo usar base de dados PostgreSQL, pelo que não estou muito habituado a usar bases de dados Access, mas como necessito de uma aplicação "portable" recorri a este tipo de base de dados.

Tudo correu ok, até que tive de fazer um UPDATE à base de dados, dá-me sempre erro, já estive a ver na wiki aqui do p@p, mas não percebo o que tenho mal.

A instrução SQL fica assim:

UPDATE reghoras SET (manha_e = '0800', manha_s = '1230', tarde_e = '1400', tarde_s = '2000', noite_e = '0', noite_s = '0', dia_extra = 'True') WHERE data = 20100112

o código é este:

Private Sub btnRegistar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRegistar.Click
        Dim conDB As OleDbConnection
        Dim cmdDB As OleDbCommand
        conDB = New OleDbConnection(conString)
        conDB.Open()
        Dim sData As Date = calend.SelectedDates.Item(0)
        Dim strSql As String = "UPDATE reghoras SET (manha_e = '" & dbParseHoras(txtManhaE.Text) & "', manha_s = '" & dbParseHoras(txtManhaS.Text) & "', tarde_e = '" & dbParseHoras(txtTardeE.Text) & "', tarde_s = '" & dbParseHoras(txtTardeS.Text) & "', noite_e = '" & dbParseHoras(txtNoiteE.Text) & "', noite_s = '" & dbParseHoras(txtNoiteS.Text) & "', dia_extra = '" & chkDiaFeriasFeriado.Checked & "') WHERE data = " & Format(sData, "yyyyMMdd")
        Debug.Print(strSql)
        cmdDB = New OleDbCommand(strSql, conDB)
        cmdDB.ExecuteNonQuery()
        conDB.Close()
        conDB.Dispose()
        cmdDB.Dispose()
    End Sub

O erro que dá é este:

Erro de sintaxe na instrução UPDATE.

onde é que estou a falhar?


Knowledge to the masses


Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Assim de repente só noto que o SET não leva parênteses.

A síntaxe é

UPDATE tabela SET coluna=valor,coluna=valor,...

e não:

UPDATE tabela SET(coluna=valor,coluna=valor,...)

Pode ser aí onde o Access está a engelhar o nariz.

Ou isso ou a data da condição. Qual é o data type?


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Weasel

Eu tinha sem os parênteses, apenas os coloquei porque na Wiki (no artigo de Programação para acesso a dados) diz que os leva.

Removi os parênteses e agora dá-me o erro que dava ao inicio

Tipo de dados incorrecto na expressão de critérios.

O tipo de dados da data é Integer, ou Numero (no Access aparece "Numero inteiro longo")

Assim como todos os outros campos da tabela, excepto o dia_extra que é boolean (no access é Verdadeiro/Falso)


Knowledge to the masses


Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Então se são todos números inteiros, exprimenta sem os apóstrofos.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Weasel

Sem apostrofes:

UPDATE reghoras SET manha_e = 800, manha_s = 1230, tarde_e = 1400, tarde_s = 2000, noite_e = 0, noite_s = 0, dia_extra = 'True' WHERE data = 20100112

Private Sub btnRegistar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRegistar.Click
        Dim conDB As OleDbConnection
        Dim cmdDB As OleDbCommand
        conDB = New OleDbConnection(conString)
        conDB.Open()
        Dim sData As Date = calend.SelectedDates.Item(0)
        Dim strSql As String = "UPDATE reghoras SET manha_e = " & dbParseHoras(txtManhaE.Text) & ", manha_s = " & dbParseHoras(txtManhaS.Text) & ", tarde_e = " & dbParseHoras(txtTardeE.Text) & ", tarde_s = " & dbParseHoras(txtTardeS.Text) & ", noite_e = " & dbParseHoras(txtNoiteE.Text) & ", noite_s = " & dbParseHoras(txtNoiteS.Text) & ", dia_extra = '" & chkDiaFeriasFeriado.Checked & "' WHERE data = " & Format(sData, "yyyyMMdd")
        Debug.Print(strSql)
        cmdDB = New OleDbCommand(strSql, conDB)
        cmdDB.ExecuteNonQuery()
        conDB.Close()
        conDB.Dispose()
        cmdDB.Dispose()
    End Sub

Erro:

Tipo de dados incorrecto na expressão de critérios.


Knowledge to the masses


Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Weasel

Agora reparei o campo data passou a maiúscula aqui no Geshi deve ser uma palavra reservada, vou mudar o nome desse campo.


Knowledge to the masses


Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Weasel

Continua com o mesmo erro:

Tipo de dados incorrecto na expressão de critérios.

UPDATE reghoras SET manha_e = 800, manha_s = 1230, tarde_e = 1400, tarde_s = 2000, noite_e = 0, noite_s = 0, dia_extra = 'True' WHERE idata = 20100112

Private Sub btnRegistar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRegistar.Click
        Dim conDB As OleDbConnection
        Dim cmdDB As OleDbCommand
        conDB = New OleDbConnection(conString)
        conDB.Open()
        Dim sData As Date = calend.SelectedDates.Item(0)
        Dim strSql As String = "UPDATE reghoras SET manha_e = " & dbParseHoras(txtManhaE.Text) & ", manha_s = " & dbParseHoras(txtManhaS.Text) & ", tarde_e = " & dbParseHoras(txtTardeE.Text) & ", tarde_s = " & dbParseHoras(txtTardeS.Text) & ", noite_e = " & dbParseHoras(txtNoiteE.Text) & ", noite_s = " & dbParseHoras(txtNoiteS.Text) & ", dia_extra = '" & chkDiaFeriasFeriado.Checked & "' WHERE idata = " & Format(sData, "yyyyMMdd")
        Debug.Print(strSql)
        cmdDB = New OleDbCommand(strSql, conDB)
        cmdDB.ExecuteNonQuery()
        conDB.Close()
        conDB.Dispose()
        cmdDB.Dispose()
    End Sub


Knowledge to the masses


Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Só para rastreio, experimenta trocar a coluna "idata" de inteiro para texto e mete-lhe os apóstrofos na query.

"Expressão de critérios" é o que vem depois do WHERE.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Weasel

Fiz o que disseste mas dá na mesma erro.

Tipo de dados incorrecto na expressão de critérios.

Não entendo isto.


Knowledge to the masses


Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Vamos por partes então.

Se tirares a condição, ele actualiza os dados?

(atenção, sem a condição todas as linhas vão ficar com a mesma informação. Se estiveres a trabalhar com dados reais, faz backup)


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Weasel

Já resolvi, tinha as apostrofes a mais no dia_extra='False' é dia_extra=False

Enfim, o erro é que me estava orientar para outro lado...

obrigado pela ajuda!


Knowledge to the masses


Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.