PDA

Ver la Versión Completa : Definir un TQRChart en tiempo de ejecución (2)


Angel.Matilla
22-01-2020, 19:38:39
Sigo con mis batallas con este componente. En un informe diseñado con QR tengo un TQRChart que uso en dos o tres sitios distintos de la aplicación. Me funciona bien en todos ellos menos en uno. A ver si soy capaz de explicarme.

1. Donde funciona bien
A partir de esta tabla, tal cual:
https://i.ibb.co/zH7jYrK/Tabla1.jpg

Con este código:
fMenu->Auxiliar->Close();
fMenu->Auxiliar->SQL->Text = "SELECT * FROM " + cTabTemp + " WHERE Orden > 0 AND Votos1 > 0";
fMenu->Auxiliar->Open();

fIndBln->QRDBChart1->LeftAxis->Title->Caption = "Votos";
fIndBln->Series1->DataSource = fMenu->Auxiliar;
fIndBln->Series1->Title = HeaderControl7->Sections->Items[1]->Text;
fIndBln->Series1->Marks->ArrowLength = 0;
fIndBln->Series1->Marks->Style = smsValue;
fIndBln->Series1->SeriesColor = clRed;
fIndBln->Series1->XLabelsSource = "SIGLA";
fIndBln->Series1->BarStyle = bsRectGradient;
fIndBln->Series1->YValues->ValueSource = "VOTOS1";

fIndBln->Series2->DataSource = fMenu->Auxiliar;
fIndBln->Series2->Title = HeaderControl7->Sections->Items[2]->Text;
fIndBln->Series2->Marks->ArrowLength = 0;
fIndBln->Series2->Marks->Style = smsValue;
fIndBln->Series2->SeriesColor = clGreen;
fIndBln->Series2->BarStyle = bsRectGradient;
fIndBln->Series2->YValues->ValueSource = "VOTOS2";

Obtengo este gráfico:
https://i.ibb.co/smjJSF2/Grafico1.jpg

2. Donde no funciona
Con esta tabla:
https://i.ibb.co/FHr3n9P/Tabla2.jpg (https://imgbb.com/)

Y con este código:
fIndBln->QRDBChart1->RemoveAllSeries();
fIndBln->QRDBChart1->LeftAxis->Title->Caption = "Votos";
fIndBln->QRDBChart1->LeftAxis->Title->Font->Style = TFontStyles() << fsBold;

for (nItem = 2; nItem < fMenu->Auxiliar->FieldDefs->Count; nItem ++)
{
fIndBln->QRDBChart1->AddSeries(&TLineSeries(fIndBln->QRDBChart1));
fIndBln->QRDBChart1->Series[fIndBln->QRDBChart1->SeriesCount() - 1]->DataSource = fMenu->Auxiliar;
fIndBln->QRDBChart1->Series[fIndBln->QRDBChart1->SeriesCount() - 1]->SeriesColor = clYellow;
fIndBln->QRDBChart1->Series[fIndBln->QRDBChart1->SeriesCount() - 1]->XLabelsSource = "NOMBRE";
fIndBln->QRDBChart1->Series[fIndBln->QRDBChart1->SeriesCount() - 1]->YValues->ValueSource = fMenu->tTemp->FieldDefs->Items[nItem]->Name;
}
(La tabla del gráfico inmediato superior es esa fMenu->Auxiliar; realmente es un query)

Sólo obtengo esto:
https://i.ibb.co/48tZrKd/Grafico2.jpg (https://ibb.co/QPQFwpd)

He probado a "forzar" con sólo dos de las columnas de datos (PORCC y PORCD) y copiando literalmente el código del principio, cambiando en el mismo donde VOTOS1 y VOTOS2 por esas dos columnas y SIGLA por NOMBRE, pero da lo mismo. Y ya estoy harto de darle vueltas al molino porque llevo una semana con este tema y no soy capaz de resoverlo.

He de decir con el resultado del query, si hago la definición en tiempo de diseño sale el gráfico perfecto:
https://i.ibb.co/WVPxFXv/Grafico3.jpg

Pero si trato de trasladar esa definición al código, ¡falla estrepitosamente!