Ir para conteúdo
Fórum Script Brasil
  • 0

Erro cadastrar campo date


AlbertoRT

Pergunta

Tenho uma banco de dados um dos campos tipo date.

A página está em ASP interagindo com banco de dados MySQL.

A pág. inserir.asp

criei uma função assim:

<%
Function InverteDataMySql(data_inicio)
if not isdate(data_inicio) then exit function
if instr(data_inicio, " ") > 0 then
hora  = split(data_inicio, " ")(1)
end if
InverteDataMySql = year(cdate(data_inicio)) & "-" & month(cdate(data_inicio)) & "-" & day(cdate(data_inicio))
if hora <> "" then InverteDataMySql = InverteDataMySql & " " & hora
End Function 
%>

Chamei a função aqui:

<tr>
    	<td>Data Inicio:</td>
        <td>
         <input name="FormDataInicio" size="10" maxlength="80" value="<%=Response.Write(InverteDataMySql())%>"/>
        </td>
    </tr>

Entrando com a data por exemplo: 2017-07-11 ou 11/07/2017 abre o erro:

Erro: [MySQL][ODBC 3.51 Driver][mysqld-5.7.13-log]Incorrect date value: '' for column 'data_inicio' at row 1 

Obrigado

 

 

 

 

 

 

Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0

Emilio, Bom Dia,

Vou tentar de explicar melhor:

É seguinte:

  1. Tenho um banco de dados em MySQL, chamado integracao, com 1 (uma) tabela chamada Livros  com os campos "livro", "autor", "editora", todos com tipo de campo VARCHAR.
  2.  O objetivo desse sisteminha é fazer com que as páginas ASP com os nomes: "inserir.asp", "lista.asp" e "gerencia-registro.asp" venham a interagir com o banco de dados de forma que possa se "Incluir", "Alterar" e "Excluir" registros.
  3. Importante: Essa é uma proposta de um livro e tudo sendo feito conforme o livro funciona perfeitamente bem sem qualquer erro.
  4. Acontece que eu estou precisando aprender a fazer com MySQL e ASP,  Inclusões, Alterações e Exclusão com esses tipos de campos (VARCHAR), mas também com outros tipos de campos como por exemplo "Date". Aqui mora o meu problema que já dura semanas. 
  5. Emilio, fui orientado a colocar uma função no código. Coloquei, mas na hora de Editar para alterar dava erro no campo data. Depois sugeriram criar uma SQL que era mais simples, melhor...Criei assim por exemplo:  
  6. INSERT INTO livros (livro, autor, editora, DATE_FORMAT(data_inicio, '%d/%m/%Y') 
    VALUES ('EU TESTE', 'TU TESTE', 'ELES TESTES', 26/07/2017);
  7. Não funciona só mostra Erro syntax.

  8. Não se devo colocar as HTML e ASP para um melhor entendimento.

  9. Página inserir.asp

  10. <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    
    <%
     ' Dados para a conexão com o banco de dados
     driver   = "{MySQL ODBC 3.51 Driver}" ' Driver para conexão ODBC
     servidor = "localhost"                ' Nomw DNS ou IP do seu servidor HTTP
     usuario  = "root"                     ' Nome de usuário para acesso ao MySQL
     senha    = "admin"                    ' Senha de acesso
     banco    = "integracao"               ' Nome do banco de dados
     
     ' Cria um objeto de conexão com banco de dados
     Set cnnDB = Server.CreateObject("ADODB.Connection")
     
     ' Cria a strind de conexão
     connStr = "driver=" + driver + "; uid=" + usuario + "; "
     connStr = connStr + "pwd=" + senha + "; database=" + banco
     
     'Set a string de conexão e realiza a conexão
     cnnDB.ConnectionString = connStr
     cnnDB.Open
    
     ' Caso ocorra um erro, prossiga até o tratamento de erro
     On error resume next
     
     ' Verifica se o arquivo foi chamado a partir de um formulário
     If Request.QueryString("acao") = "editar" then
     
     ' Cria a expressão que captura os dados do registro a ser alterado
      sql = "SELECT * FROM livros WHERE id = " 
      sql = sql + Request.QueryString("buscacodigo")
     
      ' Cria um objeto para armazenar o retorno da consulta
      Set rs = Server.CreateObject("ADODB.Recordset")
    
      ' Ativa a conexão criada para ResultSet
      Set rs.ActiveConnection = cnnDB
      
      'Execute a expressão SQL no servidor
      rs.Open sql
      
      'Armazena os valores capturados em variáveis auxiliares, se existir
      Codigo      = rs("id")
      Livro       = rs("livro")
      Autor       = rs("autor")
      Editora     = rs("editora")
      data_inicio = rs("data_inicio")
        
      End if
    %>
    
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Gerenciando Registros</title>
    </head>
    
    <body>
     Preencha os campos abaixo:
     <%
      If Request.QueryString("acao") = "editar" then
       acao = "editar"
      Else
       acao = "adicionar"	
     End if
     %>
      <form method="POST" action="gerencia-registro.asp?acao=<%=acao%>">
      <input type="hidden" name="FormCodigoLivro" value="<%=Codigo%>" />
      <table>
       <tr>
        <td>Nome do Livro:</td>
        <td>
         <input name="FormNomeLivro" size="80" maxlength="64" value="<%=Livro%>" />
        </td> 
       </tr>
       
       <tr>
        <td>Nome do Autor:</td>
        <td>
         <input name="FormNomeAutor" size="80" maxlength="100" value="<%=Autor%>"  />
        </td>
       </tr>
       
       <tr>
        <td>Nome da Editora:</td>
        <td>
         <input name="FormNomeEditora" size="60" maxlength="80" value="<%=Editora%>" />
        </td>
       </tr>
       
       <tr>
        <td>Data Inicio:</td>
        <td>
         <input name="FormDataInicio" size="15" maxlength="15" value="<%=data_inicio%>" />
        </td>
       </tr>
          
       <tr>
        <td colspan="2" align="right">
         <input type="reset" value="Limpar" />
    <%     
       if Request.QueryString("acao") = "editar" then 
         NomeBotao = "Alterar"
       Else
        NomeBotao = "Cadastrar"
       End if
    %> 
    	 <input type="submit" value="<%=NomeBotao%>" />
        </td>
       </tr> 
      </table>
      </form>
    </body>
    </html>

     

  11.  Página gerencia-registro.asp.
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<%
 ' Dados para a conexão com o banco de dados
 driver   = "{MySQL ODBC 3.51 Driver}" ' Driver para conexão ODBC
 servidor = "localhost"                ' Nomw DNS ou IP do seu servidor HTTP
 usuario  = "root"                     ' Nome de usuário para acesso ao MySQL
 senha    = "admin"                    ' Senha de acesso
 banco    = "integracao"               ' Nome do banco de dados
 
 ' Cria um objeto de conexão com banco de dados
 Set cnnDB = Server.CreateObject("ADODB.Connection")
 
 ' Cria a strind de conexão
 connStr = "driver=" + driver + "; uid=" + usuario + "; "
 connStr = connStr + "pwd=" + senha + "; database=" + banco
 
 'Set a string de conexão e realiza a conexão
 cnnDB.ConnectionString = connStr
 cnnDB.Open
 
 ' Caso ocorra um erro, prossiga até o tratamento de erro
 On error resume next


 ' Verifica se o arquivo foi chamado a partir de um formulário
 If Request.QueryString("acao") = "adicionar" then
 	sql = "INSERT INTO livros (livro, autor, editora, data_inicio) VALUES ("
	sql = sql & "'" & Request.Form("FormNomeLivro")   & "', "
	sql = sql & "'" & Request.Form("FormNomeAutor")   & "', "
	sql = sql & "'" & Request.Form("FormNomeEditora") & "', "
	sql = sql & "'" & Request.Form("FormDataInicio")  & "' "
	sql = sql & ")" 	 
 
 'Exucuta a expressão SQL no servidor
 cnnDB.Execute sql

'Verifica o sucesso da operação, baseada na variável 'err'
 If err.number = 0 then
	Response.Write("Operação realizada com sucesso")
 Else
	Response.Write("Erro: " + err.description)
 End if

 'Executa a alteração do registro, se solicitada
  Elseif Request.QueryString("acao") = "editar" then
   sql = "UPDATE livros SET "
   sql = sql & "livro       = '" & Request.Form("FormNomeLivro")   & "', "
   sql = sql & "autor       = '" & Request.Form("FormNomeAutor")   & "', "
   sql = sql & "editora     = '" & Request.Form("FormNomeEditora") & "', "
   sql = sql & "data_inicio = '" & Request.Form("FormDataInicio")  & "' "
   sql = sql & "WHERE id    =  " & Request.Form("FormCodigoLivro") 

 'Executa a expressão SQL no servidor
  cnnDB.Execute sql 
  
 ' Verifica o sucesso da operação, baseada na variável 'err'
 If err.number = 0 then
  Response.Write("Operação realizada com sucesso")
 Else
   Response.Write("Erro: " + err.description)
 End if

 ' Execute a exclusão do registro se solicitada
 Elseif Request.QueryString("acao") = "excluir" then
  sql = "DELETE FROM livros WHERE id = " 
  sql = sql & Request.QueryString("buscacodigo")
  
  ' Executa a expressão SQL no servidor
 cnnDB.Execute sql

 ' Verifica o sucesso da operação, baseada na variável 'err'
  If err.number = 0 then
   Response.Write("Operação realizada com sucesso")
  Else
   Response.Write("Erro: " + err.description)
 End if 

End if

%>

<br /><a href="inserir.asp">Clique aqui para inserir um novo registro.</a>
<br /><a href="lista.asp">Clique aqui para visualizar os registros.</a>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
</body>
</html>

 

12. Página lista.asp

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<%
  ' Dados para a conexão com o banco de dados
 driver   = "{MySQL ODBC 3.51 Driver}" ' Driver para conexão ODBC
 servidor = "localhost"                ' Nomw DNS ou IP do seu servidor HTTP
 usuario  = "root"                     ' Nome de usuário para acesso ao MySQL
 senha    = "admin"                    ' Senha de acesso
 banco    = "integracao"               ' Nome do banco de dados
 
 ' Cria um objeto de conexão com banco de dados
 Set cnnDB = Server.CreateObject("ADODB.Connection")
 
 ' Cria a strind de conexão
 connStr = "driver=" + driver + "; uid=" + usuario + "; "
 connStr = connStr + "pwd=" + senha + "; database=" + banco
 
 'Set a string de conexão e realiza a conexão
 cnnDB.ConnectionString = connStr
 cnnDB.Open

' Cria a expressão SQL de consulta 
sql = "SELECT * FROM livros ORDER BY livro ASC"

'Cria um objeto para armazenar o retorno da consulta,
'conhecido como ResultSet (Conjunto de Resultado)
Set rs = Server.CreateObject("ADODB.RecordSet")

'Ativa a conexão criada para o Resultado
Set rs.ActiveConnection = cnnDB

'Executa a expressão SQL no servidor
rs.Open sql

%>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Lista</title>
</head>

<body>
<table border="1" cellpadding="1" cellspacing="0">
 <tr align="center" bgcolor="#999999">
  <td width="10%">Cód.</td>
  <td width="10%">Livro</td>
  <td width="10%">Autor</td>
  <td width="10%">Editora</td>
  <td width="5%">Data Início</td>
 </tr>

<% 
 ' Executa um while para navegar nos registros de retorno
 while not rs.EOF
 	Codigo      = rs("id")
	Livro       = rs("livro")
	Autor       = rs("autor")
	Editora     = rs("editora")
	Data_inicio = rs("data_inicio")
%>

	<tr>
     <td><%=Codigo%>
      <a href='inserir.asp?acao=editar&buscacodigo=<%=Codigo%>'>
	  (Editar)</a>
	  <a href='gerencia-registro.asp?acao=excluir&buscacodigo=<%=Codigo%>'>
	  (Excluir)</a></td>
     <td><%=Livro%></td>
     <td><%=Autor%></td>
     <td><%=Editora%></td>
     <td><%=data_inicio%></td>
   </tr>

<%

 ' Avança para o próximo registro
 rs.MoveNext
 
 ' Fim do while
 Wend

%>

</table>
<br  /><a href="inserir.asp">Clique aqui para inserir um novo registro.</a>
</body>
</html>

13. Volto a afirmar que se retirar o campo data_inicio  de todos os códigos tudo funciona perfeitamente. Meu problema é a questão incluir um campo "Date" no MySQL e interagir com as páginas (sabemos que campo Date é assim 2017-07-27 formatado.

14. Por último vou colocar a função que me sugeriram que gerou problema e não funcionou na Edição (Alterar").

Função:

<%
Function InverteDataMySql(data_inicio)
if not isdate(data_inicio) then exit function
if instr(data_inicio, " ") > 0 then
hora  = split(data_inicio, " ")(1)
end if
InverteDataMySql = year(cdate(data_inicio)) & "-" & month(cdate(data_inicio)) & "-" & day(cdate(data_inicio))
if hora <> "" then InverteDataMySql = InverteDataMySql & " " & hora
End Function 
%>

Obrigado. Desculpe ficou muito grande a postagem.   

 

 

 

Link para o comentário
Compartilhar em outros sites

  • 0
Nesse seu insert:

INSERT INTO livros (livro, autor, editora, DATE_FORMAT(data_inicio, '%d/%m/%Y') 
VALUES ('EU TESTE', 'TU TESTE', 'ELES TESTES', 26/07/2017);

Tenta usar o STR_TO_DATE. Assim:

INSERT INTO livros (livro, autor, editora, data_inicio
VALUES ('EU TESTE', 'TU TESTE', 'ELES TESTES', STR_TO_DATE('26/07/2017', '%d/%m/%Y');

Se não me engano, DATE_FORMAT é usado para consultas. Assim:

SELECT livro, autor, editora, DATE_FORMAT(data_inicio, '%d/%m/%Y') 'data início' FROM livros;

 

Link para o comentário
Compartilhar em outros sites

  • 0

Emilio,

Obrigado pela atenção:
Tentei isso:

INSERT INTO livros (livro, autor, editora, data_inicio
VALUES ('EU TESTE', 'TU TESTE', 'ELES TESTES', STR_TO_DATE('26/07/2017', '%d/%m/%Y');

Deu esse erro:

Query: INSERT INTO livros (livro, autor, editora, data_inicio) VALUES ('EU TESTE', 'TU TESTE', 
'ELES TESTES', STR_TO_DATE('26/07/2017',...
Error Code: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL 
server version for the right syntax to use near '' at line 2

Achei que poderia ser a ( ' ') retirei, mas continua o erro.

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

Opa! Faltou fechar 2 parenteses. Um dos atributos e outro dos valores.

Quando te enviei da última vez, estava usando o celular, e fica meio ruim de enxergar.

Tenta assim:

INSERT INTO livros (livro, autor, editora, data_inicio) VALUES ('EU TESTE', 'TU TESTE', 'ELES TESTES', STR_TO_DATE('26/07/2017', '%d/%m/%Y'));

 

As aspas só não são obrigatórias para tipos de dados explicitamente definidos (no banco) como numéricos.

Link para o comentário
Compartilhar em outros sites

  • 0

Emilio,
Sensacional, digitei a SQL diretamente no banco com toda fé que iria rodar e rodou com sucesso.
Salvou!!! sem erro de data, ficou assim 2017-07-27.
Agora, posso entra com essa SQL aqui no formulário:

No INSERT INTO

 ' Verifica se o arquivo foi chamado a partir de um formulário
 If Request.QueryString("acao") = "adicionar" then
 	sql = "INSERT INTO livros (livro, autor, editora, data_inicio) VALUES ("
	sql = sql & "'" & Request.Form("FormNomeLivro")   & "', "
	sql = sql & "'" & Request.Form("FormNomeAutor")   & "', "
	sql = sql & "'" & Request.Form("FormNomeEditora") & "', "
	sql = sql & "'" & Request.Form("FormDataInicio")  & "' "
	sql = sql & ")" 	 

No UPDATE

'Executa a alteração do registro, se solicitada
  Elseif Request.QueryString("acao") = "editar" then
   sql = "UPDATE livros SET "
   sql = sql & "livro       = '" & Request.Form("FormNomeLivro")   & "', "
   sql = sql & "autor       = '" & Request.Form("FormNomeAutor")   & "', "
   sql = sql & "editora     = '" & Request.Form("FormNomeEditora") & "', "
   sql = sql & "data_inicio = '" & Request.Form("FormDataInicio")  & "' "
   sql = sql & "WHERE id    =  " & Request.Form("FormCodigoLivro") 

Emilio, desculpe e muito obrigado. Estou há semanas tentando e não conseguia.
Essa sua informação foi fantástica.
Abs
 

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

Emilio,

Por favor, poderia me mostrar como ficaria no formulário, a SQL do INSERT INTO  e no UPDATE.

A) no INSERT INTO digitei a SQL assim:

' Verifica se o arquivo foi chamado a partir de um formulário
 If Request.QueryString("acao") = "adicionar" then
 	sql = "INSERT INTO livros (livro, autor, editora, STR_TO_DATE(data_inicio, '%d/%m/%Y')) VALUES ("
	sql = sql & "'" & Request.Form("FormNomeLivro")   & "', "
	sql = sql & "'" & Request.Form("FormNomeAutor")   & "', "
	sql = sql & "'" & Request.Form("FormNomeEditora") & "', "
	sql = sql & "'" & Request.Form("FormDataInicio")  & "' "
	sql = sql & ")" 	 
 

Entrei com um registro deu esse erro:

 

Erro: [MySQL][ODBC 3.51 Driver][mysqld-5.7.13-log]You have an 
error in your SQL syntax; check the manual that corresponds to your MySQL 
server version for the right syntax 
to use near '(data_inicio, '%d/%m/%Y')) VALUES ('Livro Teste ', 'Teste da Silva', 'Teste SA',' at line 1 

Você demonstrou que é possível diretamente através da SQL, mas estou me arrolando todo para colocar no formulário. 

Não estou conseguindo só mostra Erro.

Muito obrigado Emilio.

Abs.

Editado por AlbertoRT
COMPLETAR
Link para o comentário
Compartilhar em outros sites

  • 0

Acho que é isso:

sql = "INSERT INTO livros (livro, autor, editora, data_inicio) VALUES ("
sql = sql & "'" & Request.Form("FormNomeLivro")   & "', "
sql = sql & "'" & Request.Form("FormNomeAutor")   & "', "
sql = sql & "'" & Request.Form("FormNomeEditora") & "', "
sql = sql & "STR_TO_DATE('" & Request.Form("FormDataInicio")  & "', '%d/%m/%Y') "
sql = sql & ")" 	
sql = "UPDATE livros SET "
sql = sql & "livro       = '" & Request.Form("FormNomeLivro")   & "', "
sql = sql & "autor       = '" & Request.Form("FormNomeAutor")   & "', "
sql = sql & "editora     = '" & Request.Form("FormNomeEditora") & "', "
sql = sql & "data_inicio = STR_TO_DATE('" & Request.Form("FormDataInicio")  & "', '%d/%m/%Y') "
sql = sql & "WHERE id    =  " & Request.Form("FormCodigoLivro") 

Você precisa usar o STR_TO_DATE() nos valores.

Editado por Emilio Ferreira
Link para o comentário
Compartilhar em outros sites

  • 0

Você consegui!!!! Você consegui!

Olha aqui a cópia da lista editada. Tudo FUNCIONANDO!!!

Cód. 	Livro 	Autor 	Editora 	Data Início
25 (Editar) (Excluir) 	06 - cadastro 	06 - cadastro 	06 - cadastro 	28/07/2017
26 (Editar) (Excluir) 	07 - cadastro 25/07/2017 	07 - cadastro 25/07/2017 	07 - cadastro 25/07/2017 	25/07/2017
33 (Editar) (Excluir) 	Emilio, SALVE! SALVE 	Emilio 	Emilio SA 	28/07/2017

O código 33 foi com SQL do Emilio. Tudo correto!!!
Gente guardem bem ESSA SQL. NÃO SE ENCONTRA nem em livros EU AFIRMO.

Muito bem Emilio. Sugiro escrever um livro JÁ!!!!!!!!!

Obrigado Emilio e muito SUCESSO para você!!!!

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...