Ir para conteúdo
Fórum Script Brasil
  • 0

campo calculado no DBGRID


erickramossilva

Pergunta

ola amigos

estou com um probleminha na aplicação que eu estou montando...

o problema é o seguinte

na minha tabela eu fiz uma consulta com referencias cruzadas para gerar um certo resultado

agora eu queria calcular a porcentagem de cada linha desse resultado. tem jeito de fazer isso??

o codigo que estou usando para fazer o cruzamento das informações é

adoquery1.Close;

adoquery1.SQL.Add('TRANSFORM Count(Tabela1.Código) AS ContarDeCódigo '+

' SELECT Tabela1.[01], Count(Tabela1.Código) AS [Total de Código] '+

' FROM Tabela1 '+

' GROUP BY Tabela1.[01] '+

' PIVOT Tabela1.Profissão;');

adoquery1.Active;

adoquery1.open;

eo que eu queria é ter o valor de total de codigo gerado em porcentagem dentro do DBGRID

estou usando o Access coomo banco de dados e um adoquery para fazer o cruzamento dos campos

Não sou muito experiente em Delphi, na realidade, essa é a minha primeira aplicação em Delphi

não estou acostumado com normas tecnicas.

agradeço desde já :rolleyes:

Link para o comentário
Compartilhar em outros sites

16 respostass a esta questão

Posts Recomendados

  • 0
eu queria calcular a porcentagem de cada linha desse resultado

voce tem que ser mais explicito ... sempre dê um exemplo do que voce quer para faciliar a resposta

abraço

olá jonas o meu problema é o seguinte, eu estou montando um programa para realizar estatisticas, eu trabalho com uma tabela com uma media de 150 perguntas e essas perguntas são cruzadas com respostas de acordo com Escolaridade, profissão, renda e sexo.

esse cruzamento me gera um resultado de quantas pessoas responderam determinada pergunta.

EX:

melhor loja total de codigos masculino feminino

Pernambucanas 50 20 30

lojas cem 10 5 5

casas bahia 3 3

esse é o resultado que eu adiquiro com a minha consulta

oque eu quero é transformar o campo total de códigos no meu DBGrid em porcentagem

só que eu não estou conseguindo implementar um campo calculado no DB grid para realizar essa operação

como já disse, eu ainda sou um pouco leigo nesse assunto

espero ter sido mais claro

obrigado

Link para o comentário
Compartilhar em outros sites

  • 0

vamos ver:

melhor loja .........| total de codigos.....| masculino | feminino

Pernambucanas ..|.........50................|....20.........|......30.....

lojas cem ...........|.........10................|.....5.........|.......5......

casas bahia.........|.........6..................|.....3.........|.......3......

o que eu quero é transformar o campo total de códigos no meu DBGrid em porcentagem

voce vai precisar criar um novo campo calculado

melhor loja .........| total de codigos| masculino | feminino | Percentual

Pernambucanas ..|.........50......|....20.........|......30.....|.....75,75 %

lojas cem ...........|.........10......|.....5.........|.......5......|.....15,16 %

casas bahia.........|.........6........|.....3.........|.......3......|.....9,09 %

primeiro voce deve entender a lógica de usar campos calculados

veja os links

http://www.facape.br/jocelio/es/material_e...poCalculado.pdf

http://www.devmedia.com.br/post-503-Criand...entdataset.html

http://www.ramosdainformatica.com.br/art_r...s01.php?CDA=612

http://www.planetadelphi.com.br/dica/6729/...campo-calculado

http://www.lula.pro.br/artigo.asp?codigo=209&autor=Naks

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
vamos ver:

melhor loja .........| total de codigos.....| masculino | feminino

Pernambucanas ..|.........50................|....20.........|......30.....

lojas cem ...........|.........10................|.....5.........|.......5......

casas bahia.........|.........6..................|.....3.........|.......3......

o que eu quero é transformar o campo total de códigos no meu DBGrid em porcentagem

