Passando valor de uma fields pra uma tabela????

Delphi

06/10/2006

Ola galera ++ .. tudo blz... tipo assim, criei umas tabelas virtuais que me possibilitasse a efetuar alguns calculos so qto fazendo uns calculos no evento oncalcfields ele da erro, ele so funciona quando eu uso um fields como valor resultante.. visto que issu tudo esta ligado a um dbgrid :

tipo esse e o codigo que eu to usando no Oncalcfields:

[color=red:2aa5c314ab]procedure TDM.TB_CadastroCalcFields(DataSet: TDataSet);
begin
//--------FRETE-------
DM.TB_CadastroAuxSubTotal1.AsFloat:=DM.TB_CadastroV_UNIT.AsFloat*DM.TB_CadastroFRETE.AsFloat/100;
DM.TB_CadastroAuxFrete.AsFloat:=DM.TB_CadastroAuxSubTotal1.AsFloat*DM.TB_CadastroQUANT.AsInteger;
//-----------ICMS----------------------------
DM.TB_CadastroAuxSubTotal2.AsFloat:=DM.TB_CadastroV_UNIT.AsFloat*DM.TB_CadastroICMS.AsFloat/100;
DM.TB_CadastroAuxICMS.AsFloat:=DM.TB_CadastroAuxSubTotal2.AsFloat*DM.TB_CadastroQUANT.AsInteger;
//---------------OUTROSGASTOS-------------------------
DM.TB_CadastroAuxSubTotal3.AsFloat:=DM.TB_CadastroV_UNIT.AsFloat*DM.TB_CadastroOUTROSDESP.AsFloat/100;
DM.TB_CadastroAuxOutosDesp.AsFloat:=DM.TB_CadastroAuxSubTotal3.AsFloat*DM.TB_CadastroQUANT.AsInteger;
//-----------------DESCONTOS------------------------
DM.TB_CadastroAuxSubTotal4.AsFloat:=DM.TB_CadastroV_UNIT.AsFloat*DM.TB_CadastroDESCONTO.AsFloat/100;
DM.TB_CadastroAuxDesconto.AsFloat:=DM.TB_CadastroAuxSubTotal4.AsFloat*DM.TB_CadastroQUANT.AsInteger;

//-----------------------SOMA TOTAL------------
DM.TB_CadastroV_TOTAL.AsFloat:=(DM.TB_CadastroAuxFrete.AsFloat+DM.TB_CadastroAuxICMS.AsFloat+DM.TB_CadastroAuxOutosDesp.AsFloat-DM.TB_CadastroAuxDesconto.AsFloat+DM.TB_CadastroV_UNIT.AsFloat)*DM.TB_CadastroQUANT.AsInteger;
end;[/color:2aa5c314ab]

Ele roda blz mais quando eu vou abaster os campo num dbgrid ele da ERRO,
+ se eu mudar a ultima linha pra :
[color=red:2aa5c314ab]
DM.TB_CadastroAuxValorTotal.AsFloat:=(DM.TB_CadastroAuxFrete.AsFloat+DM.TB_CadastroAuxICMS.AsFloat+DM.TB_CadastroAuxOutosDesp.AsFloat-DM.TB_CadastroAuxDesconto.AsFloat+DM.TB_CadastroV_UNIT.AsFloat)*DM.TB_CadastroQUANT.AsInteger;[/color:2aa5c314ab]
ele roda blz....
Por issu to precisando de ajuda pra pode fazer esse valor do fields, passar para a tabela DM.TB_CadastroV_TOTAL.AsFloat o resultado dos calculos acima .. um grande abraco a todos...

uma abraco a todos!!!!


Mulambo

Mulambo

Curtidas 0

Respostas

Micheus

Micheus

06/10/2006

[b:db9f5f52ab]mulambo[/b:db9f5f52ab], DM.TB_CadastroV_TOTAL não é um campo calculado certo?!
Se não for, vc não pode atruibuir um valor a ele neste evento - a tabela estará com State = dsCalcFields.
Ele deverá estar em modo edição (dsEdit ou dsInsert) para que vc possa atribuir um valor a ele. Talvez dê para usar o evento OnChange dos campos (fields) da tabela envolvidos no cálculo para atualizar V_TOTAL, já que neste momento a tabela estará em edição ou inserção.


GOSTEI 0
Mulambo

Mulambo

06/10/2006

micheus, a tabela DM.TB_CadastroV_Total não e uma fields, e um campo da q guarda o resultado total da operação. tentei fazer do jeito que vc falou.. mais naum funcionou.. tipo consegui fazer aparecer o valor usando a tabela DM.TB_CadastroV_Total, porem tem um problema... quando eu acesso a tabela em um outro dbgrid naum costa nem um valor na tabela... ja tentei criar um laço para manda os valores da fields para tabela, so q tabem naum funciona...

Tem alguma ideia como posso resolver esse problema...


GOSTEI 0
Micheus

Micheus

06/10/2006

[b:d180dcda9d]mulambo[/b:d180dcda9d], vamos começar denovo?
criei umas tabelas virtuais
como assim, que componente vc utiliza? Que campos possui?


