Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-02-2019
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 849
Poder: 13
Angel.Matilla Va por buen camino
Cargar datos en un VirtualStringTree

Imagino que terminaréis mandánome a freir espárragos con este elemento, pero me está ocurriendo una cosa que no acabo de comprender. A ver si me explico bien.

Tengo un formulario con un TPageControl que tiene dos pestañas. En cada una de ellas hay un TVirtualStringTree y tengo definidas estas dos estructuras:
Código PHP:
typedef struct tagTTreeMun
{
     
AnsiString Municipio;
     
int Padron;
     
int Censo;
     
double Relacion;
     
int Codigo;
TTreeMun, *PTreeMun;

typedef struct tagTTreePro
{
     
AnsiString Proceso;
     
int Padron;
     
int Censo;
     
double Relacion;
     
int Codigo;
}
TTreePro, *PTreePro
Ya lo sé: son iguales; luego lo explico. La primera de ellas se carga a partir de cuatro querys anidados y lo hace sin ningún problema, pero la segunda... ¡No hay manera!

Para cargar esta segunda necesito dos querys:
Código PHP:
SELECT DISTINCT Fecha FROM Elecciones ORDER BY Fecha DESC 
ese campo Fecha contiene sólo el año y se ejecuta sin ningún problema.
Código PHP:
SELECT A.CodigoB.NombreSUM(C.PadronPadronSUM(C.CensoCensoA.Cerrado
  FROM Elecciones A
Proceso BHisElec C
 WHERE A
.CodPrv = (SELECT Literal FROM Instalacion WHERE Etiqueta 'Provincia')
   AND 
A.CodPrv B.CodPrv AND B.Codigo A.Proceso AND A.Cerrado 1
   
AND A.CodPrv C.CodPrv AND A.Codigo C.Eleccion
   
AND A.Fecha = :Fecha
 GROUP BY 1
25
 UNION
SELECT A
.CodigoB.NombreSUM(C.PadronPadron,
       (
SELECT SUM(CensoFROM Mesas WHERE CodPrv = (SELECT Literal FROM Instalacion WHERE Etiqueta 'Provincia')) Censo,
       
A.Cerrado
  FROM Elecciones A
Proceso BDl01 C
 WHERE A
.CodPrv = (SELECT Literal FROM Instalacion WHERE Etiqueta 'Provincia')
   AND 
A.CodPrv B.CodPrv AND A.Proceso B.Codigo AND A.Cerrado 0
   
AND A.Fecha = :Fecha
 GROUP BY 1
25
 ORDER BY 1 DESC

También se ejecuta sin problemas ni errores. El problema viene al tratar de pasar esos datos al correspondiente TVirtualStringTre.
Código:
PTreePro DatPro;
PVirtualNode Nodo1, Nodo2, Nodo3, Nodo4;

LisPro->NodeDataSize = sizeof(TTreePro);
LisPro->BeginUpdate();
LisPro->Clear();
for (; !qTemp1->Eof; qTemp1->Next())
{
     Nodo1           = LisPro->AddChild(NULL);
     DatPro          = (PTreePro) LisPro->GetNodeData(Nodo1);
     DatPro->Proceso = IntToStr(qTemp1->FieldByName("Fecha")->AsInteger);

     qTemp2->Close();
     qTemp2->ParamByName("Fecha")->AsInteger = qTemp1->FieldByName("Fecha")->AsInteger;
     qTemp2->Open();
     for (; !qTemp1->Eof; qTemp1->Next())
     {
          Nodo2           = LisPro->AddChild(Nodo1);
          DatPro          = (PTreePro) LisPro->GetNodeData(Nodo2);
          DatPro->Proceso = qTemp1->FieldByName("Nombre")
           [...]
     }
 }
Al tratar de crear ese Nodo1 en este query, las líneas Nodo1 = ... y DatPro = (PTreePro)... se ejecutan sin mayor problema, salvo que Nodo1, tras ejecutarse el AddChild, tiene valor NULL y por lo tanto de ahí para adelante únicamente puede dar un error ya que al tratar de dar valor a Proceso automáticamente da un error de ejecución.

He probado poniendo la carga de cada uno de los árboles en una función diferente, por aislar código; he probado con la misma estructura (al fin y al cabo son idénticas) o como en el ejemplo con dos estructuras, a cambiar el orden de ejecución. Por más vueltas que he dado no soy capaz de que se carguen ambos árboles, en LisPro SIEMPRE me hace lo mismo.
Responder Con Cita
  #2  
Antiguo 05-02-2019
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 849
Poder: 13
Angel.Matilla Va por buen camino
No sé que es lo que habré hecho. Para probar que estaba haciendo mal abrí un formulario nuevo y copié tanto el TVirtualStringTree como el código que estaba usando ¡y funcionó a la perfección! Total que volví a copiar lo que había en este nuevo formulario y ahora funciona sin errores. No entiendo nada.
Responder Con Cita
  #3  
Antiguo 05-02-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 29.028
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Angel.Matilla Ver Mensaje
No sé que es lo que habré hecho. Para probar que estaba haciendo mal abrí un formulario nuevo y copié tanto el TVirtualStringTree como el código que estaba usando ¡y funcionó a la perfección! Total que volví a copiar lo que había en este nuevo formulario y ahora funciona sin errores. No entiendo nada.
Es que con tan solo poner la pregunta en clubdelphi, ya se solucionan automáticamente
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Cargar datos de una BD en un label!! djMadox Conexión con bases de datos 13 03-02-2015 09:32:21
virtualstringtree me desaparecen los datos JosepGA OOP 2 08-03-2010 09:22:30
Cargar datos Hugo Penagos Conexión con bases de datos 1 14-12-2007 09:59:43
Crear base de datos y cargar datos desde delphi Albano MySQL 4 17-05-2007 20:01:18
Refrescar un VirtualStringTree progmaq Varios 1 20-09-2005 09:09:50


La franja horaria es GMT +2. Ahora son las 02:42:50.


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