voce vai precisar criar um novo campo calculado

melhor loja .........| total de codigos| masculino | feminino | Percentual

Pernambucanas ..|.........50......|....20.........|......30.....|.....75,75 %

lojas cem ...........|.........10......|.....5.........|.......5......|.....15,16 %

casas bahia.........|.........6........|.....3.........|.......3......|.....9,09 %

primeiro voce deve entender a lógica de usar campos calculados

veja os links

http://www.facape.br/jocelio/es/material_e...poCalculado.pdf

http://www.devmedia.com.br/post-503-Criand...entdataset.html

http://www.ramosdainformatica.com.br/art_r...s01.php?CDA=612

http://www.planetadelphi.com.br/dica/6729/...campo-calculado

http://www.lula.pro.br/artigo.asp?codigo=209&autor=Naks

abraço

ola Jhonas muito obrigado pela atenção

eu li os artigos e eu li que precisa utilizar um Data set para fazer esse campo calculado, eu estou utilizando o ADO Query para fazer a conexão com a minha tabela no Access(só existe uma tabela)

eu tentei utilizar o Data Set provider, ligando-o na minha ADOQuery mas quando eu ligo o DSprovider no Data Set ele não encontra os campos da minha tabela...

teria um jeito de criar esse campo calculado utilizando o ADOQuery ?

e to meio perdido em como fazer o calculo da porcentagem do campo total de codigo

que variaveis usar?

sabendo que podem ter 10 respostas, como fazer o Delphi visualizar isso?

sabendo que a porcentagem é igual a uma linha do campo*1/ pelo total geral

to perdido em como fazer isso...

são muitas coisas eu sei...mas se eu fizer isso eu concluo a minha aplicação

obrigado pela atenção mais uma vez

Link para o comentário
Compartilhar em outros sites

  • 0
eu tentei utilizar o Data Set provider, ligando-o na minha ADOQuery mas quando eu ligo o DSprovider no Data Set ele não encontra os campos da minha tabela...

ADOQuery + DataSetProvider + ClientDataSet + DataSource

depois de fazer a ligação entre os componentes, 2 cliques no ClientDataSet para adicionar os campos da sua tabela

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
eu tentei utilizar o Data Set provider, ligando-o na minha ADOQuery mas quando eu ligo o DSprovider no Data Set ele não encontra os campos da minha tabela...

ADOQuery + DataSetProvider + ClientDataSet + DataSource

depois de fazer a ligação entre os componentes, 2 cliques no ClientDataSet para adicionar os campos da sua tabela

abraço

vlw Jhonas...

consegui fazer a ligação aqui e já criei o campo calculado :lol:

mas ainda to em duvida quanto a linha de codigo da porcentagem, você poderia me mostrar dentro da minha aplicação

não to sabendo implementar o codigo...

(lembrando que eu só quero o total de código, os outros campos vão sumir no meu relatório)

obrigado pela atenção

grande abraço...

Link para o comentário
Compartilhar em outros sites

  • 0
melhor loja .........| total de codigos| masculino | feminino | Percentual

Pernambucanas ..|.........50......|....20.........|......30.....|.....75,75 %

lojas cem ...........|.........10......|.....5.........|.......5......|.....15,16 %

casas bahia.........|.........6........|.....3.........|.......3......|.....9,09 %

para obter o percentual voce primeiro precisa somar todos os campos do total de codigos

50 + 10 + 6 = 66

depois faz-se a regra de 3 para obter os percentuais em cada registro

(50 * 100) / 66 = 75,75 %

(10 * 100) / 66 = 15,16 %

( 6 * 100) / 66 = 9,09 %

agora voce deve implementar essa lógica no campo calculado ... leia novamente os links e veja se consegue fazer

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
para obter o percentual voce primeiro precisa somar todos os campos do total de codigos

50 + 10 + 6 = 66

depois faz-se a regra de 3 para obter os percentuais em cada registro

(50 * 100) / 66 = 75,75 %

(10 * 100) / 66 = 15,16 %

