Possivel incopatibilidade CreateObject harbour x xHarbour

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

ivanil.marcelino
Usuário Nível 1
Usuário Nível 1
Mensagens: 8
Registrado em: 26 Jul 2017 09:08
Localização: Floripa/sc

Possivel incopatibilidade CreateObject harbour x xHarbour

Mensagem por ivanil.marcelino »

Boa tarde Colegas,
Estou tentando migrar do xharbour para o harbour e estou com o seguinte problema:
Atualmente uso o ADOdb invocado pela Função CreateObject.

Ocorre que aplicada a consulta abaixo no Xharbour, retorna resultado, se vou diretamente no Access e executo internamente também retorna, no entanto no Harbour nada retorna.

Select Texto from Formularios where cod in(0,12) and codigo= 68 and validade=#2019-02-12 10:57:02#


O campo validade é do tipo datetime, quando a consulta é apenas uma data #9999-12-31# cheia sem o horário funciona nos três sistemas, com horário funciona apenas no xharbour e no próprio Access.

Alguém por acaso faz uso de consulta utilizando um campo datetime no harbour e o faz com sucesso?

Versão do harbour: Harbour 3.2.0dev (r1901151150)
Compilador: MinGW GNU C 8.1 (32-bit)

o xHarbour está compilado com o Borland 5.5


Grato

Ivanil
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Possivel incopatibilidade CreateObject harbour x xHarbour

Mensagem por JoséQuintas »

Sinceramente... me admira funcionar no XHarbour kkkkk

Código: Selecionar todos

cn := win_OleCreateObject( "ADODB.Connection" )
cn:ConnectionString := "....."

Rs := cn:Execute( "SELECT ...." )
DO WHILE ! Rs:Eof()
   ? rs:Fields( "CAMPODATA" ):Value
   rs:MoveNext()
ENDDO
rs:Close()
cn:Close()
Só a título de curiosidade, não significa problema, mas esse Harbour não é oficial. mingw 8.1 não é usado oficialmente nem no Harbour 3.4.
Aqui eu uso Harbour 3.4 com mingw 8.1, mas oficialmente não chegou a essa versão de mingw.
Como eu disse, é apenas pra curiosidade. Uso faz tempo e não tenho problema com isso.
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/
ivanil.marcelino
Usuário Nível 1
Usuário Nível 1
Mensagens: 8
Registrado em: 26 Jul 2017 09:08
Localização: Floripa/sc

Possivel incopatibilidade CreateObject harbour x xHarbour

Mensagem por ivanil.marcelino »

Pois é meu amigo,

Mas veja bem, este exemplo que postaste não é o problema, o problema esta no retorno da consulta, para fazer funcionar aqui tive alterar o final da consulta de:

Select Texto from Formularios where cod in(0,12) and codigo= 68 and validade=#2019-02-12 10:57:02#

para

Select Texto from Formularios where cod in(0,12) and codigo= 68 and validade>#2019-02-12 10:57:01# and and validade<#2019-02-12 10:57:03# assim funcionou normal, mas quando alguém de fora lê um código assim, minha orelha deve queimar...

Eu estava usando o CreateObject diretamente, acredito que seja o mesmo win_createObject, mas vou trocar e ver o resultado.

Grato

Ivanil
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Possivel incopatibilidade CreateObject harbour x xHarbour

Mensagem por JoséQuintas »

Numa pesquisa no google:

Código: Selecionar todos

SELECT * FROM 
data 
WHERE datetime BETWEEN('2009-10-20 00:00:00' AND '2009-10-20 23:59:59')
ORDER BY datetime DESC
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/
ivanil.marcelino
Usuário Nível 1
Usuário Nível 1
Mensagens: 8
Registrado em: 26 Jul 2017 09:08
Localização: Floripa/sc

Possivel incopatibilidade CreateObject harbour x xHarbour

Mensagem por ivanil.marcelino »

Vou postar um código, quem puder testar de repente é algo apenas em conflito de versões, como o amigo Quintas já mencionou.

Código: Selecionar todos

Function Main
   Local cSQL,rs,i:=0
   Local cn:=win_OleCreateObject("ADODB.Connection")
   Local cx:=win_OleCreateObject("ADOX.Catalog")
   cx:Create("Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Engine Type=5;Data Source=c:\temp\teste.mdb")
   cn:ConnectionString:="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\temp\teste.mdb"
   cn:open()
   cSQL:="CREATE TABLE Formularios("+;
          "codigo Int not Null,"+;
          "Validade SmallDateTime not Null,"+;
          "CONSTRAINT PK_Formularios Primary Key (codigo))"
   cn:Execute(cSQL)
   cn:Execute("insert into Formularios (codigo,validade) values (1,'2019-02-12 01:52:01');")
   cn:Execute("insert into Formularios (codigo,validade) values (2,'2019-02-12 01:52:02');")
   cn:Execute("insert into Formularios (codigo,validade) values (3,'2019-02-12 01:52:03');")
   rs:=cn:Execute("Select * from Formularios")
   While !Rs:Eof()
      ?(str(rs:Fields["codigo"]:value,3)+cSTR(rs:fields["validade"]:value))
      rs:moveNext()
   enddo

   //Em harbour nao encontra...porém tanto xharbour como o próprio access encontra normalmente
   rs:=cn:Execute("Select validade from formularios where validade=#2019-02-12 01:5:02#")
   if rs:Eof()
      Alert("Nada encontrado...")
   else
      alert(cStr(rs:Fields[0]:value))
   endif

   //única forma de harbour encontrar, usando um intervalo...
   rs:=cn:Execute("Select validade from formularios where validade >#2019-02-12 01:52:01# and validade<#2019-02-12 01:52:03#")

   if rs:Eof()
      Alert("Nada encontrado...")
   else
      alert(cStr(rs:Fields[0]:value))
   endif
   
   While !Rs:Eof()
      i++
      rs:Movenext()
   enddo
   alert("encontrado "+str(i)+" vezes")
   cn:close()
Return .t.
Responder