Я не могу загрузить данные в VirtualStringTree - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть форма с TPageControl, которая имеет две вкладки.В каждом из них есть TVirtualStringTree, и я определил эти две структуры:

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;

Я знаю: они почти одинаковы;тогда я объясняю этоПервый загружается из четырех вложенных запросов, и он делает это без проблем, но второй ... Нет пути!

Чтобы загрузить эту секунду, мне нужно два запроса:

SELECT DISTINCT Date FROM Elections ORDER BY Date DESC

это поле Date содержит только год и выполняется без проблем.

SELECT A.Codigo, B.Name, SUM (C.Padron) Padron, SUM (C.Censo) Census, A.Closed
  FROM Elections A, Process B, HisElec C
 WHERE A.CodPrv = (SELECT Literal FROM Installation WHERE Label = 'Province')
   AND A.CodPrv = B.CodPrv AND B.Codigo = A.Process AND A.Closed = 1
   AND A.CodPrv = C.CodPrv AND A.Codigo = C.Election
   AND A. Date =: Date
 GROUP BY 1, 2, 5
 UNION
SELECT A.Codigo, B.Name, SUM (C.Padron) Padron,
       (SELECT SUM (Census) FROM Tables WHERE CodPrv = (SELECT Literal FROM Installation WHERE Label = 'Province')) Census,
       A.Closed
  FROM Elections A, Process B, Dl01 C
 WHERE A.CodPrv = (SELECT Literal FROM Installation WHERE Label = 'Province')
   AND A.CodPrv = B.CodPrv AND A.Process = B.Code AND A.Closed = 0
   AND A. Date =: Date
 GROUP BY 1, 2, 5
 ORDER BY 1 DESC, 3

Оно также запускается без проблем и ошибок.Проблема возникает при попытке передать эти данные в соответствующее TVirtualStringTree.

PTreePro DatPro;
PVirtualNode Node1, Node2, Node3, Node4;

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

     qTemp2->Close ();
     qTemp2->ParamByName ("Date")->AsInteger = qTemp1->FieldByName("Date")->AsInteger;
     qTemp2->Open ();
     for (;! qTemp1->Eof; qTemp1->Next())
     {
          Node2 = LisPro->AddChild(Node1);
          DatPro = (PTreePro)LisPro->GetNodeData(Node2);
          DatPro->Process = qTemp1->FieldByName("Name")
          [...]
     }
 }

При попытке создать этот Node1 в этом запросе строки Node1 = ... и DatPro = (PTreePro) ... являютсявыполняется без серьезных проблем, за исключением того, что Node1 после запуска AddChild имеет значение NULL и, следовательно, с этого момента он может выдавать только ошибку, поскольку при попытке передать значение Process он автоматически выдает ошибку выполнения.

Я попытался поместить нагрузку на каждое из деревьев в отдельную функцию, изолировав код;Я пытался с той же структурой (в конце концов, они идентичны) или как в примере с двумя структурами, чтобы изменить порядок выполнения.Для большего количества тестов, которые я сделал, я не могу загрузить оба дерева, в LisPro я ВСЕГДА делаю то же самое для меня.

...