Jump to content
dipacheco

usar string com data para fazer cálculos!

Recommended Posts

dipacheco

Boas pessoal... então é assim! Tenho dois campos numa tabela que se chama datai e dataf, definidos como strings. esses campos sao preenchidos atraves do vb com o comando now! ou seja, ficam com valor deste tipo "28-02-2011 14:25"...

Eu precisava de arranjar um metodo para fazer dataf - datai e calcular o tempo mas como sao strings nao está a permitir. Alguma alternativa?

Share this post


Link to post
Share on other sites
dipacheco

deu-me este erro ao correr o programa...

The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.

Share this post


Link to post
Share on other sites
Rechousa

Olá,

Existem seis tipos de dados para guardar Data / Hora em SQL Server 2008.

http://msdn.microsoft.com/en-us/library/ms186724.aspx

Pelo exemplo que deste o SMALLDATETIME é suficiente. Caso contrario aconselho a usares o tipo de dados DATETIME.

Posteriormente podes usar a função do SQL Server DATEDIFF (http://msdn.microsoft.com/en-us/library/ms189794.aspx) para os cálculos.

Para apresentação das datas em .Net coloco um exemplo em C# (mas é semelhante em VB.Net):

DateTime agora = DateTime.Now;
MessageBox.Show(agora.ToString("yyyy-MM-dd HH:mm"));

Espero ter ajudado.


Pedro Martins

Sharing is Knowledge!

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

Share this post


Link to post
Share on other sites
Rechousa

deu-me este erro ao correr o programa...

The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.

Significa que tens um campo do tipo char e tens uma data lá dentro que é inválida.

Mais um motivo para usares colunas do tipo SMALLDATETIME ou DATETIME.


Pedro Martins

Sharing is Knowledge!

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

Share this post


Link to post
Share on other sites
dipacheco

mas já estao como smalldatetime...

e depois quando faço o insert via vb.net faço qlq coisa:

insert into tabela (datai) values (' & datetime.now & "'"

e dá esse erro

Share this post


Link to post
Share on other sites
Caça

O erro que está a dar é do formato da hora, deverias parametrizar a query, caso contrario:

Para inserir

MM-dd-yyyy hh-mm-ss

para consultar

yyyy-MM-dd hh-mm-ss


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Caça

Tens de formatar a data

insert into tabela (datai) values ('" & Format(DateTime.Now, "MM-dd-yyyy hh-mm-ss") & " '


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Rechousa

Ohh, não pode! Estás a fazer qualquer coisa mal.

Não estarás a esquecer-te de colocar as colunas que pretendes inserir?

Este exemplo funciona com e sem definição das colunas:

DECLARE @Tabela TABLE
(
	id INT IDENTITY(1, 1),
	DataHora SMALLDATETIME
);

INSERT INTO @Tabela VALUES (GETDATE());
INSERT INTO @Tabela (DataHora) VALUES (GETDATE());

SELECT * FROM @Tabela;


Pedro Martins

Sharing is Knowledge!

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

Share this post


Link to post
Share on other sites
jpaulino

nao é por ai! o erro mantem-se!

Deves usar parameters para evitar esse problema, no entanto o formado do SQL é "yyyy-MM-dd" e não "MM-dd-yyyy" como o Caça indicou.

Já pensaste em usar Entity Framework?

Share this post


Link to post
Share on other sites
dipacheco

nao posso usar o getdate porque uma das datas nao é com o datetime.now, ou melhor, é mas nao é naquela hora! passo uma hora por parametro e outra com o datetime.now do momento! para ficar com uma hora de abertura do form e com outra do fecho!

Share this post


Link to post
Share on other sites
dipacheco

basicamente o q estou a fazer é isto...

nota... no menuconsulta tnh um textbox3 q é preenchido com Format(Datetime.now, "yyyy-MM-dd hh:mm:ss")

insert = "INSERT INTO Consulta (DataI,DataF,Login) VALUES ('" & menuconsulta.TextBox3.Text & "','" & Format(DateTime.Now, "yyyy-MM-dd hh:mm:ss") & "','" & Login.TextBox1.Text & "')"
                    command = New SqlCommand(insert, connect)
                    command.ExecuteNonQuery()

e ele dá smp o mesmo erro!

Share this post


Link to post
Share on other sites
Caça

Vejo que estás a inserir duas datas e apenas estás a formatar uma delas


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
dipacheco

mas olha q é provavel...

agora deu isto!

Conversion failed when converting character string to smalldatetime data type.

Share this post


Link to post
Share on other sites
Caça

Já te certificaste se os valores que estás a ir buscar ao outro form vem preenchidos?


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.