GOSTEI 0
Mulambo

Mulambo

06/10/2006

[b:8519aa327c]Micheus [/b:8519aa327c], deixa eu explicar melhor....

Estou desenvolvendo um Sistema pra cotação de preço, e esse sistema vai me fornecer qual empresa eu devo comprar o produto que tiver o menor preço... so que eu naum tenho um numero exato de empresas que participaram dessa cotação, posso ter tanto 2 quanto 10 empresas.
porem nessa cotação vou ter de levar em consideração os dados de FRETE,ICMS,VALOR UNITARIO,DESCONTO,QUANTIDADE.
Para desenvolver esse sistema eu to usando o delphi7 e o DB Interbase.
criei uma tabela com o nome de CADASTRO_EMPRESA, que contem os dados que eu vou receber de cada empresa, como o valor do ICMS,VALOR UNITARIO,ETC. e criei uma outra tabela para receber os dados do produto, CODIGO E NOME, e uma outra tabela pra receber os dados das empresas que ganharam a cotação dos produtos, com o CODIGO DO PRODUTO, NOME DO PRODUTO,NOME DA EMPRESA, QUANT,V_UNIT,ICMS,FRETE,DESCONTO,VALOR TOTAL.
Criei um form principal que contem um DBGRID no qual o usuario vai cadastrar os nomes das empresas que irão participar da cotação, o ICMS cobrado por elas sobre o produto e o valor do frete.
ja em um outro form, vou ter um DBEdit com o codproduto e outro DBEdit com o nome do produto e coloquei um dbgrid que vai conter os dados que o usuario cadastrou no form principal(NOME DA EMPRESAS, ICMS,FRETE) e agora ira conter novos campos no qual o usuario ira preencher como: QUANT,V_UNITARIO,DESCONTO. e tambem ira conter o campo VALORTOTAL que ira conter o calculo de cada empresa como por exemplo:

ValorTotal=Quant*ValorUnitario;

eu to usando tbem um DataModule, que contem:IBTransaction,IBDatabase,TITable(CadastroEmpresa),DataSource(DS_CadEmpresa),TITable(CadProduto),DataSource(DS_CadProduto),TITable(ResulCotacao),DataSource(DS_ResulCotacao) e uma TIBQuery(Q_MIN),DataSource(DS_QMIN);

Na tabela CadProduto, eu criei umas (fields) para auxiliar a operações de calculo sao elas : AuxFrete,AuxICMS,AuxDESC, setei elas como float e no Object Insperctor mudei a propriedade FieldKind pra fkCalculated, issu em todas as fields e tabem no campo V_Total pra fkCalculated senaum da erro experiencia propria....hehehe.
baum eu to efetuando as operações de calculos no EVENTO ONCALCFIELDS, e atribuo os resultado dessa operação para o campo ValorTotal. aqueles calculos maluco que eu postei ai...

e to usando a TIquery pra achar o minimo no campo ValorTotal.

ai que começa os meus problemas...

Quando eu mando ele achar o minimo ele naum acha, porq o campo VALORTOTAL naum contem dados nenhum.. ta vazio... tipo ele mostra no dbgrid.


FORM

__________________________________________________________

COD[ 000000001] nome [Torneira]

DBGRID
NOMEDAEMPRESA.....QUANT...VUNITARIO...FRETE...VALORTOTAL
x1 ...........................5..........R$2,00..........0¬.........R$ 10,00
x1 ...........................5..........R$3,00..........0¬.........R$ 15,00
x1 ...........................5..........R$1,00..........0¬.........R$ 5,00

DBgrid que mostra o menor valor do valor total
NOMEDAEMPRESA.....QUANT...VUNITARIO...FRETE...VALORTOTAL
......................................VAZIO.............................................


_______________________FIM FORM________________________
O comando msql que eu to usando é
SELECT MIN(Valortotal) From CADEmpresa;

e ainda tenho que manda esse menor valor que esta no dbgrid do min pra tabela de resultados.... pra ai poder gerar um relatorio...

acho que agora vai ficar mais facil pra vc entender o que eu to falando...
e se ainda puder me ajudar agradeço....
um abraço...


GOSTEI 0
Micheus

Micheus

06/10/2006

[b:2dae9baf09]mulambo[/b:2dae9baf09], acho que a solução é criar este campo(VALORTOTAL) fisicamente na tabela para que vc o utilize na query Q_MIN, já que ele tem que existir nela (pelo que eu entendí ele também é um fkCalculated). E como campo calculado, seu valor é obtido via evento OnCalcField e existe apenas no dataset em memória - não da tabela física.
Ou, na query, ao invés de obter o MIN(VALORTOTAL) utilizar (QUANT*V_UNITARIO), o que deve resultar ´na mesma coisa´.

[]s


GOSTEI 0
Mulambo

Mulambo

06/10/2006

Oh micheus ... ja consegui o que eu estava pretendendo fazer... cara muito obrigado pela atenção dada a mim.... Muito obrigado mesmo...
Um grande abraço.... :)


GOSTEI 0
POSTAR