( 6 * 100) / 66 = 9,09 %

ola denovo...

olha só...eu li e reli os artigos que você me mandou e consugui criar o campo calculado e fazer ele aparecer no dbgrid e o único problema que eu to tendo agora é como declarar o campo total de codigo na minha conta...ele não existe na minha tabela...ele faz parte da consulta da tabela.

eu estava declarando assim

var total, r:real

begin

total:=strtofloat('total de codigo+ total de codigo')

r:=strtofloat('total de codigo')*1/total

cdspercentual.value:=r;

porem dá um erro no Delphi assim

clientdataservice1.field 'codigo' não pode ser encontrado

como eu poderia declarar esse campo ?

abraço

obrigado

Editado por erickramossilva
Link para o comentário
Compartilhar em outros sites

  • 0

Um exemplo

procedure TForm1.BitBtn1Click(Sender: TObject);
VAR S : string; i : integer; tot, perc : real;
begin
   Query1.Active := false;
   ClientDataSet1.Active := false;
   Query1.Active := true;
   ClientDataSet1.Active := true;

   tot := 0;
   for i := 1 to ClientDataSet1.RecordCount -1 do
      tot := tot + ClientDataSet1NUM.Value;

   ClientDataSet1.First;

   for i := 1 to ClientDataSet1.RecordCount -1 do
      begin
         perc := (ClientDataSet1NUM.Value * 100)/tot;

         ClientDataSet1.Edit;

         ClientDataSet1PERC.Value := perc;  // campo fkInternalCalc

         //OBS: UM CAMPO CALCULADO NÃO PODERÁ SER SALVO
         //ClientDataSet1.Post;
         //ClientDataSet1.ApplyUpdates(-1);

         ClientDataSet1.Next;
      end;
end;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Um exemplo

procedure TForm1.BitBtn1Click(Sender: TObject);
VAR S : string; i : integer; tot, perc : real;
begin
   Query1.Active := false;
   ClientDataSet1.Active := false;
   Query1.Active := true;
   ClientDataSet1.Active := true;

   tot := 0;
   for i := 1 to ClientDataSet1.RecordCount -1 do
      tot := tot + ClientDataSet1NUM.Value;

   ClientDataSet1.First;

   for i := 1 to ClientDataSet1.RecordCount -1 do
      begin
         perc := (ClientDataSet1NUM.Value * 100)/tot;

         ClientDataSet1.Edit;

         ClientDataSet1PERC.Value := perc;  // campo fkInternalCalc

         //OBS: UM CAMPO CALCULADO NÃO PODERÁ SER SALVO
         //ClientDataSet1.Post;
         //ClientDataSet1.ApplyUpdates(-1);

         ClientDataSet1.Next;
      end;
end;

abraço

olá amigo...

olha só, eu não pude testar o seu codigo ainda porque ta dando muito erro...

se você quiser dar uma olhadinha na minha aplicação pra ter uma noção doque eu estou fazendo eu te envio por email...

