Fórum ListBox - Problemas para passar resultado de duas tabelas? #58529
18/07/2007
0
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
Curtir tópico
+ 0Posts
19/07/2007
Emerson Nascimento
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;Gostei + 0
19/07/2007
Adriano_servitec
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.
Gostei + 0
19/07/2007
Adriano_servitec
Valeu!
Obrigado
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)