Array
(
)

pegar valor digitado em um DBEdit

Gtts
   - 02 fev 2006

Olá a todos.

Tenho uma lista de variáveis em meu sistema do tipo Currency (moeda), então... em um determinado momento eu estava precisando pegar estes valores que estão sendo digitados em dbedits, dbedit1, dbedit2, dbedit3, dbedit4, dbedit5 e somar para exibir no dbeditsoma, mas não consigo tirar estes valores dos dbedit´s e somar. Se alguém puder me ajudar fico muito grato. Obrigado.

Estou no momento usando assim:

var
p1, p2, p3, p4, p5, pmedia : Currency;
begin
Table1.Post;
p1 := Form66.Table1.FieldValues[´Prod_d1´];
p2 := Form66.Table1.FieldValues[´Prod_d2´];
p3 := Form66.Table1.FieldValues[´Prod_d3´];
p4 := Form66.Table1.FieldValues[´Prod_d4´];
p5 := Form66.Table1.FieldValues[´Prod_d5´];
pmedia := p1+p2+p3+p4+p5;
CurrToStr(pmedia);
EditTotal_diaria.Text := (Formatfloat(´R$#0.00´,(pmedia)));
IF application.MessageBox(´Deseja salvar o registro?´,´Confirme´,
mb_yesNo + mb_iconquestion + mb_defbutton1) = idYes THEN
Begin
Table1.Refresh;
BitBtn6.Enabled := True;
BitBtn7.Enabled := True;
BitBtn8.Enabled := True;

O problema é que o sistema faz o q quero mostrando e inserindo no bdedittotal_diaria o total, mas fecho o form ou simplesmente mudo de registro e o valor calculado some. Usei a propriedade FieldValues[´....´]; sei que a mesma os valores tem q serem salvos mas não achei outra forma de tirar os valores a não ser esta. Mais uma vez obrigado pela ajuda e desculpe ser tão extensa minha pergunta.


Rjun
   - 02 fev 2006

Acho que seria mais prático você utilizar um campo calculado para fazer a soma.


Gtts
   - 02 fev 2006

é q no cadastro precisam aparecer estes campos todos inclusive o final com a soma.


Rjun
   - 02 fev 2006

E qual o problema de usar campo calculado? Você pode exibi-los em um dbedit como um campo normal.


Emerson
   - 03 fev 2006

como indicou o Rjun, eu optaria pelo campo calculado. mas respondendo à sua pergunta...

coloque isso no OnDataChange do seu datasource e veja se dá certo:

p1 := dbedit1.field.asfloat;
p2 := dbedit2.field.asfloat;
p3 := dbedit3.field.asfloat;
p4 := dbedit4.field.asfloat;
p5 := dbedit5.field.asfloat;
pmedia := (p1+p2+p3+p4+p5) / 5;

torne a variável pmedia private, assim ela poderá ser ´vista´ em qualquer local da unit.

se você optar por usar campo calculado...
é necessário que seus campos sejam persistentes.
- dê um duplo-clique no seu dataset
- se ainda não há campos na lista, pressione CTRL+A e selecione os campos desejados
- pressione CTRL+N (New Field...) e, em:
Field Name, digite pmedia (ou outro nome que lhe pareça melhor)
Type, selecione Float
Field Type, selecione Calculated
- clique em Ok.
o campo calculado está criado. agora precisamos fazer o cálculo propriamente dito.
no evento OnCalcFields do dataset, faça:
#Código

datasetPMEDIA.AsFloat := (datasetProd_d1.AsFloat +
datasetProd_d2.AsFloat +
datasetProd_d3.AsFloat +
datasetProd_d4.AsFloat +
datasetProd_d5.AsFloat ) / 5;
(troque ´dataset´ pelo nome do seu dataset)

agora ponha um dbedit, aponte-o para o campo PMedia recém criado, execute o programa e veja o resultado.