AlbertoRT Postado Julho 11, 2017 Denunciar Share Postado Julho 11, 2017 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Emilio Ferreira Postado Julho 27, 2017 Denunciar Share Postado Julho 27, 2017 Você está passando alguma data como parâmetro quando chama a função? Exemplo: <%=Response.Write(InverteDataMySql('2017-07-11'))%> Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 AlbertoRT Postado Julho 27, 2017 Autor Denunciar Share Postado Julho 27, 2017 Emilio, Bom Dia, Vou tentar de explicar melhor: É seguinte: 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. 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. Importante: Essa é uma proposta de um livro e tudo sendo feito conforme o livro funciona perfeitamente bem sem qualquer erro. 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. 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: INSERT INTO livros (livro, autor, editora, DATE_FORMAT(data_inicio, '%d/%m/%Y') VALUES ('EU TESTE', 'TU TESTE', 'ELES TESTES', 26/07/2017); Não funciona só mostra Erro syntax. Não se devo colocar as HTML e ASP para um melhor entendimento. Página inserir.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") = "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> 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Emilio Ferreira Postado Julho 27, 2017 Denunciar Share Postado Julho 27, 2017 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; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 AlbertoRT Postado Julho 27, 2017 Autor Denunciar Share Postado Julho 27, 2017 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Emilio Ferreira Postado Julho 27, 2017 Denunciar Share Postado Julho 27, 2017 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 AlbertoRT Postado Julho 27, 2017 Autor Denunciar Share Postado Julho 27, 2017 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Emilio Ferreira Postado Julho 28, 2017 Denunciar Share Postado Julho 28, 2017 É isso aí, Alberto. Fico feliz por ter ajudado! Sucesso na sua empreitada!! Abraços. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 AlbertoRT Postado Julho 28, 2017 Autor Denunciar Share Postado Julho 28, 2017 (editado) 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 Julho 28, 2017 por AlbertoRT COMPLETAR Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Emilio Ferreira Postado Julho 28, 2017 Denunciar Share Postado Julho 28, 2017 (editado) 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 Julho 28, 2017 por Emilio Ferreira Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 AlbertoRT Postado Julho 28, 2017 Autor Denunciar Share Postado Julho 28, 2017 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ê!!!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Emilio Ferreira Postado Julho 28, 2017 Denunciar Share Postado Julho 28, 2017 hAHa Imagina! Valeu, Alberto! Sucesso pra você, também! Aquele abraço. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
AlbertoRT
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:
Chamei a função aqui:
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
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.