Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   tdbchart + adoquery en delphi 7 (https://www.clubdelphi.com/foros/showthread.php?t=87513)

jeremiselxi 16-01-2015 14:43:23

tdbchart + adoquery en delphi 7
 
1 Archivos Adjunto(s)
Buenos días a Todos Colegas.

Tengo una tabla con los siguientes campos (Cantidad y Actividad) con la finalidad de llevar un conteo de las actividades y lo hago a través de un Adoquery.

Adjunto una imagen de la información que obtengo de la base de datos.

En este sentido, he leído mucho pero no logro hacer un grafico que quiero en Delphi 7.

Al elegir un grafico circular automáticamente en la leyenda aparecen la cantidad de equipos mas el nombre del equipo obtenido.

Entonces eso mismo quiero hacer con esta información que obtuve de la base de datos.

Quiero que me muestre tanto el porcentaje como el nombre de la actividad y al elegir el datasource en el TDBCHART, solo me permite elegir el campo numérico.

Espero haberme explicado bien y Gracias de antemano por su colaboración.

Saludos.

nlsgarcia 16-01-2015 15:21:35

jeremiselxi,

Cita:

...no logro hacer un gráfico que quiero en Delphi 7...
:rolleyes:

Revisa esta información:
Espero sea útil :)

Nelson.

jeremiselxi 16-01-2015 19:39:10

1 Archivos Adjunto(s)
Cita:

Empezado por nlsgarcia (Mensaje 487734)
jeremiselxi,

:rolleyes:

Revisa esta información:
Espero sea útil :)

Nelson.

Muchisisimas gracias nlsgarcia.

Adjunto el código que me funcionó.

Primero debemos agregar un adoquery y renombrarlo como "table".

Hay que agregar un dbtchart y dando doble click agregar una serie.

Adjunto el código:

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, TeEngine, Series, ExtCtrls, TeeProcs, Chart, DbChart, Grids,
  DBGrids, DB, ADODB, StdCtrls, DBClient;

type
  TForm1 = class(TForm)
    table: TADOQuery;
    ADOConnection1: TADOConnection;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    Button1: TButton;
    tableACTIVIDADESREALIZADAS: TWideStringField;
    tableTOTALES: TIntegerField;
    DBChart1: TDBChart;
    Series1: TPieSeries;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


  
//las constantes
const
  GColor : Array[1..12] of TColor = (clGreen, clOlive, clNavy, clPurple, clTeal,
                                     clGray, clSilver, clRed, clLime, clYellow,
                                     clBlue, clFuchsia);
var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
end;

procedure TForm1.Button1Click(Sender: TObject);

var
   actividades : String;
   totales : Integer;
   i : Integer;

begin

   if Assigned(Table) then
   begin

      i := 1;

      with DBChart1 do
      begin
         Title.Text.Clear;
         Title.Text.Add('Relación porcentual de las tareas rutinarias realizadas en el año'); //Aquí va el titulo del Grafico
         Legend.Visible := true;
         LeftAxis.Title.Caption := 'TOTALES'; //aquí va el titulo de la columna totales
         LeftAxis.Title.Font.Color := clBlue;
         BottomAxis.Title.Caption := 'ACTIVIDADES REALIZADAS';  //aquí va el titulo de la columna de las actividades
         BottomAxis.Title.Font.Color := clBlue;
      end;

      with Series1 do
      begin

         Clear;

         Marks.Style := smsPercent;

         with Table do
         begin
            Open;
            while not eof do
            begin
               actividades := Table.FieldByName('ACTIVIDADES REALIZADAS').AsString;
               totales := Table.FieldByName('TOTALES').AsInteger;
               Add(totales, actividades, GColor[i]);
               inc(i);
               Next;
            end;
            //Close;
         end;

      end;

   end;

end;

Ahora solo tengo un solo problema y es como hacer para que el porcentaje del grafico este un poco desagrupado, ya que aparecen uno arriba de otro como muestra la imagen adjunta.

Alguien tiene alguna idea de como solucionarlo?.

Saludos y gracias

jeremiselxi 20-01-2015 16:46:04

Nadie por aquí? :)

jeremiselxi 20-01-2015 17:26:45

Cita:

Empezado por jeremiselxi (Mensaje 487896)
Nadie por aquí? :)

Me respondo yo mismo, cree una variable global llamada rotar y cree dos botones llamado giraraladerecha y giraralaizquierda.

El código completo seria así:

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, TeEngine, Series, ExtCtrls, TeeProcs, Chart, DbChart, Grids,
  DBGrids, DB, ADODB, StdCtrls, DBClient, ExcelXP, OleServer, ComObj;

type
  TForm1 = class(TForm)
    table: TADOQuery;
    ADOConnection1: TADOConnection;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    generargrafico: TButton;
    tableACTIVIDADESREALIZADAS: TWideStringField;
    tableTOTALES: TIntegerField;
    ExcelChart1: TExcelChart;
    ExcelApplication1: TExcelApplication;
    ExcelChart2: TExcelChart;
    DBChart1: TDBChart;
    Series1: TPieSeries;
    giraralaizquierda: TButton;
    giraraladerecha: TButton;
    procedure FormCreate(Sender: TObject);
    procedure generargraficoClick(Sender: TObject);
    procedure giraralaizquierdaClick(Sender: TObject);
    procedure giraraladerechaClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


  
//las constantes
const
  GColor : Array[1..12] of TColor = (clGreen, clOlive, clNavy, clPurple, clTeal,
                                     clGray, clSilver, clRed, clLime, clYellow,
                                     clBlue, clFuchsia);
var
  Form1: TForm1;

implementation

{$R *.dfm}
var
rotar : Integer;


procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
end;

procedure TForm1.generargraficoClick(Sender: TObject);

var
   actividades : String;
   totales : Integer;
   i : Integer;

begin
   table.First;
   
   if Assigned(Table) then
   begin
      rotar:=1;
      i := 1;

      with DBChart1 do
      begin
         Title.Text.Clear;
         Title.Text.Add('Relación porcentual de las tareas rutinarias realizadas en el año');
         Legend.Visible := true;
         LeftAxis.Title.Caption := 'TOTALES';
         LeftAxis.Title.Font.Color := clBlue;
         BottomAxis.Title.Caption := 'ACTIVIDADES REALIZADAS';
         BottomAxis.Title.Font.Color := clBlue;
      end;

      with Series1 do
      begin

         Clear;

         Marks.Style := smsPercent;

         with Table do
         begin
            Open;
            while not eof do
            begin
               actividades := Table.FieldByName('ACTIVIDADES REALIZADAS').AsString;
               totales := Table.FieldByName('TOTALES').AsInteger;
               Add(totales, actividades, GColor[i]);
               inc(i);
               Next;
            end;
            //Close;
         end;

      end;

   end;

end;



procedure TForm1.giraralaizquierdaClick(Sender: TObject);

begin

   if Assigned(Table) then
   begin

      rotar := rotar+5;

      with DBChart1 do
      begin

      end;

      with Series1 do
        RotationAngle:= rotar;

   end;

end;

procedure TForm1.giraraladerechaClick(Sender: TObject);
begin

   if Assigned(Table) then
   begin

      rotar := rotar-5;

      with DBChart1 do
      begin

      end;

           with Series1 do
      begin
        try
        RotationAngle:= rotar;
        except
        ShowMessage('Has llegado al inicio');

           end;
       end;
   end;


end;

end.


La franja horaria es GMT +2. Ahora son las 06:04:28.

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