Я не могу загрузить данные в VirtualStringTree

У меня есть форма с 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 и, следовательно, с этого момента on, он может выдавать только ошибку, поскольку при попытке присвоить значение Process он автоматически выдает ошибку выполнения.

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

0 ответов

Другие вопросы по тегам