erro de data SQL Server / HwGui

Forum sobre SQL.

Moderador: Moderadores

cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

erro de data SQL Server / HwGui

Mensagem por cjp »

Pessoal, alguém poderia me ajudar a descobrir onde estaria o erro neste trecho:

Código: Selecionar todos

cProc=cnSQL:execute("select texto from tabela where dtuso='"+alltrim(str(year(date())))+"-"+substr(dtoc(date()),4,2)+"-"+substr(dtoc(date()),1,2)+"'")
Tá dando o seguinte erro:
Error WINOLE/1007 [Microsoft][ODBC SQL Server Driver][SQL Server]Falha ao converter data e/ou hora da cadeia de caracteres. (0x80040E07): Microsoft OLE DB Provider for ODBC Drivers (DOS Error -2147352567)

Não dá erro se eu usar assim:

Código: Selecionar todos

cProc=cnSQL:execute("select texto from tabela where dtuso='2024-02-18')
Na tabela em questão, o campo dtuso é date.

Alguém poderia me ajudar?
Editado pela última vez por Itamar M. Lins Jr. em 18 Fev 2024 17:09, em um total de 1 vez.
Razão: O presente tópico foi movido da seção HwGui, uma vez que seu conteúdo não tem relação com os objetivos daquela seção, onde só podem constar dúvidas técnicas de programação diretamente relacionadas com a HwGui.
Inacio de Carvalho Neto
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

erro de data SQL Server / HwGui

Mensagem por alxsts »

Olá!

O erro certamente é consequência de uma malformação na tua string. Isto e fácil de ver. Basta exibir na tela o conteúdo dela...

Causa provável:

Qual o formato de data está ativo?

O padrão é mm/dd/aa (American). Se Set Century estiver ON será mm/dd/aaaa. Neste caso, para a data 02/18/2024 o teu codigo retornará 2024-18-02. Percebe que é uma data inválida? Não existe o mês número 18...

Soluções:

Inclua no teu código as linhas abaixo, caso não existam:

Código: Selecionar todos

SET DATE BRITISH
SET CENTURY ON
ou

Código: Selecionar todos

#include "set.ch"
Set ( _SET_DATEFORMAT, "dd/mm/yyyy" )
Com as formas acima, o teu código funcionará. Remova esta chamada à função AllTrim (). Nao tem necessidade dela. Mas... o teu código pode ser melhorado:

Formas mais práticas, sem precisar de nenhuma das alternativas acima:

Código: Selecionar todos

cProc=cnSQL:execute("select texto from tabela where dtuso='" + Transform( DtoS( Date() ), "@R 9999-99-99" ) + "'"
Ou

Código: Selecionar todos

cProc=cnSQL:execute("select texto from tabela where dtuso='" + Str( Year ( Date (), 4 ) + "-" + StrZero( Month ( Date () ) + "-" + StrZero( Day ( Date () ) + "'"
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

erro de data SQL Server / HwGui

Mensagem por JoséQuintas »

NÃO.
Acho esquisito, mas parece que é normal o Inácio esquecer das coisas.

Lembra ? acesso sem instalar nada, SQL Server poderia ser opção por vir pré-instalado no Windows, etc...
Esse erro é daquela época, e já recebeu ajuda naquela época.
Continua sendo o mesmo problema e a mesma solução: é defeito em certos clientes SQL Server, precisa instalar versão mais nova do cliente/ODBC.
Só mudou que agora postou em hwgui, e da outra vez era console e acho que foi por whatsapp.

O jeito dele converter a data também é perigoso, por obrigar o padrão Brasil.
Seria mais sensato usar Year(), Month() e Date(), ou o DTOS() igual mostrou, talvez defindo tamanhos pra evitar imprevistos,
Estes funcionam sempre, seja qual for o formato da data, só não resolvem quando o problema é no cliente/ODBC, ou a exceção de data vazia o fora do limite aceito.
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/
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

erro de data SQL Server / HwGui

Mensagem por sygecom »

Inacio,
Se estiver usando SQLRDD use a function sr_cdbvalue() para formatar os textos de variáveis, exemplo:

Código: Selecionar todos

cProc=cnSQL:execute("select texto from tabela where dtuso='"+sr_cdbvalue(date()))
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

erro de data SQL Server / HwGui

Mensagem por cjp »

Realmente, faltava o set date brit aqui, que uso sempre nos meus programas em console.
E realmente a solução com dtos() é bem melhor, funcionou super bem.
Não, Quintas, a questão aqui não é aquele problema do SQL Server que te pedi ajuda antes.
Não estou usando SQLRDD.
Agradeço muito a ajuda de todos.
Inacio de Carvalho Neto
Responder