He utilizado la inteligencia artificial para crear muchas consultas de mariadb y mysql. De verdad es fantástico y no tengo problemas en usarla. es una gran herramienta para todo, y si lo podemos aprovechar, ¿por qué no?
El caso es que me he encontrado que a veces las consultas funcionan perfecto en NAVICAT (podría ser cualquier otro administrador de BD) pero cuando lo llevo a FW+HARBOUR arroja error de sintaxis. Todo se copia tal cual y me aseguro de no tener errores de mi parte. pero nada, sigue arrojando el error 1064.
Revisando pude darme cuenta de algo, si se intenta ejecutar mas de una operación en una sola consulta no funciona. si las separo, funciona.
por ejemplo el DROP TEMPORARY TABLE IF EXIST seguido de otras instrucciones, no sirve. si lo ejecuto primero con un execute y luego el resto de la consulta en otra, si funciona.
el caso es que la IA me proporciona consultas donde usa cosas de mysql que ni sabia que existían, pero me dan lo que necesito. Solo que al llevarlo a harbour, no funciona. asi de simple.
uso tDolphin. ¿alguien tiene idea del porque de esto?
Se que la solución seria trabajarla por partes y/o quitarle esas cosas extras de mysql que usa la IA, pero quedaría en el mismo sitio de antes, y quiero aprovechar la ayuda.
aqui dejo el ejemplo de una consulta, solo para fines orientativos.
Code: Select all | Expand
-- Eliminar la tabla temporal si ya existe
DROP TEMPORARY TABLE IF EXISTS temp_resultados;
-- Crear una tabla temporal para almacenar los resultados intermedios
CREATE TEMPORARY TABLE temp_resultados AS
SELECT
C.codigo_cliente,
C.razon_social_cliente,
M.codigo_medio,
M.nombre_medio,
D.fecha_pago,
D.code_clien,
D.numero_recibo,
D.doc_pagado,
D.monto,
D.doc_deleted
FROM
c32demo_clientes AS C,
c32demo_mediospago AS M,
c32demo_desglose AS D
WHERE
C.codigo_cliente = D.code_clien
AND M.codigo_medio = D.codigo_medio
AND D.fecha_pago BETWEEN '2025-02-06' AND '2025-02-09'
AND D.doc_deleted <> '.T.'
ORDER BY
D.fecha_pago,
D.codigo_medio,
D.numero_recibo,
D.doc_pagado;
-- Consulta final con subtotales después del grupo de fecha_pago
SELECT fecha_pago, nombre_medio, codigo_medio, numero_recibos, total_doc_pagado, total_monto FROM (
-- Datos principales
SELECT
fecha_pago,
nombre_medio,
codigo_medio,
COUNT(numero_recibo) AS numero_recibos,
SUM(doc_pagado) AS total_doc_pagado,
SUM(monto) AS total_monto,
0 AS orden
FROM temp_resultados
GROUP BY fecha_pago, codigo_medio, nombre_medio
UNION ALL
-- Filas de subtotales (colocadas después)
SELECT
fecha_pago,
'SUBTOTAL' AS nombre_medio,
NULL AS codigo_medio,
NULL AS numero_recibos,
NULL AS total_doc_pagado,
SUM(monto) AS total_monto,
1 AS orden
FROM temp_resultados
GROUP BY fecha_pago
) AS final_query
ORDER BY fecha_pago, orden, codigo_medio, nombre_medio;