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
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
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
Screen Shot 03-21-16 at 06.04 PM.PNG

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
oracle.png (3.23 KiB) Exibido 11891 vezes