Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Funcion SUM me regresa una cadena (https://www.clubdelphi.com/foros/showthread.php?t=30667)

paty_rlopez 12-04-2006 19:43:27

Funcion SUM me regresa una cadena
 
Hola a todos
Estoy haciendo un reporte que toma sus datos de la siguiente consulta
Código:

Select sum(T.MONTO) , e.nombre as e_nombre , e.id_empresa as id_estacion , c.nombre as c_Nombre , c.ID_CLIENTE , tc.NUMERO_TARJETA , tc.ID_TARJETA , co.FECHA_HORA_INI, co.ID_CORTE, co.TURNO , t.CONSECUTIVO , t.ID_TICKET
From CORTE CO, TICKET__RELACION_IA T , empresa e , cliente c , TARJETA_CLIENTE TC
Where CO.ID_CORTE = T.ID_CORTE
and t.id_empresa = e.ID_EMPRESA
AND CO.ID_ESTACION = E.ID_EMPRESA
and t.id_cliente = c.ID_CLIENTE
AND T.ID_TARJETA = TC.ID_TARJETA
Group by e.id_empresa, e.nombre, c.NOMBRE, c.ID_CLIENTE, tc.NUMERO_TARJETA, tc.ID_TARJETA, co.FECHA_HORA_INI, co.ID_CORTE, co.TURNO, t.CONSECUTIVO, t.ID_TICKET

la cual ejecuto dentro de un TIBDataSet.
Pero sucede que cuando pongo una mascara al TQRDBText, me escribe el nombre del campo (ósea SUM).

Entonces en la ventana de whatches vi que el valor que me regresaba en ese campo era una cadena, ejemplo;
DataSet.FieldByName(‘SUM’).Value = ‘520.35’

Por lo anterior no puedo poner mascaras al TQRDBText que me muestra este campo y tampoco puedo hacer sumatoria de los resultados en un QRExpr

Alguien me puede explicar por qué me regresa el valor del la sumatoria en cadena, y como puedo solucionarlo.

De antemano gracias.

Al González 12-04-2006 20:10:00

¡Hola a todos!

Recuerda que Value es una propiedad Variant y por alguna razón está interpretando el valor como cadena en lugar de número flotante. En la lista de observaciones coloca las expresiones DataSet.FieldByName (‘SUM’).ClassName y DataSet.FieldByName (‘SUM’).DataType. Eso ayudará a saber qué tipo de dato esta resultando para esa columna de la consulta, lo cual nos dará más pistas.

Un abrazo sumado.

Al González. :)

paty_rlopez 12-04-2006 23:59:18

hola Al González
ya hice lo que me sugieres pero me muestra como resultado lo siguiente
Cita:

Inaccessible value
en las dos propiedades.
Por favor tenme paciencia
¿Que más puedo hacer?

Al González 13-04-2006 20:45:58

Allow function calls
 
¡Hola Paty! (supongo que ese es tu nombre)

Cuando agregues la observación, utiliza la opción Allow function calls para que se muestre el valor de las expresiones que introduces. Desde luego, también es necesario que el programa se encuentre detenido en un punto donde dichas expresiones sean válidas.

Espero esto sea de utilidad, seguimos en contacto.

Un abrazo depurando.

Al González. :)

paty_rlopez 18-04-2006 00:02:02

Sigue marcando lo mismo
 
Al González
¿Como lo supiste? :D
bueno, ya hice lo que dijiste y el resultado fue el siguiente:
Cita:

DataSet.FieldByName('sum').DataType: Inaccessible value
DataSet.FieldByName('SUM').ClassName: 'TFMTBCDField'
Mira para solucionarlo provisional mente agregue una casta a la consulta de tal manera que me quedó así. Dame tu opinión, y si sabes una mejor manera. Bienvenida.
Código:

