Página 3 de 7
Tutorial de ADO
Enviado: 21 Mar 2016 08:49
por asimoes
Erro: 1 [MySQL][ODBC 3.51 Driver][mysqld-5.5.48]Incorrect date value: '28188-172-' for column 'INICIOVIG' at row 1 (0x80004005)
Erro: 2 [MySQL][ODBC 3.51 Driver][mysqld-5.5.48]Incorrect date value: '-25672-167' for column 'INICIOVIG' at row 1 (0x80004005)
Erro: 3 [MySQL][ODBC 3.51 Driver][mysqld-5.5.48]Incorrect date value: '28188-172-' for column 'INICIOVIG' at row 1 (0x80004005)
Erros com campo tipo Date nulo

- Screen Shot 03-21-16 at 08.47 AM.PNG (9.22 KiB) Exibido 11910 vezes
Tutorial de ADO
Enviado: 21 Mar 2016 14:22
por JoséQuintas
Achei esse uso estranho.
Prefiro assim:
Código: Selecionar todos
conn.Open
conn.Execute( "INSERT INTO tblClass ( clStudent, clClass, clPaid ) VALUES ( " + ;
ValueSql( lStudentID ) + ", " + ValueSql( Dt ) + ", 0 )" )
Existe um limite de data no SQL padrão, por isso não pode ser data zerada.
Data zerada é substituída por "NULL" na linha de comando, mas não sei dessa forma que está usando.
Tutorial de ADO
Enviado: 21 Mar 2016 14:28
por JoséQuintas
E dependendo da base de dados, aceita '0000-00-00', não sei do Oracle.
Também é mais prático, pra não se preocupar com formato de data, ou "nacionalidade" da data.
Tutorial de ADO
Enviado: 21 Mar 2016 14:53
por asimoes
Quintas,
No MySql aceita data '0000-00-00' estou com a última versão fazendo testes.
Desta forma funciona:
Código: Selecionar todos
cQuery:="INSERT INTO TESTE (CODIGO, DESCRICAO, DTCOBR) VALUES ('001', 'TESTE COM SQL', '0000-00-00')
oConnection:BeginTrans()
oConnection:Execute( cQuery )
oConnection:CommitTrans()
Com CreateParameter não está funcionando, aliás, tem situação que funciona, não sei o que é, pode ser até um bug
Com Createparameter não aceita a data '0000-00-00' na forma acima aceita

?
Tutorial de ADO
Enviado: 21 Mar 2016 14:56
por asimoes
Quintas,
Olha só no HeidiSql a data zerada!

- Screen Shot 03-21-16 at 02.55 PM.PNG (10.05 KiB) Exibido 11898 vezes
Tutorial de ADO
Enviado: 21 Mar 2016 15:01
por JoséQuintas
Com CreateParameter() deve passar pelo ADO Microsoft.
E na Microsoft não existe data 0000-00-00
Tutorial de ADO
Enviado: 21 Mar 2016 15:03
por asimoes
Quintas,
Não tem nada de estranho o uso com CreateParameter, você pode olhar a documentação aqui:
http://www.w3schools.com/asp/met_comm_c ... ameter.asp
O exemplo de uso tá no meu post.
Tutorial de ADO
Enviado: 21 Mar 2016 15:06
por asimoes
A minha string de conexão é esta, a não ser que tenha que usar outra.
Código: Selecionar todos
cConexao := "DRIVER={MySQL ODBC 3.51 Driver};"
cConexao += "server=" + AllTrim(cServidor)
cConexao += ";database=" + AllTrim(cBanco)
cConexao += ";uid=" + AllTrim(cUsuario)
cConexao += ";pwd=" + AllTrim(cSenha)
Tutorial de ADO
Enviado: 21 Mar 2016 15:19
por asimoes
Pessoal,
Tem como conectar ao MySql com provider, ao invès do conector ODBC?
Provider=MySQLProv;Location=ServerName;Data Source=mydb;User Id=myUsername;Password=myPassword;
Tutorial de ADO
Enviado: 21 Mar 2016 15:24
por JoséQuintas
Me chamou a atenção a sintaxe:
Código: Selecionar todos
Set objparameter=objcommand.CreateParameter (name,type,direction,size,value)
Está direcionado a VB, ASP, VBScript.
O MySQL aceita data zerada, mas o ADO não.
Por comando string, o ADO nem fica sabendo o que tem na string.
Faça uns testes isolados com cada campo pra ver o que acontece.
Como está usando diferente, vai ter que fazer testes.
De repente, checar o retorno de CreateParameter() pra ver se a função teve êxito.
Tutorial de ADO
Enviado: 21 Mar 2016 15:25
por JoséQuintas
Se não me engano, esse provider fica desativado em 64 bits, e é o mesmo do ADS.
Tutorial de ADO
Enviado: 21 Mar 2016 15:27
por JoséQuintas
Algum motivo especial pra complicar isso?
Tutorial de ADO
Enviado: 21 Mar 2016 16:48
por asimoes
Quintas,
Complicar é o meu lema, kkkk.
Eu queria saber como o HeidiSql se conecta com o MySql, usar provider, odbc, porque ele deixa editar um campo tipo date e permite informar '0000-00-00'
Eu segui o tutorial do Toledo para instalar o Mysql e o odbc, a algum tempo atrás eu instalei o oracle xe com provider oledb, com o mesmo programa que eu fiz usando createparameter com os bind '?' funcionou com data nula, a diferença é que no oracle não deixa colocar data '0000-00-00' é null mesmo.
Eu aproveitei o programa que fiz para fazer carga no oracle utilizando a mesma sintaxe.
Se não houver jeito, vou na forma tradicional como você postou.
Tutorial de ADO
Enviado: 21 Mar 2016 18:06
por asimoes
Achei essa informação:
Table 5.2 Connector/ODBC Option Parameters
Só resta saber se isso resolve o problema com createparameter/bind
E como configurar
https://docs.oracle.com/cd/E17952_01/co ... eters.html
Tutorial de ADO
Enviado: 21 Mar 2016 18:36
por JoséQuintas
Pois é...
Usar 0000-00-00 no MySQL é ficar diferente do resto do mundo.... rs
E tem mais essa: a data mínima
Não significa apenas data vazia, mas existe a menor data possível.
Nunca olhei qual era essa data.
Atenção à versão do odbc. Aí diz 3.51.17
O mais atual, dessa sequência, é 3.51.30
Dependendo do comando SQL, as versões antigas geram erro.
Nota:
A 3.51.30 é a mais recente (recente = alguns anos atrás)
E leva o nome da Oracle.

- oracle.png (3.23 KiB) Exibido 11891 vezes