Dúvida inserir data no MySql
Moderador: Moderadores
Dúvida inserir data no MySql
Na tabela Clientes, tenho os campos
IDCLI_COD, CLI_NOME, CLI_NASCEU
Se a variável nasceu = "", quero omitir esse campo no Insert, dessa forma automaticamente o campo CLI_NASCEU assumiria NULL
mas, não estou conseguindo, achei esse exemplo, estou tentando seguir essa lógica mas não sei se o MySql aceita tomar decisão
dentro do comando INSERT.
nasceu=""
sql = "INSERT INTO Clientes"
sql = sql & "(IDCLI_cod,"
If !( nasceu = "")
{
sql = sql &"Cli_Nasceu"
}
sql = sql & ") VALUES ("2010/10/10")
If !( nasceu = "")
{
sql = sql & ",'2010/10/10'"
}
sql = sql & ")"
IDCLI_COD, CLI_NOME, CLI_NASCEU
Se a variável nasceu = "", quero omitir esse campo no Insert, dessa forma automaticamente o campo CLI_NASCEU assumiria NULL
mas, não estou conseguindo, achei esse exemplo, estou tentando seguir essa lógica mas não sei se o MySql aceita tomar decisão
dentro do comando INSERT.
nasceu=""
sql = "INSERT INTO Clientes"
sql = sql & "(IDCLI_cod,"
If !( nasceu = "")
{
sql = sql &"Cli_Nasceu"
}
sql = sql & ") VALUES ("2010/10/10")
If !( nasceu = "")
{
sql = sql & ",'2010/10/10'"
}
sql = sql & ")"
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Dúvida inserir data no MySql
Ola!
Poter, crie o habito de criar as variáveis com uma letrinha em minúsculo informando o tipo.
Coloque seu código dentro das tags code e /code dentro dos colchetes [].
Use += para criar a string com o comando SQL.
assim:
Monte a sequencia cSQL e veja antes via alert() se está tudo ok.
Saudações,
Itamar M. Lins Jr.
Poter, crie o habito de criar as variáveis com uma letrinha em minúsculo informando o tipo.
Código: Selecionar todos
dNasceu := iif( empty(data),NULL,dData)Use += para criar a string com o comando SQL.
assim:
Código: Selecionar todos
dNasceu := iif( empty(data),NULL,dData)
cSQL := 'INSERT INTO Clientes (IDCLI_cod,cli_nasceu) Values ( '
cSql += ' " ' + xcod + ' ", '
cSql += ' " ' + dNasceu + ' " '
cSql += ' ) '
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Dúvida inserir data no MySql
Eu fui passando por fases ao fazer isso, procurando encontrar um jeito que acharia interessante.
Numa época, pra enxergar o comando, criava o comando e depois trocava partes.
Mas quando a lista é grande, não tem jeito, melhor algum recurso extra, criando os pares e depois montando o comando, e vale pra INSERT e UPDATE.
Aí que entra a classe.
Como é o comando SQL:
INSERT INTO tabela ( campos ) VALUES ( valores )
UPDATE tabela SET campo=valor, campo=valor, ... WHERE condição
Nos dois tem a lista de nomes e valores, então primeiro é guardar a lista em um array e depois completar.
No INSERT a lista é em duas partes, e no UPDATE tem também a condição
E nos dois tem a tabela.
Para o que mencionou, para omitir um campo, bastaria:
Mas lembre-se que na alteração vai ser obrigado a indicar valor, porque pode ser que o usuário está limpando o conteúdo anterior.
Se for montar direto, teria que colocar iif() nos dois locais, o que vai deixar o fonte de montagem do comando mais confuso, principalmente se tiver muitos campos, e vai facilitar o erro.
Percebe a diferença em enxergar os campos nos dois fontes?
Ou em conferir se a quantidade de nomes e valores está correta?
Pode ser interessante criar uma rotina pra isso, e poder colocar no fonte um "par" de cada vez, com nome e valor.
É apenas sugestão.
A minha está valendo pra mim até eu criar outra diferente.... rs
Numa época, pra enxergar o comando, criava o comando e depois trocava partes.
Código: Selecionar todos
cSql := "INSERT INTO CLIENTES ( IDCLI_CODCLI, CLI_NOME, CLI_NASCEU ) VALUES ( [CODIGO], [NOME], [NASCEU] )"
cSql := Replace( cSql, "[CODIGO]", StringSql( xCod ) )
cSql := Replace( cSql, "[NOME]", StringSql( xcli_nome) )
cSql := Replace( cSql, "[NASCEU]", DateSql( dNasceu ) )
Aí que entra a classe.
Como é o comando SQL:
INSERT INTO tabela ( campos ) VALUES ( valores )
UPDATE tabela SET campo=valor, campo=valor, ... WHERE condição
Nos dois tem a lista de nomes e valores, então primeiro é guardar a lista em um array e depois completar.
No INSERT a lista é em duas partes, e no UPDATE tem também a condição
E nos dois tem a tabela.
Código: Selecionar todos
WITH OBJECT cnMySql
:QueryCreate()
:QueryAdd( "IDCLI_CODCLI", xCod )
:QueryAdd( "CLI_NOME", xCli_nome )
:QueryAdd( "CLI_NASCEU", dNasceu )
:QueryExecuteInsert( "CLIENTES" )
// :QueryExecuteUpdate( "CLIENTES", "IDCLI_CODCLI=" + xCod )
END WITH
Código: Selecionar todos
IF ! Empty( dNasceu )
:QueryAdd( "CLI_NASCEU", dNasceu )
ENDIF
Se for montar direto, teria que colocar iif() nos dois locais, o que vai deixar o fonte de montagem do comando mais confuso, principalmente se tiver muitos campos, e vai facilitar o erro.
Código: Selecionar todos
cSql := "INSERT INTO CLIENTES ( IDCLI_CODCLI, CLI_NOME"
IF ! Empty( dDate )
cSql += ", CLI_NASCEU"
ENDIF
cSql += " ) VALUES ("
cSql += xCodCli + ", '" + cli_nome + "'"
IF ! Empty( dDate )
cSql += ", '" + hb_Dtoc( xCli_Nasceu, "YYYY-MM-DD" ) + "'"
ENDIF
cSql += ")"
Ou em conferir se a quantidade de nomes e valores está correta?
Pode ser interessante criar uma rotina pra isso, e poder colocar no fonte um "par" de cada vez, com nome e valor.
É apenas sugestão.
A minha está valendo pra mim até eu criar outra diferente.... rs
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Dúvida inserir data no MySql
Faltou dizer:
E pode colocar a parte de conversão na rotina que monta a string, menos coisa no fonte do aplicativo pra confundir.
É assim que uso.
E pode colocar a parte de conversão na rotina que monta a string, menos coisa no fonte do aplicativo pra confundir.
É assim que uso.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Dúvida inserir data no MySql
Um outro com mais campos.
Fica bonito de se ver... rs
Conversão só se for pra gravar número como string.
Tente imaginar montar esse comando INSERT "a mão", como ficaria o fonte.
Fica bonito de se ver... rs
Conversão só se for pra gravar número como string.
Tente imaginar montar esse comando INSERT "a mão", como ficaria o fonte.
Código: Selecionar todos
WITH OBJECT cnMySql
:QueryCreate()
:QueryAdd( "RECIBO", mRecibo10Recibo )
:QueryAdd( "NEXTRA", mNumExtrato )
:QueryAdd( "COD", mRecibo10Cod )
:QueryAdd( "LOCOD", mRecibo10LoCod )
:QueryAdd( "LOCNOME", mRecibo10LocNome )
:QueryAdd( "NOME", mRecibo10Nome )
:QueryAdd( "VALOR", mRecibo10Valor )
:QueryAdd( "DIA_VENC", mRecibo10Dia_Venc )
:QueryAdd( "DATA", mRecibo10Data )
:QueryAdd( "ALUGUELNP", mRecibo10AluguelNP )
:QueryAdd( "ALUGUELQP", mRecibo10AluguelQP )
:QueryAdd( "COM", mRecibo10Com )
:QueryAdd( "VALORCOMIS", mRecibo10ValorComis )
:QueryAdd( "TC", mRecibo10Tc )
:QueryAdd( "DB", mRecibo10Db )
:QueryAdd( "MES", mRecibo10Mes )
:QueryAdd( "MESTO", mRecibo10MesTo )
:QueryAdd( "EMITIDO", mRecibo10Emitido )
:QueryAdd( "ADIANTA", mRecibo10Adianta )
:QueryAdd( "TIPO", mRecibo10Tipo )
:QueryAdd( "PAGO", mRecibo10Pago )
:QueryAdd( "ANOBASE", StrZero( Year( mDataBaixa ), 4 ) )
:QueryAdd( "CRDATPAG", mDataBaixa )
:QueryExecuteInsert( "CORRENTE" )
END WITH
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
-
Cisino Junior
- Usuário Nível 2

- Mensagens: 67
- Registrado em: 14 Abr 2016 13:12
- Localização: Rio de Janeiro
Dúvida inserir data no MySql
Olá porter, se no schema da sua tabela MySQL o campo "CLI_NASCEU" está como not null, significa que é obrigatório que esse campo seja preenchido. Então, você pode fazer a validação no seu aplicativo, e verificar se o usuário entrou com o dado desse campo, ou, alterar o campo para que ele aceite valor nulos, ou seja, não será obrigatório que o valor desse campo seja passado no IINSERT, você também pode setar um valor default para o campo, mas não aconselho visto que é a data de nascimento de alguém. Não sei se foi você quem modelou o banco de dados, ou outra pessoa, mas não é boa prática deixar campos que aceitem null, revise o modelo conceitual do seu banco de dados. E já que o campo está como not null, faça a validação no seu aplicativo de todos os dados obrigatórios a serem cadastrados.porter escreveu:Se a variável nasceu = "", quero omitir esse campo no Insert, dessa forma automaticamente o campo CLI_NASCEU assumiria NULL
Atenciosamente,
Cisino Junior.
HMG 3.4.3 + DBF, Java, MySQL, PostgreSQL, PHP, JavaScript + HTML5 + CSS3, Bootstrap, Spring, Thymeleaf.
Dúvida inserir data no MySql
Boa tarde, estou migrando dados com o mysql 8 e estou recendo o seguinte erro Incorrect date value, tentei: "0000-00-00", "00000000", "", "NULL", "null" mesmo erro em todas a vezes, campo criado assim: data_ultima_compra date DEFAULT NULL, alguem passou por isso e pode ajudar-me.
HASA
HASA
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Dúvida inserir data no MySql
É NULL
e não 'NULL' nem "NULL"
e não 'NULL' nem "NULL"
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Dúvida inserir data no MySql
Boa tarde, Zé mas como monto o envio desse NULL, tentei com Macro e tbm não deu exemplo:
cNULL="NULL"
cSql := "INSERT INTO contador ( `id_contador`, `nome`, `dtcadastro` ) " +;
"VALUES ( '1' , '"+;
ALLTRIM( D_CONTAB->NOME ) +"' , '"+;
IF( CTOD( D_CONTAB->DTCADASTRO ), &cNULL, Data_sql( D_CONTAB->DTCADASTRO ) ) +"' ); "
Da erro: Erro BASE/1003 Vari vel nÆo existe: NULL
/* Executa Query */
oQuery := oServer:Query( cSql )
Não estou sabendo como enviar esse NULL, se eu coloco "NULL", para na execução da linha cSql, mas ao executar do o erro acima.
HASA
cNULL="NULL"
cSql := "INSERT INTO contador ( `id_contador`, `nome`, `dtcadastro` ) " +;
"VALUES ( '1' , '"+;
ALLTRIM( D_CONTAB->NOME ) +"' , '"+;
IF( CTOD( D_CONTAB->DTCADASTRO ), &cNULL, Data_sql( D_CONTAB->DTCADASTRO ) ) +"' ); "
Da erro: Erro BASE/1003 Vari vel nÆo existe: NULL
/* Executa Query */
oQuery := oServer:Query( cSql )
Não estou sabendo como enviar esse NULL, se eu coloco "NULL", para na execução da linha cSql, mas ao executar do o erro acima.
HASA
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Dúvida inserir data no MySql
Olá!
Se está migrando de DBF para SQL, tem que testar se o campo do DBF está vazio e não NULL. Se o campo do DBF estiver vazio, montar a query com NULL. Caso contrário, montar a query com o conteúdo do campo convertido para o formato SQL. Veja as alterações que fiz no teu código:
Testar se um campo contem o valor NULL é usado para testar dados retornados do banco de dados, por exemplo no retorno de um SELECT.
Lembrando que:
Lendo o código que postou, percebe-se que está misturando alhos com bugalhos...HASA escreveu:Boa tarde, estou migrando dados com o mysql 8 e...
Se está migrando de DBF para SQL, tem que testar se o campo do DBF está vazio e não NULL. Se o campo do DBF estiver vazio, montar a query com NULL. Caso contrário, montar a query com o conteúdo do campo convertido para o formato SQL. Veja as alterações que fiz no teu código:
Código: Selecionar todos
LOCAL cSQL
cSQL := "INSERT INTO contador ( `id_contador`, `nome`, `dtcadastro` ) VALUES ( '1' , '"
cSQL += ALLTRIM( D_CONTAB->NOME ) + "' , '"
cSQL += IF( EMPTY( D_CONTAB->DTCADASTRO ), "NULL", Data_sql( D_CONTAB->DTCADASTRO ) ) + " ); "Lembrando que:
Quando na definição da coluna da tabela existe a cláusula DEFAULT, não é obrigatório enviar valor para ela. Caso não envie, o valor DEFAULT é gravado durante o INSERT...HASA escreveu:data_ultima_compra date DEFAULT NULL
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Dúvida inserir data no MySql
Na prática, é só olhar as mensagens do tópico, tem lá a função DateSQL()
Como já foi dito, na inclusão não precisa, mas na alteração sim.
Talvez melhor acostumar a colocar sempre, mesmo na inclusão.
Perde essa mania de usar macro, não é pra ficar usando à toa, é só em último caso, em situações especiais.
Esquece que isso existe.
Mas.... criou a função DATA_SQL() pra converter data e tá colocando iif no comando
??
Sinal de que a função tá incompleta.
Sem macro e sem complicações.
Como já foi dito, na inclusão não precisa, mas na alteração sim.
Talvez melhor acostumar a colocar sempre, mesmo na inclusão.
Perde essa mania de usar macro, não é pra ficar usando à toa, é só em último caso, em situações especiais.
Esquece que isso existe.
Mas.... criou a função DATA_SQL() pra converter data e tá colocando iif no comando
Sinal de que a função tá incompleta.
Código: Selecionar todos
cSQL := "INSERT INTO TABELA ( DATA ) VALUES ( " + Data_Sql( dData ) + " )"
FUNCTION Data_SQL( dData )
IF Empty( dData )
RETURN "NULL"
ENDIF
RETURN ['] + hb_Dtoc( dData, "YYYY-MM-DD" ) + [']
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Dúvida inserir data no MySql
E isso de colocar crase:
Isso também é último caso, quando o nome do campo foge da regra geral, por exemplo, usar nome reservado.
O HeidiSQL usa isso pra tudo, mas de um modo geral é só trabalho extra e poluição.
Código: Selecionar todos
INSERT INTO TABELA ( `codigo`, `nome` )
O HeidiSQL usa isso pra tudo, mas de um modo geral é só trabalho extra e poluição.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Dúvida inserir data no MySql
- Boa tarde José e Alexandre, amanhã texto e com certeza ajeito minhas funções, desde já agradeço,
BOA PASCOA A TODOS!
HASA
BOA PASCOA A TODOS!
HASA
Dúvida inserir data no MySql
-Bom dia, gostaria de agradecer aos amigos pelas dicas, e deixar uma também, no meu caso a confusão se deu em ASPAS simpes e ASPAS duplas, estava fazendo certo, mas não respeitando a regra das aspas.
Valeu mesmo pessoal.
HASA
Valeu mesmo pessoal.
HASA
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Dúvida inserir data no MySql
Por isso acaba sendo interessante criar a função de conversão.HASA escreveu:-Bom dia, gostaria de agradecer aos amigos pelas dicas, e deixar uma também, no meu caso a confusão se deu em ASPAS simpes e ASPAS duplas, estava fazendo certo, mas não respeitando a regra das aspas.
Valeu mesmo pessoal.
Porque cada novo fonte pode conter o erro de aspas.
Além disso, tem caracteres que o MySQL não aceita, ou precisa algo especial.
Uma função StringSQL() pode facilitar acertar isso em tudo.
Por exemplo, um texto com aspas, ou um texto com ENTER, ou outros.
Caracteres especiais precisam da barra invertida antes de cada um.
[vamos ver o que 'temos']
vira
[vamos ver o que \'temos\']
Caracteres especiais não significa acentuados, é por exemplo esse da aspa simples, que delimita a string, e o MySQL não saberia como tratar isso no meio do texto, porque pra ele indica início e fim do texto.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