Select cast(sum(T.MONTO) as numero (12,2)) , e.nombre as e_nombre ,
e.id_empresa  as id_estacion , c.nombre as c_Nombre , c.ID_CLIENTE ,
tc.NUMERO_TARJETA , tc.ID_TARJETA , co.FECHA_HORA_INI, co.ID_CORTE,
co.TURNO , t.CONSECUTIVO , t.ID_TICKET
From CORTE CO, TICKET__RELACION_IA T, empresa e , cliente c , TARJETA_CLIENTE TC
Where CO.ID_CORTE = T.ID_CORTE and t.id_empresa = e.ID_EMPRESA      AND
CO.ID_ESTACION = E.ID_EMPRESA and t.id_cliente = c.ID_CLIENTE AND T.ID_TARJETA = TC.ID_TARJETA
Group by e.id_empresa, e.nombre, c.NOMBRE, c.ID_CLIENTE, tc.NUMERO_TARJETA,
tc.ID_TARJETA, co.FECHA_HORA_INI, co.ID_CORTE, co.TURNO, t.CONSECUTIVO,
t.ID_TICKET

Gracias por tu ayuda.

Al González 18-04-2006 07:52:25

¡Hola a todos!

Ah, el problema debe ser el tipo del campo TICKET__RELACION_IA.MONTO en la base de datos. Si ese campo es monetario, te sugiero que lo crees de tipo "Numeric (15, 4)" (numérico, precisión de 15, escala de 4); de esa manera no te dará problemas.

Una observación: eso que llamas «casta» en realidad se conoce como molde de tipo o moldear.

Cambiando de tema, veo que vives en Torreón. Tengo buenos recuerdos de cuando viví en aquella ciudad, especialmente del Paseo de La Rosita, Torreón Jardín y La Nive de Chepo. Lo único que no me gustaba era subirme a un taxi y que el conductor no supiera leer (me sucedió en 1997) :D. Por cierto, Contraveneno, un conocido y amigable participante de estos foros, también vive ahí.

Un abrazo lagunero.

Al González. :)

paty_rlopez 18-04-2006 15:13:10

Si esta declarado numeric
 
hola
Volviendo al tema del hilo, la declaración de la tabla es la siguiente:
Código:

RECREATE TABLE TICKET__RELACION_IA
(
  ID_TICKET                          INTEGER        NOT NULL,
ID_CLIENTE                        INTEGER,
  CVE_DESPACHADOR                    VARCHAR(    15)  COLLATE NONE,
  POSICION                          INTEGER,
  CONSECUTIVO                        INTEGER,
  PRINCIPAL                          INTEGER,
  TIPO_VENTA                        VARCHAR(    15)  COLLATE NONE,
  ESTADO                            VARCHAR(    45)  COLLATE NONE,
  NUM_COPIAS                        SMALLINT,
  FECHA                            TIMESTAMP,
  HORA                            TIMESTAMP,
  CAPTURADOR                        VARCHAR(    25)  COLLATE NONE,
  FECHA_CAPTURA                    TIMESTAMP,
  ID_TARJETA                        INTEGER,
  FECHA_HORA                      TIMESTAMP,
  ID_CORTE                          INTEGER,
  ODOMETRO                          NUMERIC( 12, 4),
  RUTA_FOTO_RESTRICCION              VARCHAR(  300)  COLLATE NONE,
  RUTA_FOTO_TICKET                  VARCHAR(  300)  COLLATE NONE,
  RENDIMIENTO                        NUMERIC( 18, 6),
MONTO                              NUMERIC( 18, 6),
  FP_ELECTRONICO                    NUMERIC( 18, 6),
  FP_TRADICIONAL                    NUMERIC( 18, 6),
  ID_RESTRICCION                    INTEGER,
  ID_FACTURA                        INTEGER,
  ID_TICKET_LOCAL                    INTEGER,
  ID_EMPRESA                        INTEGER,
CONSTRAINT PK_TICKET__RELACION_IA PRIMARY KEY (ID_TICKET)
);


el campo MONTO esta declarado como numerico, asi que sigo sin saber cual es le problema.

Gracias por los saludos y por los conocimientos que compartes conmigo


La franja horaria es GMT +2. Ahora son las 10:45:16.

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