Fórum Como criar formula no Delphi sem precisar compilar #273138
18/03/2005
0
Desde ja agradeÇo pela ajuda.
Adriano_servitec
Curtir tópico
+ 0Posts
18/03/2005
Massuda
Gostei + 0
03/06/2005
Adriano_servitec
table1inss.value:=table1salario*7.65/100; // ex.de uma soma no form
mais como fazer para gravar essas formulas num banco de dados e quando precisar mexer nele para alterar a formula dentro do programa pelo edit, dbedit ou dbmemoedit, que seja.
nao sei se daira para incluir a formula acima dentro do edit, ou qualquer outro componente. Mais se der para fazer como uso a formula acima e gravar no banco de dados ja esta de bom tamanho, pois ai posso modificar dentro do proprio programa ex:
table1inss.value:=table1salario*7.65/100;
para
table1inss.value:=table1salario*8.65/100; sem precisar mexer em mais nada, somente dar um clique no botao gravar para alterar a nova formula.
OBS: isso eh so um exemplo de formula eh claro que nao tem nada haver com o programa, o objetivo eh enteder como se faz esse tipo de formula.
Obrigado
Agradeço pea Ajuda!
Adriano...
Gostei + 0
26/08/2005
Frcjf
Sobre o assunto das formulas já consegui resolver?, sei que isto era possivel em Clipper, mas nunca fiz.. se tiver noticias e puder me passar agradeço...
Flávio
Gostei + 0
01/10/2005
Adriano_servitec
Nao amigo ainda to a procura de como fazer calculos no Delphi
Cheguei a desenvolver essa procedure, mais ainda nao cheguei ao resultado esperado, nessa rotina ele calcula os operadores tipo 300,00 / 30 * 25 = 250,00
ele reconhece os operadores, mais se alguem puder me ajudar a melhorar ele eu agradeceria.
Eis a Procedure
procedure TForm5.BitBtn1Click(Sender: TObject);
var
opr,opr2, OPR3: char;
vr1,vr2,vr3, VR4, result: real;
begin
vr1:=StrToFloat(DBEdit1.Text);
vr2:=StrToFloat(DBEdit3.Text);
vr3:=strtofloat(dbedit5.text);
VR4:=STRTOFLOAT(DBEDIT9.TEXT);
opr:=DBEdit2.Text[1];
opr2:=dbedit4.text[1];
OPR3:=DBEDIT10.TEXT[1];
case opr of
´+´: result:=vr1+vr2;
´-´: result:=vr1-vr2;
´*´: result:=vr1*vr2;
´/´: result:=vr1/vr2;
else exit end;
vr1:=result;
vr2:=StrToFloat(DBEdit5.Text);
opr:=DBEdit4.Text[1];
case opr of
´+´: result:=vr1+vr2;
´-´: result:=vr1-vr2;
´*´: result:=vr1*vr2;
´/´: result:=vr1/vr2;
else exit end;
//ShowMessage(FloatToStr(result));
qry1.Edit;
qry1result.value:=result;
qry1.post;
end;
Grato pela ajuda
Adriano
Gostei + 0
01/10/2005
Weber
[url]http://www.clubedelphi.net/artigos/calculadora.asp[/url]
Gostei + 0
01/10/2005
Beppe
Serve meu trabalho em Java?
import java.io.*;
import java.util.*;
abstract public class Exp
{
protected Exp()
{
}
abstract public int Avaliar();
static private Exp Fator(StringTokenizer t)
{
if (!t.hasMoreTokens())
return null;
String sym = t.nextToken();
try
{
return new Numero(Integer.parseInt(sym));
}
catch (Exception e)
{
return new Identificador(sym);
}
}
static private Exp Termo(StringTokenizer t)
{
Exp esq = Fator(t);
while (t.hasMoreTokens())
{
String op = t.nextToken();
Exp dir = Fator(t);
esq = new OperadorBinario(esq, dir, op);
}
return esq;
}
static public Exp Compilar(String s)
{
StringTokenizer t = new StringTokenizer(s, " ");
return Termo(t);
}
static public void main(String args[]) throws Exception
{
System.out.print(Exp.Compilar((new BufferedReader(new InputStreamReader(System.in))).readLine()).Avaliar());
}
}
class Numero
extends Exp
{
private int valor;
protected Numero(int avalor)
{
super();
this.valor = avalor;
}
public int Avaliar()
{
return valor;
}
}
class Identificador
extends Exp
{
private String nome;
protected Identificador(String anome)
{
super();
this.nome = anome.intern();
}
public int Avaliar()
{
if (nome == "A")
return 1;
if (nome == "B")
return 2;
if (nome == "C")
return 3;
if (nome == "D")
return 4;
return 0;
}
}
class OperadorBinario
extends Exp
{
private String op;
private Exp esquerda, direita;
protected OperadorBinario(Exp aesquerda, Exp adireita, String aop)
{
super();
this.op = aop;
this.direita = adireita;
this.esquerda = aesquerda;
}
public int Avaliar()
{
switch (op.charAt(0))
{
case ´+´: return esquerda.Avaliar() + direita.Avaliar();
case ´-´: return esquerda.Avaliar() - direita.Avaliar();
case ´*´: return esquerda.Avaliar() * direita.Avaliar();
case ´/´: return esquerda.Avaliar() / direita.Avaliar();
default: return -1;
}
}
}
Se quiser aplica precedência, divida a rotina Termo em tantas rotinas como quiser níveis de precedência.
Se quiser saber mais sobre o assunto, pesquise por ´Recursive Descent Parser´
Gostei + 0
04/10/2005
Adriano_servitec
Agora sera que alguem pode me explicar como funciona essa funçao?
TABELA FORMULAS
------------------------------
ID - Integer - Autoincremento
Formula - Varchar(50) - (Equivalente ao Alpha do Paradox)
CampoChave - Varchar(20)
Tabela - varchar(20)
FUNÇÂO:
function resultformulas( idformula:integer ; valorChave:variant):variant;
var
sql:string;
qry:TQuery;
begin
if not tbFormulas.Locate( ´ID´, idformula, [] ) then begin
result := ´´;
exit;
end;
sql := ´select ´+tbFormulasFORMULA.AsString+´ from ´+tbFormulasTABELA.AsString;
if not tbFormulasCampoChave.IsEmpty then begin
sql:=sql+ ´ WHERE ´+tbFormulasCAMPOCHAVE.AsString+´ =´+valorChave;
end;
qry := TQuery.Create(Nil);
Qry.DataBaseName := NomedoSeuDataBase;
Qry.SQL.Text := sql;
qry.Open;
Result := qry.Fields[0].Value;
Qry.Close;
Qry.Free;
end;
Supondo que fiz um cadastro assim na tabela de FORMULAS:
ID - 1
Formula - ´SUM(VL_UNITARIO * QUANTIDADE)´
Tabela - ´VENDAS´
então uso assim:
edit1.text := resultformulas( 1 , ´´ );
Dessa forma, no edit1 eu teria o resultado da soma dos valores unitários, multiplicados pela quantidade de algum produto da tabela de Vendas.
Nao estou conseguindo faze-la funcionar
Gostei + 0
04/10/2005
Firekiller
Você criou os campos dessa tabela (Formulas) no Fields Editor??
Gostei + 0
04/10/2005
Adriano_servitec
Meu amigo ele simplesmente nao compila, criei sim os campos dessa tabela no fields editor da qry
Obrigado pela atençao
Gostei + 0
04/10/2005
Firekiller
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)