![]() |
![]() |
| 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:
|
|
#7
|
||||
|
||||
|
Eso quería decirte con lo de que pusieras ceros.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#8
|
||||
|
||||
|
No, el año nunca lo puedo poner a cero; tengo que rellenar todos los campos para todas las líneas. Voy a darle un vuelta.
|
|
#9
|
||||
|
||||
|
Dicho de otra forma: Tengo que sacar todos los años para todos los partidos, independientemente de si tienen o no votos registrados.
|
|
#10
|
||||
|
||||
|
Como vía query no se me ocurre como sacar todos los años para todos los partidos, al margen de si tiene o nom votos registrados, lo h hecho de una forma un poco más pedestre, pero funciona.
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("");
}
for (nItem = 1; nItem < Evolucion->Columns->Count; nItem ++)
if (Evolucion->Columns->Items[nItem]->Caption == IntToStr(fMenu->Auxiliar->FieldByName("Fecha")->AsInteger))
pItem->SubItems->Strings[nItem - 1] = FormatFloat("###,##0", fMenu->Auxiliar->FieldByName("Votos")->AsInteger);
}
for (int nRow = 0; nRow < Evolucion->Items->Count; nRow ++)
{
fMenu->Auxiliar->First();
for (; !fMenu->Auxiliar->Eof; fMenu->Auxiliar->Next())
{
if (Evolucion->Items->Item[nRow]->Caption == fMenu->Auxiliar->FieldByName("Sigla")->AsString)
{
Chart1->AddSeries(&TLineSeries(Chart1));
Chart1->Series[Chart1->SeriesCount() - 1]->Title = fMenu->Auxiliar->FieldByName("Sigla")->AsString;
Chart1->Series[Chart1->SeriesCount() - 1]->SeriesColor = (TColor)fMenu->Auxiliar->FieldByName("Color")->AsInteger;
break;
}
}
for (int nCol = 1; nCol < Evolucion->Columns->Count; nCol ++)
Chart1->Series[Chart1->SeriesCount() - 1]->Add(StrToIntDef(StringReplace(Evolucion->Items->Item[nRow]->SubItems->Strings[nCol - 1], ".", "", oReplace), 0),
StrToInt(Evolucion->Columns->Items[nCol]->Caption),
(TColor)fMenu->Auxiliar->FieldByName("Color")->AsInteger);
}
![]() |
|
#11
|
||||
|
||||
|
En el select, si la suma es null puedes hacer que devuelva cero:
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#12
|
||||
|
||||
|
Cita:
![]() Si te fijas hay partidos que como no se presentaron en unos años no pueden tener resultados y haría falta que aparecieran aunque no tengan resultado. |
![]() |
|
|
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 |
|