11/03/2006

DBChart c/ Paradox

Olá amigos delphianos.

Tenho uma tabela de paradox com os seguinte campos :

Data Date
Lucro Number

Essa tabela serve pra pessoa registrar o lucro que ela teve no dia que ela informar no campo Data. Bom o que estou querendo fazer é criar um gráfico em DBChart para mostrar o lucro dela em Janeiro, Fevereiro .... até Dezembro...

Como faço pra fazer isso ? Sou iniciante e nao faço nem idéia de como começar... valeu galera....

Se alguem puder explicar passo-a-passo eu agradeceria imensamente...


Tiagojmilam

Respostas

12/03/2006

Marco Salles

ola amigo [b:6d356e9ed3]TiagoJmilam[/b:6d356e9ed3] , voce que esta iniciando nos estudos do delphi assim como todos nos que fazemos parte desta comunidade..

Se eu pudesse eu mandava fechar todos os cursos dedelphi do brasil que ensina paradox.. Não que eu tenha algo contra o paradox , Mas o problema esta na maneira como esses cursos administram o ensino do Paradox . O Paradox deve ser ensinado como algo que ja foi e não com referencia como a maioria dos [b:6d356e9ed3]cursos fazem... [/b:6d356e9ed3]< E um mes de Paradox e uma seman dos outros bancos > ... Com isso o aluno começa a desenvolver em paradox e fica amarrado neste tecnologia que esta ultrapassada

Eu passei e passo por isso .. Tenho sistemas em paradox que tenho preguiça e ´medo´ de mudar , medo da trabalheira que pode me dar.

[b:6d356e9ed3]Então conselho ... Não inicie nada grande em Paradox[/b:6d356e9ed3]

.................................

Vamos voltar no assunto

[b:6d356e9ed3]Essa tabela serve pra pessoa registrar o lucro que ela teve no dia que ela informar no campo Data. Bom o que estou querendo fazer é criar um gráfico em DBChart para mostrar o lucro dela em Janeiro, Fevereiro .... até Dezembro... [/b:6d356e9ed3]



Aqui esta muito confuso sua Regra de negócio.. Lucro não se soma como se soma inteiros.. se o cara ter um lucro de 1¬ todo dia , então em um mes ele teve lucro de 30¬ ???? Não , acho que precisa de mais consistencia e modelagem nesse tratamento. Mas vou deixar de lado esquecer esta questão por ser uma questão de interpretação e partir para o proposto.

[b:6d356e9ed3]Como faço pra fazer isso [/b:6d356e9ed3]? Sou iniciante e nao faço nem idéia de como começar... valeu galera....


[b:6d356e9ed3]No Paradox , acho pouco improvavel que alguem resolva usando tecnica [/b:6d356e9ed3]para isso.. Se alguem resolver sera de muita valia para mim.. Ficarei surpreso e agradecido

O Que se faz nesta situação , caso não apareça outra solução e usar [b:6d356e9ed3]artificios[/b:6d356e9ed3]

primeiro quero destacar que a apresentação dos dados no TDbChar e o lado mais fácil da questão ... [b:6d356e9ed3]O Lado mais complicado e mudar a sua base de dados que é diaria para mensal e fazer a soma desses registros [/b:6d356e9ed3]

mas eu tenho uma saida para este problema , assim como outros devam ter outros tipos de saida para esse problema.. No meu caso não é nada tecnico e sim usando um artificio...

vou apresentar , na esperança que outros apresentem algo diferente

a)voce deve criar na sua base de dados os campo : mes e dia do tipo inteiros
b)para cada registro novo que for incluido voce deve salvar tb , indiretamente os campo mes e Ano
isto pode ser feito no exemplo before post da tabela ou qualquer outro lugar , desde que para cada data voce consiga desmenbrar o ano e o mes desta data e salvar em campos separados... Tipo isso

procedure TForm1.Table1BeforePost(DataSet: TDataSet);
var
data :Tdate;
ano,mes,dia:Word;
begin
data:=table1.fieldbyname(´data´).AsDateTime;
decodedate(data,ano,mes,dia);
table1.FieldByName(´mes´).asinteger:=mes;
table1.FieldByName(´ano´).AsInteger:=Ano;
end;


Isto então deve ser feito para cada registro novo que for adicionado a sua base de dados.. e não pode deixar de corrigir para os demais registros , que ja estão salvos nesta tabela

de posse disso feito , vamos a segunda parte

b)inclua um query .. Ligue a query e escreva no sql da query o seguinte
select mes, sum(number) as totalLucro from Teste
where ano=:DefinirAno
group By mes



não soute espaço entre [b:6d356e9ed3]ano=:DefinirAno[/b:6d356e9ed3]

nesse momento se voce for na propriedade params a nivel de projeto da query1 , voce vera que aparece o definir ano.. Então click nele escreva a seguintes propreedade
DataType coloque inteiro
paramType coloque ptinput
value coloque 2005 pode ser qualquer ano

Volte no objeto inspector da query e active = true

Claro que voce ter um dataSource associado a Query 1 e o DbGrid Associado a o DataSource

Nesse momento a nivel de projeto , ja da para verificar soma de todos os meses do Ano de 2005

coloque agora um edit e um botão .. eescreva

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
try
 query1.Close;
 query1.Params[0&93;.AsInteger:=strtoint(edit1.text);
 query1.open;
except
on econverterror do 
  begin
    showmessage(´valor do ano invalido ´);
    edit1.setfocus;
  end;
end;


Rode o programa e veja se esta lhe agradando .. a segunda parte
se tudo tiver de acordo a gente faz depois ... E como eu disse e a parte mais fácil disso tudo , talves no proprio TDBchar tenha jeito de faze este agrupamento .. Nesse caso eu sinceramente não sei se é possivel..

Boa sorte..


Responder Citar

14/03/2006

Marco Salles

Gostaria apenas de fazer uma pequena correção , na minha ultima postagem.. Não que ela estivesse Totalmente errada , mas percebi que ela pode ser minimizada. Observando o fato que o Paradox suporta a função Extract , para esse objetivo , podemos eliminar a criação de um campo na tabela

Aonde eu disse:

a)voce deve criar na sua base de dados os campo : mes e[b:576e8e9dc3] Ano [/b:576e8e9dc3]do tipo inteiros


pode ser trocado por

a)voce deve criar na sua base de dados o campo : mes


e na segunda parte , na definição do Sql a nivel de projeto , pode-se trocar

select mes, sum(number) as totalLucro from Teste 
where ano=:DefinirAno 
group By mes


aplicando o Extract Na data , Podemos obter o Ano

select mes, sum(number) as totalLucro from Teste 
where Extract(Year From Data)=:DefinirAno 
group By mes


[b:576e8e9dc3]o que nos poupa da criação do campo Ano[/b:576e8e9dc3]... Observando o Extract , poderiamos estar tentados tb a aplica-lo no mes , tipo isso

select Extract(Month From Data) as mesAtivo, sum(number) as totalLucro from Teste 
where Extract(Year From Data)=:DefinirAno 
group By mesAtivo


So que infelismente , acho que o Paradox não suporta este Agrupamento. O que faz que tenhamos de fato, ter que criar o campo Mes fisicamente na tabela da Base De Dados.


Responder Citar