Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

FabianoSouza

Insert de dado tipo datetime

Recommended Posts

Amigos, pesquisei no fórum e não achei tópico sobre o assunto.

 

Minha máquina de desenvolvimento está em Português, PT-BR, e os hosts estão em Inglês (lógico).

 

Por conta das configurações regionais de cada idioma estou com problema na hora de gravar data no banco.

 

Vejam o erro:

 

[Microsoft][ODBC SQL Server Driver]

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

 

Eu poderia contornar facilmente este problema usando um Mid ou Split e inverter os valores referentes ao dia e mês pra colocar no formato americano.

Mas isso me traria problemas quando rodar localmente.

 

 

O que preciso é de uma solução para que possa rodar o insert tanto local quanto remotamente. Precisaria "adivinhar" o idioma do servidor e fazer as devidas adequações na hora de gravar os dados.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é indiferente?

 

Trabalhe com elas no formato americano

 

Teve algum problemas assim?

 

Veja se ajuda em algo

 

http://forum.imasters.com.br/topic/224454-manipulando-data-no-sql-server-conteudo-alterado/

 

http://imasters.com.br/artigo/229/sql_server/trabalhando_com_datas_no_sql_server/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Retrolink, apenas colocando o Session.lcid = 1046 não rolou...dá o mesmo erro.

 

Vou ver os demais links que os colegas postaram.

 

Nossa...que doideira. Vejo sites falando que o formato americano de datas é MM/DD/AAAA

 

Meu SQL local armazena AAAA/MM/DD

 

Loucura loucura loucura hehehe.

 

Ainda to aqui apanhando...

 

Até criei um teste...

http://senior.websenior.net.br/add_data.asp aqui é a página do formulário

 

http://senior.websenior.net.br/add_data2.asp aqui é onde faz o insert e que tem o seguinte código

 

Session.Lcid = 1046
Dim varData
varData=Request.Form("txtData")

Set MM_conexao_STRING = Server.CreateObject("ADODB.Connection")
MM_conexao_STRING.ConnectionString ="dsn=********;uid=****;pwd=*****;" 
MM_conexao_STRING.Open

'Grava valores no banco de dados 
sqlInsert = "INSERT INTO TESTE (data) VALUES ('" & varData & "' )"
MM_conexao_STRING.Execute(sqlInsert)
Response.Redirect("add_data.asp")

Tentei gravar 25/12/2011 e deu pau...mas ele gravou 12/12/2011 pois entende que os dois primeiros dígitos é o MES (e não existe mês 25).

 

Bom, depois de ganhar uns fios de cabelos brancos acho que "resolvi" com uma função que achei por aí.

 

O f*** é que:

1) Se usar o LCID 1046 funciona local mas não funciona server, e se usar o 1033 é o inverso (q raiva!)

2) Tem que usar essa função FormataDt, senão o bicho não grava de jeito nenhum (no host, localmente funciona)

 

Aí se eu esquecer e substituir a página do host (q tem o LCID 1033) pela local (LCID 1046) a coisa pára de funcionar.

 

Queria não precisar me preocupar este este lance, pois substituir nas atualizações do site é a coisa mais fácil de acontecer.

 

Se alguém tiver algo mais simples, por favor, poste.

 

Obrigado a todos!

 

<%
Session.Lcid = 1033
Function [b]FormataDt[/b](Data)
Dim v
v = Right("0" & Mid(Data,4, 2),2) & "/" & Right("0" & Left(Data, 2),2) & "/" & DatePart("yyyy", Data)
v = CDate(v)
FormataDt = v
End Function


Dim varData
varData=FormataDt(Request.Form("txtData"))

Set MM_conexao_STRING = Server.CreateObject("ADODB.Connection")
MM_conexao_STRING.ConnectionString ="dsn=********;uid=**********;pwd=********;" 
MM_conexao_STRING.Open

'Grava valores no banco de dados 
sqlInsert = "INSERT INTO TESTE (data) VALUES ('" & varData & "' )"
MM_conexao_STRING.Execute(sqlInsert)
Response.Redirect("add_data.asp")

%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.