Page 1 of 2
Problema con un query con Ado
Posted: Mon Nov 11, 2024 4:49 pm
by jose_murugosa
Necesito ejecutar un query con harbour, fwh y mssqlserver con ADO.
Usando Heidisql, el query se ejecuta correctamente.
Cuando intento hacerlo con mi programa, el query aparece vacio.
No puedo darme cuenta que hago mal, si alguien pudiera ayudarme les agradezco.
Aca va el codigo que reproduce el error y una captura de heidisql ejecutando el que creo es el mismo script
Agradezco la ayuda que puedan brindarme, seguramente es algo que ignoro o un error, pero no puedo encontrarlo.
Gracias a todos desde ya.
Code: Select all | Expand
#include "Fivewin.ch"
#include "AdoDef.ch"
FUNCTION Santi1()
LOCAL oCn2, cSql, oRs2
wfecha:= Dtos( Ctod( '07/11/2024' ) )
oCn2 := FW_OpenADOConnection( "MSSQL, 192.168.150.206, SarubbiAlba, sa, Came0300", .t. )
cSql := "DECLARE @fecha char(8) = '" + wfecha + "' " + CRLF + ;
"SELECT m1.tropanumero AS tropa, m1.correlativo, ani.descripcion, m1.inac AS INACUR, " + CRLF + ;
"ROUND( t.kilosen1 / t.cabezas , 2) AS KEnPie, m1.kilos + isnull(m2.kilos,0) AS KClasif, m1.precioen2 " + CRLF + ;
"FROM C10304 m1 " + CRLF + ;
"INNER JOIN P0021 ani ON ani.codigo = m1.tipodeanimal " + CRLF + ;
"INNER JOIN C10204 t ON t.ano = m1.tropaano AND t.numero = m1.tropanumero " + CRLF + ;
"OUTER APPLY ( SELECT * from C10304 m2 where m2.fecha = m1.fecha AND " + CRLF + ;
"m2.lineadeproduccion = m1.lineadeproduccion AND m2.correlativo = m1.correlativo AND m2.mediares = 2 ) m2 " + CRLF + ;
"WHERE m1.fecha = @fecha and m1.tipoderegistro = 4 and m1.mediares = 1 order by m1.correlativo ; "
oRs2 := FW_OpenRecordSet( oCn2, cSql )
xbrowse( oRs2 )
RETURN nil
Re: Problema con un query con Ado
Posted: Mon Nov 11, 2024 8:55 pm
by jacgsoft
wfecha:=Dtos(Ctod('07/11/2024'))
Text Into cSql
SELECT m1.tropanumero AS tropa, m1.correlativo, ani.descripcion,
m1.inac AS INACUR,ROUND( t.kilosen1 / t.cabezas , 2) AS KEnPie,
m1.kilos + isnull(m2.kilos,0) AS KClasif, m1.precioen2
FROM C10304 m1
INNER JOIN P0021 ani ON ani.codigo = m1.tipodeanimal
INNER JOIN C10204 t ON t.ano = m1.tropaano AND t.numero = m1.tropanumero
OUTER APPLY ( SELECT * from C10304 m2 where m2.fecha = m1.fecha AND
m2.lineadeproduccion = m1.lineadeproduccion AND
m2.correlativo = m1.correlativo AND m2.mediares = 2 ) m2
WHERE m1.fecha = wfecha and m1.tipoderegistro = 4 and m1.mediares = 1
order by m1.correlativo
EndTtext
cSql:=StrTran(_Sql_,'wfecha',wfecha)
Re: Problema con un query con Ado
Posted: Tue Nov 12, 2024 10:21 am
by jose_murugosa
Gracias por tu ayuda, jacgsoft
Lo probé pero obtuve el mismo resultado, un browse vacío.
Es extraño porque nunca había tenido problemas de este tipo, y no es el script porque funciona perfectamente al ejecutarlo en Heidisql.
Re: Problema con un query con Ado
Posted: Tue Nov 12, 2024 11:10 am
by JoseAlvarez
jose_murugosa wrote:Gracias por tu ayuda, jacgsoft
Lo probé pero obtuve el mismo resultado, un browse vacío.
Es extraño porque nunca había tenido problemas de este tipo, y no es el script porque funciona perfectamente al ejecutarlo en Heidisql.
Trata con fecha "2024-11-07"
Algunas veces la consulta se ve bien en heidi o navicat, pero en nuestro PRG no funciona. Me ha pasado.
El manejo de fechas en sql tiene sus detalles, yo me hice una funcion donde toda fecha la lleva a un string con este formato "2024-11-07" asi es como lo entiende sql.
Re: Problema con un query con Ado
Posted: Tue Nov 12, 2024 12:09 pm
by jose_murugosa
JoseAlvarez wrote:jose_murugosa wrote:Gracias por tu ayuda, jacgsoft
Lo probé pero obtuve el mismo resultado, un browse vacío.
Es extraño porque nunca había tenido problemas de este tipo, y no es el script porque funciona perfectamente al ejecutarlo en Heidisql.
Trata con fecha "2024-11-07"
Algunas veces la consulta se ve bien en heidi o navicat, pero en nuestro PRG no funciona. Me ha pasado.
El manejo de fechas en sql tiene sus detalles, yo me hice una funcion donde toda fecha la lleva a un string con este formato "2024-11-07" asi es como lo entiende sql.
Gracias tocayo querido, por siempre estar aportando y ayudando.
Lo probé, pero el resultado fué el mismo.
Lo curioso es que tengo hechos varios querys sobre estas tablas de la misma manera y sin problemas, y este es el que me vuelve loco
Re: Problema con un query con Ado
Posted: Tue Nov 12, 2024 5:38 pm
by Armando
José:
A mi me parece que si el recordset se muestra vacío es porque alguna condición
no se cumple, sugiero revises por ahí.
Saludos
Re: Problema con un query con Ado
Posted: Tue Nov 12, 2024 6:07 pm
by jose_murugosa
Armando wrote:José:
A mi me parece que si el recordset se muestra vacío es porque alguna condición
no se cumple, sugiero revises por ahí.
Saludos
Armando,
Gracias por responder.
Es lo que pensaba, pero si ves el primer mensaje, verás que el mismo query lo ingreso en Heidisql y se ejecuta perfectamente sin modificaciones.
También da lo mismo si la fecha se pone 20241109 o '20241109' con comillas simples.
Pero en el query no funciona siendo escrito exactamente igual.
Ni con, ni sin comillas simples en la fecha.
Nunca me había pasado, por lo general escribo mis querys en Heidi, porque puedo detectar cualquier error en los mismos y cuando estoy satisfecho del resultado los copio y pego en mi programación sin tener problemas, pero en este caso
no funcionó.
No dudo que quizá se me esté escapando la tortuga......
Re: Problema con un query con Ado
Posted: Tue Nov 12, 2024 6:19 pm
by Armando
José:
Con el único afán de apoyar, te muestro como lo hago yo con ADO y MySql,
ahí puedes ver la clausula BETWEEN
Code: Select all | Expand
FW_ReOpenRecordSet(oRsExp,oApp:oCon,"SELECT " +;
"*," +;
"PRO_NOM," +;
"CON_DES " +;
"FROM " +;
"HdrOdc " +;
"LEFT JOIN " +;
"Proveedores " +;
"ON " +;
"HDR_PRV = Proveedores.PRO_NUM " +;
"LEFT JOIN " +;
"Conceptos " +;
"ON " +;
"HDR_NI1 = Conceptos.CON_NI1 " +;
"AND " +;
"HDR_NI2 = Conceptos.CON_NI2 " +;
"AND " +;
"HDR_NI3 = Conceptos.CON_NI3 " +;
"AND " +;
"HDR_NI4 = Conceptos.CON_NI4 " +;
"AND " +;
"HDR_NI5 = Conceptos.CON_NI5 " +;
"WHERE " +;
"HDR_FDE BETWEEN " + DToS(dFecIni) + " AND " + DToS(dFecFin) + " " +; <======== AQUI
"ORDER BY " +;
"HDR_ODC",adLockOptimistic,adOpenDynamic,0)
Saludos
Re: Problema con un query con Ado
Posted: Wed Nov 13, 2024 10:41 am
by jose_murugosa
Muchas gracias Armando,
Voy a probar.
Hay huchas maneras de pasar un script, espero probando hallar cual es el problema con este que me trae al foro.
Toda ayuda sirve.
Muchas gracias por tu afán de colaborar, te aviso de los resultados.
Re: Problema con un query con Ado
Posted: Wed Nov 13, 2024 1:29 pm
by ertan
Hi Everyone,
In my opinion,
You are supposed to finish your sql commands for mysql and maria database always adding with one more semicolon ";"
Please try this again.
Best regards,
Ertan
Re: Problema con un query con Ado
Posted: Wed Nov 13, 2024 2:56 pm
by JoseAlvarez
José, quizás con la consuta un poco más ordenada, lo podamos ver mejor
Code: Select all | Expand
cSql := "DECLARE @fecha char(8) = '" + wfecha + "' " + CRLF
cSql += "SELECT " + CRLF
cSql += "m1.tropanumero AS tropa, " + CRLF
cSql += "m1.correlativo, " + CRLF
cSql += "ani.descripcion, " + CRLF
cSql += "m1.inac AS INACUR, " + CRLF
cSql += "ROUND( t.kilosen1 / t.cabezas , 2) AS KEnPie, " + CRLF
cSql += "m1.kilos + isnull(m2.kilos,0) AS KClasif, " + CRLF
cSql += "m1.precioen2 " + CRLF
cSql += "FROM " + CRLF
cSql += "C10304 m1 " + CRLF
cSql += "INNER JOIN " + CRLF
cSql += "P0021 ani ON ani.codigo = m1.tipodeanimal " + CRLF
cSql += "INNER JOIN " + CRLF
cSql += "C10204 t ON t.ano = m1.tropaano AND " + CRLF
cSql += "t.numero = m1.tropanumero " + CRLF
cSql += "OUTER APPLY ( SELECT * from C10304 m2 " + CRLF
cSql += "WHERE " + CRLF
cSql += "m2.fecha = m1.fecha AND " + CRLF
cSql += "m2.lineadeproduccion = m1.lineadeproduccion AND " + CRLF
cSql += "m2.correlativo = m1.correlativo AND " + CRLF
cSql += "m2.mediares = 2 ) m2 " + CRLF
cSql += "WHERE " + CRLF
cSql += "m1.fecha = @fecha and m1.tipoderegistro = 4 AND " + CRLF
cSql += "m1.mediares = 1 " + CRLF
cSql += "ORDER BY m1.correlativo ; "
Prueba dos cosas a ver:
1. coloca en esta linea un ";" al final
Code: Select all | Expand
cSql := "DECLARE @fecha char(8) = '" + wfecha+"' ;" + CRLF
2.- Si no resulta, prueba haciendo la primera linea como un query independiente
y luego otro query con el resto de la consulta.
Re: Problema con un query con Ado
Posted: Thu Nov 14, 2024 3:51 pm
by jose_murugosa
Muchas gracias por vuestros aportes.
Finalmente creo que di con el problema, se trataba de un malvado espacio que faltaba al copiar y pegar.
De todos modos vuestras sugerencias han sido muy enriquecedoras y de hecho, he aprendido formas mucho más eficientes de escribir mis querys.
Agradezco infinitamente buestra bondad y paciencia y aprovecho para desearles lo mejor para estas fiestas tradicionales que ya están en la puerta....
Un fuerte abrazo
Re: Problema con un query con Ado
Posted: Thu Nov 14, 2024 4:00 pm
by sysctrl2
yo apenas iba sugerir que consultaras con un ingeniero en sistemas
Re: Problema con un query con Ado
Posted: Thu Nov 14, 2024 4:27 pm
by JoseAlvarez
jose_murugosa wrote:Muchas gracias por vuestros aportes.
Finalmente creo que di con el problema, se trataba de un malvado espacio que faltaba al copiar y pegar.
De todos modos vuestras sugerencias han sido muy enriquecedoras y de hecho, he aprendido formas mucho más eficientes de escribir mis querys.
Agradezco infinitamente buestra bondad y paciencia y aprovecho para desearles lo mejor para estas fiestas tradicionales que ya están en la puerta....
Un fuerte abrazo
Que bien !! me contenta que hayas resuelto.
¡ Eso es lo divertido de programar !
Re: Problema con un query con Ado
Posted: Fri Nov 15, 2024 1:20 pm
by jose_murugosa
sysctrl2 wrote:yo apenas iba sugerir que consultaras con un ingeniero en sistemas
Tienes razón, como se dice vulgarmente..... "se me escapó la tortuga"