![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Definir un TChart
Buenas a todos. A partir del código encontrado aquí y otro de este foro estoy montando un TChart en base a los resultados de, por ejemplo, este Query:
Código:
SELECT B.Sigla, B.Color, C.Fecha, SUM(A.Votos) Votos FROM Resultados A, Partidos B, Elecciones C WHERE A.CodPrv = (SELECT Literal FROM Instalacion WHERE Etiqueta = 'Provincia') AND A.CodPrv = C.CodPrv AND C.Proceso = 4 AND C.Fecha BETWEEN 1993 AND 2019 AND A.Proceso = C.Codigo AND A.Mesa IN (SELECT Codigo FROM Mesas WHERE CodPrv = A.CodPrv) AND B.CodPrv = A.CodPrv AND A.Partido = B.Codigo AND A.Partido IN (22, 4, 2, 3, 17, 16) GROUP BY A.Partido, B.Sigla, B.Color, C.Fecha ORDER BY A.Partido, B.Sigla, C.Fecha ![]() Para crear el TChart hago esto: Código:
if (Chart1->SeriesCount() > 0)
Chart1->RemoveAllSeries();
Chart1->Title->Font->Style = TFontStyles();
Chart1->BottomAxis->Title->Caption = "Años";
Chart1->BottomAxis->Title->Font->Style = TFontStyles() << fsBold;
Chart1->LeftAxis->Title->Caption = "Votos";
Chart1->LeftAxis->Title->Font->Style = TFontStyles() << fsBold;
AnsiString cAux = "";
fMenu->Auxiliar->First();
for (; !fMenu->Auxiliar->Eof; fMenu->Auxiliar->Next())
{
if (fMenu->Auxiliar->FieldByName("Sigla")->AsString != cAux)
{
cAux = fMenu->Auxiliar->FieldByName("Sigla")->AsString;
Chart1->AddSeries(&TLineSeries(this));
}
Chart1->Series[Chart1->SeriesCount() - 1]->Add(fMenu->Auxiliar->FieldByName("Votos")->AsInteger, fMenu->Auxiliar->FieldByName("Fecha")->AsInteger, (TColor)fMenu->Auxiliar->FieldByName("Color")->AsInteger);
}
|
|
#2
|
||||
|
||||
|
Bueno. He resuelto todos los problemas menos uno. El código ha quedado así partiendo de este query:
Código:
SELECT A.Partido, B.Sigla, B.Color, C.Fecha, SUM(A.Votos) Votos FROM Resultados A, Partidos B, Elecciones C WHERE C.Proceso = :Proceso AND C.Fecha BETWEEN :Desde AND :Hasta AND A.Proceso = C.Codigo AND A.Mesa IN (SELECT Codigo FROM Mesas) AND A.Partido = B.Codigo AND A.Partido IN (22, 4, 2, 3, 17, 16) GROUP BY A.Partido, B.Sigla, B.Color, C.Fecha ORDER BY A.Partido, C.Fecha Código:
Chart1->Chart3DPercent = 10;
Chart1->Title->Font->Style = TFontStyles() << fsBold;
Chart1->BottomAxis->Title->Caption = "Años";
Chart1->BottomAxis->Title->Font->Style = TFontStyles() << fsBold;
Chart1->BottomAxis->Labels = fMenu->Auxiliar->FieldByName("Fecha")->AsInteger;
Chart1->LeftAxis->Title->Caption = "Votos";
Chart1->LeftAxis->Title->Font->Style = TFontStyles() << fsBold;
cAux = "";
for (; !fMenu->Auxiliar->Eof; fMenu->Auxiliar->Next())
{
if (fMenu->Auxiliar->FieldByName("Sigla")->AsString != cAux)
{
pItem = Evolucion->Items->Add();
pItem->Caption = (cAux = fMenu->Auxiliar->FieldByName("Sigla")->AsString);
for (nItem = 1; nItem < Evolucion->Columns->Count; nItem ++)
pItem->SubItems->Add("");
Chart1->AddSeries(&TLineSeries(Chart1));
Chart1->Series[Chart1->SeriesCount() - 1]->Title = cAux;
Chart1->Series[Chart1->SeriesCount() - 1]->SeriesColor = (TColor)fMenu->Auxiliar->FieldByName("Color")->AsInteger;
}
nVotos[0] = 0;
for (nItem = 1; nItem < Evolucion->Columns->Count; nItem ++)
if (Evolucion->Columns->Items[nItem]->Caption == IntToStr(fMenu->Auxiliar->FieldByName("Fecha")->AsInteger))
{
nVotos[0] = fMenu->Auxiliar->FieldByName("Votos")->AsInteger;
pItem->SubItems->Strings[nItem - 1] = FormatFloat("###,##0", nVotos[0]);
break;
}
Chart1->Series[Chart1->SeriesCount() - 1]->Add(nVotos[0], fMenu->Auxiliar->FieldByName("Fecha")->AsInteger,
(TColor)fMenu->Auxiliar->FieldByName("Color")->AsInteger);
}
Chart1->Series[0]->XLabelsSource = "FECHA";
![]() Sin embargo, como podéis ver, las últimas bandas no se inician donde debieran a pesar de añadir valores al definir la serie donde así sea, y esto no se me ocurre como resolverlo. |
|
#3
|
||||
|
||||
|
¿Y si le pones valor cero en lugar de dejarlo en blanco?
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#4
|
||||
|
||||
|
Si te fijas estoy poniendo cero.
Código:
cAux = "";
for (; !fMenu->Auxiliar->Eof; fMenu->Auxiliar->Next())
{
[...]
nVotos[0] = 0; // <--- AQUÍ INICIALIZO LA VARIABLE
for (nItem = 1; nItem < Evolucion->Columns->Count; nItem ++)
if (Evolucion->Columns->Items[nItem]->Caption == IntToStr(fMenu->Auxiliar->FieldByName("Fecha")->AsInteger))
{
// Si hay un valor, lo asigno
nVotos[0] = fMenu->Auxiliar->FieldByName("Votos")->AsInteger;
pItem->SubItems->Strings[nItem - 1] = FormatFloat("###,##0", nVotos[0]);
break;
}
Chart1->Series[Chart1->SeriesCount() - 1]->Add(nVotos[0], fMenu->Auxiliar->FieldByName("Fecha")->AsInteger,
(TColor)fMenu->Auxiliar->FieldByName("Color")->AsInteger);
}
|
|
#5
|
||||
|
||||
|
¿Y si pones 1 tampoco?
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#6
|
||||
|
||||
|
Tampoco. Y creo que ya me he dado cuenta de por qué: Porque no todos los partidos tiene votos en todos los años y al hacer el Add en TChart va añadiendo lo que encuentra; es decir que:
Cita:
Cita:
|
![]() |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Error al definir una FOREIGN KEY | Angel.Matilla | Firebird e Interbase | 21 | 12-04-2018 09:56:46 |
| Definir impresora | Carliviris | Varios | 6 | 11-01-2008 03:12:17 |
| definir campos de busqueda | fedelphi | Firebird e Interbase | 2 | 11-04-2007 21:46:51 |
| Problemas al definir UDF (Funciones en una DLL) | pcicom | Firebird e Interbase | 2 | 21-06-2006 05:49:15 |
| Definir Mis Propias Clases | jberaza | OOP | 1 | 27-09-2004 17:11:08 |
|