Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Variables MySQL en Zeos (https://www.clubdelphi.com/foros/showthread.php?t=90438)

Tecnofacil 08-06-2016 22:05:02

Variables MySQL en Zeos
 
Hola amigos. Tengo la siguiente consulta en MySQL
Código SQL [-]
Set @Sumatoria = 0;
SELECT
detalle_liquidaciones_cta.pu,
detalle_liquidaciones_cta.cantidad,
detalle_liquidaciones_cta.debe,
detalle_liquidaciones_cta.haber,
(@Sumatoria:= @Sumatoria + detalle_liquidaciones_cta.debe + detalle_liquidaciones_cta.haber) as Incremental
FROM
detalle_liquidaciones_cta
where idliquidacion=200

Funciona perfecto en Navicat y Mysql Workbench pero al pasar la consulta a Zeos me tira error.

Cita:

SQL Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server for the right syntax to use near
'SELECT
detalle_liquidaciones_cta.pu,
detalle_liquidaciones_cta.cantidad,
deta' at line 2
ParamCheck esta en False.

bitbow 09-06-2016 00:14:26

Hola, no se como estas armando tu sentencia SQL, descnozco si es alguna sintaxis definidia para una version especifica de MySQL, segun yo deberia de quedar asi, a menos que estes intentando realizar algo diferente.
Código SQL [-]
SELECT pu, cantidad, debe, haber, (debe + haber) as Incremental FROM detalle_liquidaciones_cta where idliquidacion=200;

-- Si tienes una consolta de una sola tabla no es necesario que pongas de qye tabla es cada campo, 
-- igual si son varias tablas solo si el campo se repite en alguna otra es necesario definir de que 
-- tabla viene
.

Saludos.

roman 09-06-2016 00:20:49

Posiblemente el problema se deba a que tienes, en realidad, dos sentencias, el set y el select. Normalmente, MySQL no aceptará sentencias múltiples, y es posible que Navicat y Workbench separen las sentencias y lancen una consulta por cada una.

Con Zeos tendrías que mandar cada consulta aparte, aunque creo recordar que tiene un componente que sirve para eso, TZQLProcessor o TZQLScript, o algo así.

LineComment Saludos

Tecnofacil 09-06-2016 23:47:01

Creo que me falto expresar que hace la consulta.
Código SQL [-]
Set @Sumatoria = 0;  -- Creo una variable para ir cargando el resultado del calculo de cada registro.
Suponiendo que tengo una tabla con debe y haber, (Básicamente es eso esa tabla), lo que quiero es que se agregue una nueva columna llamada "Sumatoria" donde va mostrando el saldo de la cuenta hasta esa linea.


Debe Haber Saldo
$100 $0 $ 100
$0 $30 $ 70
$500 $0 $570

Se entiende?
En los visores SQL funciona de maravilla

bitbow 09-06-2016 23:52:23

Una duda, estas corriendo esa sentencia como script o como consulta? Hay que recordar que son dos cosas distintas y por claras razones necesitan ser tratados de diferente forma dentro de la programación.

A simple vista es un script y dentro de un zquery se va a tratar como múltiples sentencias originando un error, lo que puedes hacer es meter esto en una función o procedimiento que te devuelva a modo de tabla (en sql server se puede así que supongo que aquí también).

Suerte.

bitbow 10-06-2016 00:22:48

Efectivamente como comentas, la consulta tal cual la tienes al inicio si corre en el editor SQL y no es un script (para el caso de MySQL), realice algunas pruebas y con un script equivalente al crear una vista en MySQL truena por lo que revise como podria hacerse lo que necesitas, despues e algunas pruebas llegue a esto >>

Código SQL [-]
SELECT t.id, t.valor,
         (SELECT SUM(x.valor) FROM tabla1 x  WHERE x.id <= t.id) AS cumulative_sum
    FROM `tabla1` t ORDER BY t.id

Esta claro que tienes sus inconvenientes pero puedes partir de aqui.

Saludos.

roman 10-06-2016 16:52:51

Cita:

Empezado por Tecnofacil (Mensaje 506045)
Creo que me falto expresar que hace la consulta.
Código SQL [-]
Set @Sumatoria = 0;  -- Creo una variable para ir cargando el resultado del calculo de cada registro.

No hacía falta. Se entendía desde un principio. Requieres ambas consultas, y las puedes hacer sin problema, pero tienes que hacerlas una después de la otra o usar el TZSQLProcessor. El valor que asignes a @Sumatoria se preservará en la segunda consulta siempre y cuando no cambies de conexión.

LineComment Saludos


La franja horaria es GMT +2. Ahora son las 23:53:43.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi