GARANTIR DESCONTO

Fórum ListBox - Problemas para passar resultado de duas tabelas? #58529

18/07/2007

0

Pessoal, tenho duas tabelas assim

1ª O nome do funcionario e o valor do salario e quantidade

adriano servitec - 380,00 - 30
carlos silva - 500,00 - 30
maria sampaio - 800,00 - 30

e outra contendo as formulas de calculos
insalubridade 30¬ - salario/30
horas extras 50¬ - (salario/220)*(150/100)*(quantidade)
...
...
Bom como podem ver eh um esquema que pega a tabela 1 e calcula pela tabela 2 pra mostrar o resultado.

Bom a funçao que faz a formula eh essa:
function ResultFormulas( IdFormula:Integer; ValorCHave:String ; db:TDatabase):Variant;
var
  qry:TQuery;
  sql:String;
begin
  qry := TQuery.Create(Nil);
  qry.DatabaseName := db.DatabaseName;
  qry.SQL.Text := ´Select * from FORMULAS where ID=:ID´;
  qry.ParamByName(´ID´).AsInteger := IdFormula;
  qry.Open;
  if qry.RecordCount = 0 then begin
    Showmessage(´Formula Não Encontrada!´);
    qry.Close;
    qry.Free;
    Result := ´´;
    Exit;
  end;
  sql := ´SELECT (´+qry.FieldByName(´FORMULA´).AsString+´) AS RESULTADO FROM ´+qry.FieldByName(´TABELA´).AsString;
  if ValorChave <> ´´ then
    sql := sql + ´ WHERE ´+qry.FieldByName(´CAMPOCHAVE´).AsString+´=´+ValorChave;
  qry.Close;
  qry.SQL.Text := sql;
  qry.Open;
  Result := qry.FieldByName(´RESULTADO´).Value;
  qry.Close;
  qry.Free;
end;

Esta SQL nada mais eh do que somar a formula e mostrar o resultado.
Bom ela funciona certo, mais meu problema esta em passar todos para um ListBox

Se eu passar de um a um soma certo
Olhem
procedure TForm1.Button1Click(Sender: TObject);
var
  s, vresultado : String;
begin
  s := ´´;
  if CheckBox1.Checked then
    s := Table1ID_CLIENTE.AsString;
    listbox1.clear;
      table2.DisableControls;
      table2.First;
      while not table2.Eof do
      begin
        //passa para o listbox o valor do dbgrid
        vResultado := ResultFormulas( Table2ID.AsInteger,s,Database1 );
        listbox1.Items.Add(table2.FieldByName(´descricao´).AsString+´-´+vResultado);
        table2.Next;
        table2.enablecontrols;
      end;
    end;


Agora se eu tentar passar todos, ai mostra o resultado da onde o ponteiro esta no dbgrid em todos funcionarios, ou seja se o ponteiro na tabela 1 estiver apontado para o primeiro funcionario calcula a formula para todos os demais funcionarios o mesmo valor do priemrio funcionario, e assim por diante, como disse pega o valor para calculos apenas do funcionario anode o dbgrid esta apontado.

O codigo que tentei fazer foi este
procedure TForm1.Button1Click(Sender: TObject);
var
  s, vresultado : String;
begin
  s := ´´;
  if CheckBox1.Checked then
    s := Table1ID_CLIENTE.AsString;
    listbox1.clear;
    table1.DisableControls;
    table1.First;
    while not table1.Eof do
    begin
      passa para o listbox o valor do dbgrid
      listbox1.Items.Add(table1.FieldByName(´nome´).AsString);
      //referente a tabela 02
      table2.DisableControls;
      table2.First;
      while not table2.Eof do
      begin
        //passa para o listbox o valor do dbgrid
        vResultado := ResultFormulas( Table2ID.AsInteger,s,Database1 );
        listbox1.Items.Add(table2.FieldByName(´descricao´).AsString+´-´+vResultado);
        table2.Next;
        table2.enablecontrols;
      end;
      table1.Next;
      table1.enablecontrols;
    end;
end;



Adriano_servitec

Adriano_servitec

Responder

Posts

19/07/2007

Emerson Nascimento

pelo que eu pude perceber o problema está na atribuição da variável [b:0a03998580]s[/b:0a03998580]. a atribuição deveria estar dentro do primeiro loop.
    while not table1.Eof do
    begin
      passa para o listbox o valor do dbgrid
      listbox1.Items.Add(table1.FieldByName(´nome´).AsString);
      {***aqui deve ser feita a atribuição de "s", e não fora do loop***}
      s := Table1ID_CLIENTE.AsString;



Responder

Gostei + 0

19/07/2007

Adriano_servitec

pelo que eu pude perceber o problema está na atribuição da variável [b:9511852625]s[/b:9511852625]. a atribuição deveria estar dentro do primeiro loop.
    while not table1.Eof do
    begin
      passa para o listbox o valor do dbgrid
      listbox1.Items.Add(table1.FieldByName(´nome´).AsString);
      {***aqui deve ser feita a atribuição de "s", e não fora do loop***}
      s := Table1ID_CLIENTE.AsString;


Esse eu nao tenho com testar agora, a noite eh que vou testar.

Muito obrigado tambem por responder amigo.

Assim que testar o codigo eu informo o resultado.

Valeu.


Responder

Gostei + 0

19/07/2007

Adriano_servitec

Perfeito amigo, quem sabe sabe....

Valeu!
Obrigado


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar