Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Crear un TDBChart en tiempo de ejecución (https://www.clubdelphi.com/foros/showthread.php?t=94359)

Angel.Matilla 23-12-2019 19:55:33

Crear un TDBChart en tiempo de ejecución
 
Buenas. Tengo un query que me da esta salida:

y a partir del mismo trato de montar un TDBChart. Para ello, en tiempo de ejecución, hago las asignaciones pertinentes:
Código:

Chart2->RemoveAllSeries();
Chart2->Chart3DPercent                = 5;
Chart2->BottomAxis->Title->Caption    = "Año";
Chart2->BottomAxis->Title->Font->Style = TFontStyles() << fsBold;
Chart2->BottomAxis->Labels            = fMenu->Query->FieldByName("Fecha")->AsInteger;
Chart2->LeftAxis->Title->Caption      = "Votos";
Chart2->LeftAxis->Title->Font->Style  = TFontStyles() << fsBold;

for (nItem = 2; nItem < fMenu->Query->FieldDefs->Count; nItem ++)
{
    fMenu->Auxiliar->Close();
    fMenu->Auxiliar->ParamByName("Codigo")->AsInteger = StrToInt(StringReplace(fMenu->Query->FieldDefs->Items[nItem]->Name, "VOTOS", "", oReplace));
    fMenu->Auxiliar->Open();
    pItem = Evolucion->Items->Add();
    pItem->Caption = fMenu->Auxiliar->FieldByName("Sigla")->AsString;

    if ((cColor = (TColor)fMenu->Auxiliar->FieldByName("Color")->AsInteger) == 0)
          while (cColor > 0)
          {
              cColor = (TColor)RGB(random(255), random(255), random(255));
              if (slColor->IndexOf(cColor) == -1)
                    break;
          }
    slColor->Add(cColor);

    Chart2->AddSeries(&TLineSeries(Chart2));
    Chart2->Series[Chart2->SeriesCount() - 1]->DataSource          = fMenu->Query;
    Chart2->Series[Chart2->SeriesCount() - 1]->SeriesColor          = cColor;
    Chart2->Series[Chart2->SeriesCount() - 1]->Title                = pItem->Caption;
    Chart2->Series[Chart2->SeriesCount() - 1]->XLabelsSource        = "Fecha";
    Chart2->Series[Chart2->SeriesCount() - 1]->XValues->ValueSource = "Codigo";
    Chart2->Series[Chart2->SeriesCount() - 1]->YValues->ValueSource = fMenu->Query->FieldDefs->Items[nItem]->Name;
}

El problema viene precisamente en la definición de XValues->ValueSource. Si lo dejo omo está, con Código, al gráfica obtenida es esta:

Y al verdad no me parece una presentación muy elegante. Y si en vez de Código pongo el campo Contador o Fecha, el resultado es este:

Como veis sale vacío y no acabo de entender las razones para que haga esto. Como se ve en la leyenda de la gráfica en ambos casos está la misma información.

Angel.Matilla 24-12-2019 12:24:42

Solucionado. Eliminé del query el campo Código y deje el resto y puse la referencia en el TDBChart al campo Contador. Ahora queda perfecto.


La franja horaria es GMT +2. Ahora son las 12:37:13.

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