У меня есть форма с 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 я ВСЕГДА делаю то же самое для меня.