to precisando muito concluir logo essa aplicação...Meu patrão tá me pressionando muitoo :(

aguardo resposta...

obrigado

abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Não sou muito experiente em Delphi, na realidade, essa é a minha primeira aplicação em Delphi

to precisando muito concluir logo essa aplicação...Meu patrão tá me pressionando muitoo

isso não tá parecendo verdade ... rs que voce não é muito experiente em delphi está claro,

mas seu patrão estar pressionando ?? não será o seu professor ?? rs

bem de qualquer modo, o exemplo que te passei é para voce tentar modificar o seu código, para obter esse resultado

se você quiser dar uma olhadinha na minha aplicação pra ter uma noção doque eu estou fazendo eu te envio por email...

eu até poderia olhar o seu código , mas não agora .... pois estou fazendo um serviço para um cliente no momento ..ok ?

por enquanto sugiro a voce procurar no google pela palavra "campo calculado delphi"

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
isso não tá parecendo verdade ... rs que voce não é muito experiente em delphi está claro,

mas seu patrão estar pressionando ?? não será o seu professor ?? rs

não é nenhum professor.. eu fiz um curso tecnico em informática em 2005 que foi quando eu aprendi a programar em Delphi, e como o curso era de 18 meses total, a gente chegou a programarem Delphi mesmo no ultimo semestre(1 semestre-logica de programação- 2 semestre- PASCAL - 3 semestre Delphi) a gente não viu muita coisa, o tempo passou e eu não procurei me aperfeiçoar em Delphi, agora eu comecei a trabalhar...e a empresa que eu trabalho é uma empresa de Opinião Publica... (www.dataprevia.com.br-talvez o site esteja em manutenção)

e eu to montando um software pra automatizar as coisas por aqui... o que antes teria que fazer no access e depois passar pro Excel e gerar os relatorios, poderia ser mais fácil com esse software... porém oque eu achei que seria uma tarefa fácil, ta se perdendo em meio de um bilhão de dúvidas...

me desculpa se eu to sendo insistente, é que foi a única solução que eu encontrei pra isso...vou continuar pesquisando e estudando...já entendi a lógica que voce me passou, to tentando tratar os erros do programa....

vlw cara...obrigado por tudo...:)

abraçoss

Editado por erickramossilva
Link para o comentário
Compartilhar em outros sites

  • 0

OK ... então como voce está trabalhando , sabe que o prazo dado ao cliente deve ser cumprido a risca ... não é ?

desculpe não poder te dar a atenção necessaria, mas tenho que cumprir o prazo do trabalho

mas veja essa apostila .... pagina 42, acho que vai te ajudar

http://pt.scribd.com/doc/20180634/29/Como-...mpos-calculados

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
desculpe não poder te dar a atenção necessaria, mas tenho que cumprir o prazo do trabalho

mas veja essa apostila .... pagina 42, acho que vai te ajudar

http://pt.scribd.com/doc/20180634/29/Como-...mpos-calculados

abraço

vlw cara...e como eu sei como é um prazo...o meu ta ficando apertado já..mas vo dar uma pesquisada...uma analisada melhor nesse programa...

vlw pela ajuda... :rolleyes:

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

desculpe não poder te dar a atenção necessaria, mas tenho que cumprir o prazo do trabalho

mas veja essa apostila .... pagina 42, acho que vai te ajudar

http://pt.scribd.com/doc/20180634/29/Como-...mpos-calculados

abraço

ola novamente...

olha só eu to com um probleminha...

como eu havia dito... o meu client data set não encontra os campos da minha tabela... e mesmo se eu clicar direto no adoquery e selecionar a opção "add all fields"

ele me retorna um erro porque não tenho nenhum codigo na propriedade sql...mas enfim...se eu digitar algo nesse campo vai nterferir na minha consulta inteira que

eu digitei no botão pesquisar do form...

Ocodigo digitado no botão é esse...

if edtconsult.text='01' then

begin

if radiobutton1.Checked then

begin

adoquery1.Close;

adoquery1.SQL.Add('TRANSFORM Count(Tabela1.Código) AS ContarDeCódigo '+

' SELECT Tabela1.[01], Count(Tabela1.Código) AS [Total de Código] '+

' FROM Tabela1 '+

' GROUP BY Tabela1.[01] '+

' PIVOT Tabela1.Profissão;');

adoquery1.Active;

adoquery1.open;

já fiz o teste... eu digito algo na propriedade SQL do ADOQuery e ele não faz as consultas e me retorna um erro assim...." campo código não encontrado"

só pra complementar a informação... essa Adoquery está conectada a um ADOConection...

tentei fazer a conexão direta do ADOQuery com a minha tabela, mas quando chamo os campos ele me da o mesmo erro...de falta de codigo na SQL;

existe uma outra maneira de eu fazer essa conexão ?

ou alguma outra forma de fazer essas consultas?

agradeço desde já a informação

abraços

Editado por erickramossilva
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...