Página 1 de 1
Possivel incopatibilidade CreateObject harbour x xHarbour
Enviado: 12 Fev 2019 16:06
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
Possivel incopatibilidade CreateObject harbour x xHarbour
Enviado: 12 Fev 2019 20:42
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.
Possivel incopatibilidade CreateObject harbour x xHarbour
Enviado: 12 Fev 2019 21:14
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
Possivel incopatibilidade CreateObject harbour x xHarbour
Enviado: 13 Fev 2019 00:56
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
Possivel incopatibilidade CreateObject harbour x xHarbour
Enviado: 13 Fev 2019 02:41
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.