Jump to content
  • 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)

Recommended Posts

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


Share this post


Link to post
Share on other 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"

Share this post


Link to post
Share on other 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


Share this post


Link to post
Share on other 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"

Share this post


Link to post
Share on other 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


Share this post


Link to post
Share on other 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


Share this post


Link to post
Share on other 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


Share this post


Link to post
Share on other 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"

Share this post


Link to post
Share on other 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


Share this post


Link to post
Share on other 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"

Share this post


Link to post
Share on other 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


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

×

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.