Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-05-2003
SKaRCHa SKaRCHa is offline
Registrado
 
Registrado: may 2003
Posts: 9
Poder: 0
SKaRCHa Va por buen camino
Seguimos con los problemas... ahora, los aggregates.

Hola de nuevo...

Esta vez el problema lo tengo con los Aggregates... Es la primera vez que lo uso también.

A ver... tengo un TSimpleDataSet, que hace un "select * from ...". A ese TSimpleDataSet le tengo declarado un AggregateField, que me hace un Sum(COLUMNA).

Hasta ahí bien, puedo poner un TDBText y pillar el valor de ese Field perfectamente... Y ahora viene el problema..

Además, al TSimpleDataSet le tengo puesto un filtro que activo y desactivo cuando quiero con un TCheckBox. Si activo el filtro, el DBText se actualiza bien, pero si lo vuelvo a desactivar, el DBText tiene el valor de los valores afectados por el filtro, por dos (el doble), más el valor de los valores a los que no afecta el filtro, ¿me he explicado?... Bueno, pongo un ejemplo:

Tengo estos tres valores:

- 1 (afectado por el filtro)
- 3 (no afectado por el filtro)
- 5 (afectado por el filtro)

Al principio, con el filtro desactivado, el DBText me muestra el valor 9. Si activo el filtro, me muestra el valor 6, y ahora si desactivo el filtro, me muestra 15 !!, o sea, ((5+1)*2)+3...

A partir de ahí, si vuelvo a activar el filtro me sale 6 (correcto), lo vuelvo a desactivar y me sale 5, y así hasta el infinito... y más allá..

¿Alguien puede darme una explicación / solución a esto?.

Muchas gracias de antemano..

Última edición por SKaRCHa fecha: 05-05-2003 a las 23:58:11.
Responder Con Cita
  #2  
Antiguo 08-05-2003
Bacterion Bacterion is offline
Miembro
 
Registrado: may 2003
Posts: 91
Poder: 22
Bacterion Va por buen camino
>Al principio, con el filtro desactivado, el DBText me muestra el >valor 9. Si activo el filtro, me muestra el valor 6, y ahora si >desactivo el filtro, me muestra 15 !!, o sea, ((5+1)*2)+3...

Bueno, no hay que ser tan retorcido... basta con sumar los 9 con los 6 para que te den 15 (vamos, como si no se limpiara, vamos, resultado del filtro + resultado despues sin filtrar)

Creo que es un "bug" conocido (o un hecho colateral del funcionamiento de los Agreggates) desde el D6.
De todas formas recomienda, alguna gente, solo tenerlos activos cuando son necesarios...
... en su defecto podrías desactivar el campo y volver a activarlo en justo tras aplicar el filtro (propiedad Active).
Responder Con Cita
  #3  
Antiguo 09-05-2003
SKaRCHa SKaRCHa is offline
Registrado
 
Registrado: may 2003
Posts: 9
Poder: 0
SKaRCHa Va por buen camino
Cita:
Posteado originalmente por Bacterion
>
Creo que es un "bug" conocido (o un hecho colateral del funcionamiento de los Agreggates) desde el D6.
De todas formas recomienda, alguna gente, solo tenerlos activos cuando son necesarios...
... en su defecto podrías desactivar el campo y volver a activarlo en justo tras aplicar el filtro (propiedad Active).
Pues lo he probado y no funciona... Pongo AggregatesActive a False antes de filtrar, y una vez que pongo Filtered a true, pongo AggregatesActive a true también.. y nada... :-?

En fin... que ni idea..
Responder Con Cita
  #4  
Antiguo 09-05-2003
Bacterion Bacterion is offline
Miembro
 
Registrado: may 2003
Posts: 91
Poder: 22
Bacterion Va por buen camino
>Pues lo he probado y no funciona... Pongo AggregatesActive a >False antes de filtrar, y una vez que pongo Filtered a true, >pongo AggregatesActive a true también.. y nada... :-?

Yo lo que hice fue algo del estilo (en Delphi 6, notese, contra ClientDataset, que no hay TSimpleDataset, en el que da el mismo problema.):

