Jump to content
Seabra

UPDATE dá erro "No value given for one or more required parameters."

Recommended Posts

Seabra

Este código dá erro "No value given for one or more required parameters."

Estou a utilizar base de dados Access


conn.Open()

cmd = conn.CreateCommand

       cmd.CommandText = "UPDATE Viaturas SET Matricula=@Campo1,KmActuais=@Campo6,DataUltInspecao=@Campo5,KmUltInspecao=@Campo6,DataProxInspecao= DATEADD(Day, 10, now) WHERE Matricula =@Campo1"

                cmd.Parameters.AddWithValue("@Campo1", SqlDbType.VarChar).Value = DetNulo(TextBox1.Text)
                cmd.Parameters.AddWithValue("@Campo6", SqlDbType.BigInt).Value = DetNumeroNulo(TextBox4.Text)
                cmd.Parameters.AddWithValue("@Campo5", SqlDbType.DateTime).Value = DetNulo(TextBox7.Text) 'Data

        End Select

      
        check = cmd.ExecuteReader.RecordsAffected()

        conn.Close()


Se eu trocar "DATEADD(Day, 10, now)" por uma data funciona bem e não dá erro.

Onde é que estará o erro?

Já dei voltas e mais voltas e nada.

Cumprimentos

Seabra

Share this post


Link to post
Share on other sites
Caça

Já executaste essa query directamente na BD, isto é, sem ser através do programa?


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
bioshock

O que te garante que o Access percebe a função DateAdd()?

Passa isso para os parâmetros e vê se funciona.

Edit: Isso != DateAdd().

Share this post


Link to post
Share on other sites
Peter

 cmd.CommandText = "UPDATE Viaturas SET Matricula=@Campo1,KmActuais=@Campo6,DataUltInspecao=@Campo5,KmUltInspecao=@Campo6,DataProxInspecao= " & DATEADD(Day, 10, now) & " WHERE Matricula =@Campo1"

experimenta assim

ou assim

 cmd.CommandText = "UPDATE Viaturas SET Matricula=@Campo1,KmActuais=@Campo6,DataUltInspecao=@Campo5,KmUltInspecao=@Campo6,DataProxInspecao= '" & DATEADD(Day, 10, now) & "' WHERE Matricula =@Campo1"

Share this post


Link to post
Share on other sites
Seabra

 cmd.CommandText = "UPDATE Viaturas SET Matricula=@Campo1,KmActuais=@Campo6,DataUltInspecao=@Campo5,KmUltInspecao=@Campo6,DataProxInspecao= " & DATEADD(Day, 10, now) & " WHERE Matricula =@Campo1"

experimenta assim

ou assim

 cmd.CommandText = "UPDATE Viaturas SET Matricula=@Campo1,KmActuais=@Campo6,DataUltInspecao=@Campo5,KmUltInspecao=@Campo6,DataProxInspecao= '" & DATEADD(Day, 10, now) & "' WHERE Matricula =@Campo1"

Hoje não posso testar só amanhã.

Penso que não reparaste que DATEADD é uma função SQL pelo que não pode estar dessa forma que mostras, mas sim da forma qu tenho.

Cumpiments

Seabra

Share this post


Link to post
Share on other sites
Seabra

Caça e Bioshock

Como sabem DATEADD é uma função SQL.

Não posso passar para parâmetros porque onde está "Now" vai ficar "DataUltInspecao". Como não funcionava, eu só troquei para Now para tornar tudo mais simples e evitar erros.

Tenho algumas dúvidas se DATEADD funciona ou não em Access, podes ser esse o problemas. O office é 2007 e tenho lido em vários sítios que essa função funciona e já pesquisei vários exemplos na net e todos dizem que funciona.

De qualquer modo, ainda não funciona.

Cumprimentos

Seabra

Share this post


Link to post
Share on other sites
Caça

Poque é que não fazer isso através do VB?

Em vez de usares o DateAdd, usa

Now.Date.AddDays(10)


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Seabra

Poque é que não fazer isso através do VB?

Em vez de usares o DateAdd, usa

Now.Date.AddDays(10)

Sim se não tiver outra solução!

Já agora com parâmetros e com o código que tenho, como faço para ler "DataUltInspecao" somar "DiasEntreInsp"?  "DiasEntreInsp"  também está nessa mesma tabela mas claro não consta neste Update ("DiasEntreInsp" será para trocar pelo "10". Repito que o Now e o 10 foram alores que utilizei para simplificar e evitar erros).

Tenho que, antes do Update, fazer uma outra query e retirar os dados para variáveis que vou utilizar mais à frente neste Update?

Ou há outra forma de o fazer inserido no código que apresento?

Cumprimentos

Seabra

Share this post


Link to post
Share on other sites
Rechousa

Olá,

Pelo que vi, a sintaxe da tua função DateAdd está errada.

Fonte: http://www.webcheatsheet.com/SQL/access_functions/dateadd.php

Tenta assim:

cmd.CommandText = "UPDATE Viaturas SET Matricula=@Campo1,KmActuais=@Campo6,DataUltInspecao=@Campo5,KmUltInspecao=@Campo6,DataProxInspecao=DATEADD('d', DiasEntreInsp, DataUltInspecao) WHERE Matricula =@Campo1"

Pormenor:

Como estás a fazer a actualização do campo DataUltInspecao ao mesmo tempo que o vais usar para calcular a data da proxima inspeção, não sei se vais ter de fazer isso com duas query's separadas.

Espero ter ajudado.


Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Share this post


Link to post
Share on other sites
Seabra

Olá,

Pelo que vi, a sintaxe da tua função DateAdd está errada.

Fonte: http://www.webcheatsheet.com/SQL/access_functions/dateadd.php

Tenta assim:

cmd.CommandText = "UPDATE Viaturas SET Matricula=@Campo1,KmActuais=@Campo6,DataUltInspecao=@Campo5,KmUltInspecao=@Campo6,DataProxInspecao=DATEADD('d', DiasEntreInsp, DataUltInspecao) WHERE Matricula =@Campo1"

Pormenor:

Como estás a fazer a actualização do campo DataUltInspecao ao mesmo tempo que o vais usar para calcular a data da proxima inspeção, não sei se vais ter de fazer isso com duas query's separadas.

Espero ter ajudado.

Olá Rechousa

Tanta tinta para um problema tão insignificante!

De facto tens razão, os parâmetros da função estavam errados. Os exemplos que eu vi, embora fossem Access mas estavam mal. A forma que eu tinha era para SQLServer.

A actualização da data da ultima inspeção é enviada pelo respectivo parâmetro (Campo5).

Obrigado por tudo

Cumprimentos

Seabra

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.