Filtered := False;
if MiAmoYSegnorMeOrdenaFiltrar then begin
Filter := FiltroImPresionante;
Filtered := True;
end;
MiCampoAgredado.Active := False;
MiCampoAgredado.Active := True;

Y sí que me funcíonó...
Responder Con Cita
  #5  
Antiguo 09-05-2003
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola.

Prueba utilizando 3 componentes en lugar del TSimpleDataSet, es decir :

1 TSqlQuery
1 TDataSetProvider
1 TClientDataSet

En Delphi 6 el componente integrado (entonces se llamaba TSQLClientDataSet) daba muchos problemas y terminaron por quitarlo, cambiándolo por el TSimpleDataSet. Quizá éste también tenga algunos problemas, que se solucionan utilizando la tripleta.

NOTA : Piensa que el TSimpleDataSet no es mas que un componente que encapsula a estos tres.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #6  
Antiguo 09-05-2003
Bacterion Bacterion is offline
Miembro
 
Registrado: may 2003
Posts: 91
Poder: 22
Bacterion Va por buen camino
El TSampleDataset es el que sustituye, en Delphi 7, al TXXXClientDataset (TBDEClientDataset, TIBClientDataset y demás).

Viene a ser, (creo), como un TQuery (vease, dataset bidireccional) realizando cacheo y con un poco de lo que lleva el clientdataset (por aquello del cacheo), pero más light que aquel al que se sustituye (y ciertamente, para ese caso es mejor el triplete de componenets que sugiere guillotmarc)

De todas formas, el triplete de marras, da ese problema en D6 Upd 2 rtl 2 o 3 (no recuerdo bien)
Responder Con Cita
  #7  
Antiguo 10-05-2003
SKaRCHa SKaRCHa is offline
Registrado
 
Registrado: may 2003
Posts: 9
Poder: 0
SKaRCHa Va por buen camino
Hola!

No he probado aún con los 3 componentes independientes, pero sí he probado a hacer esto:

Le tengo declarado a la tabla un AggregateField que se llama SUMA, y cuando quiero filtrar le pongo lo siguiente:

TablaSUMA.Active:=False;
TablaSUMA.Active:=True;

Bueno, pues al ponerlo a False directamente me suelta que no se puedo hacer eso en un Dataset abierto. ¿Cómo lo hiciste tú Bacterion para que no te diese ese error?.
Responder Con Cita
  #8  
Antiguo 14-05-2003
Bacterion Bacterion is offline
Miembro
 
Registrado: may 2003
Posts: 91
Poder: 22
Bacterion Va por buen camino
Exclamation

Muy sencillo, meter la pata
Sí, creía que había desactivado el campos pero lo que hice realmente es desactivar el clientdataset, con lo que, indirectamente, he dado con un workaround (que palabro, ¿y si digo, rodeo?).

Vamos, lo que dije era falso (mea culpa, por escribir desde el curro). Bueno, tendré que fustigarme un poco (acepto sugerencias).

Pero hay una forma de solucionarlo usando otro ClientDataset "clonado" (el rodeo, chapter 2).

1º Pones tu clientdataset o TSimpleSQL o lo que sea.
2º Te aseguras de que te llegan todos los datos (packetrecord a -1). (así que este meotodo para tablas no muy grandes)
3º Clonas sobre otro dataset (Los dos deben de tener definido el campo agregado!!).
(lo que he hecho yo es clonar a traves de asignación del DATA del primero al segundo).
4º Calculas sobre el segundo, desactivando y reactivando el clientdataset tras un desfiltrado.

te puedo mandar el ejemplo, si quieres (as si, royalty free, see EULA)

Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
pen drive problemas... Vivi Varios 8 08-11-2005 15:55:01
Problemas con un tubo Archer API de Windows 0 29-09-2005 16:49:46
Problemas con Delphi 6 BugCoder Varios 0 11-05-2005 10:26:19
Problemas con ADO en win98se Juancho SQL 1 16-02-2005 19:34:17
Problemas con DBExpress - ClientDataset argami Conexión con bases de datos 4 26-07-2004 11:21:12


La franja horaria es GMT +2. Ahora son las 01:24:41.


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
Copyright 1996-2007 Club Delphi