Query Read-only Urgentíssimo

13/05/2003

1

Caros Amigos

Estou tendo problemas com Query´s, é o seguinte:

Tenho uma Query com o nome de QESA18FNC que faço um join com duas tabelas, a ESA18FNC e a tabela ESA15FRN, estas tabelas estão se relacinando de acordo com a empresa que o funcinário trabalha,
Preciso fazer um relatório que imprima um valor especificado de acordo com o salário dele, por exemplo 50¬ do salário que está no banco como bonificação, então eu jogo para uma variável o resultado do calculo, depois preciso enviar para a tela de impressão deste relatório os dados, inclusivo o do valor, que não existe no banco, somente na variável.
Quando estou trabalhando com somente um funcionário isto funciona bem, mas quando tenho vários funcionários dá erro, por que ele joga o valor do ultimo registro da Query para todos.
Até ai tudo bem, então eu criei um campo calculado em outra query, dando um select somente na tabela ESA18fnc, neste campo eu quero editar o valor do campo, quando o código do funcionário da Query QESA18FNC for = ao da Query QGERAL, o problema é que não consigo colocar a query em edit
dá erro dizendo que a query está em read-only, sendo que a propriedade request live está TRUE, o que devo fazer?

procedure TfrmRE44500.dblOpcResCloseUp(Sender: TObject; LookupTable,
FillTable: TDataSet; modified: Boolean);
var v_sql : string;
begin
if (dblOpcRes.Text <> ´´) then
begin
v_sql := ´select ESA18FNC.FNC_COD, ESA18FNC.FNC_NOME, ESA18FNC.FRN_COD, ´+
´ESA18FNC.FNC_VLR_RMN, ESA18FNC.FNC_TXT_RES, ESA15FRN.FRN_COD, ´+
´ESA15FRN.FRN_NOME from ESA18FNC, ESA15FRN where ESA18FNC.FRN_COD = ´+
´ESA15FRN.FRN_COD and ESA18FNC.FNC_TXT_RES = ´´´+
QESA64OPC.fieldbyname(´OPC_COD´).asstring+
´´´ and ESA18FNC.FNC_VLR_RMN <> ´´´´ order by FNC_NOME´;
F_wwQuery(QESA18FNC, v_sql, ´O´);
v_sql := ´select FNC_COD, FNC_NOME, FNC_TXT_RES, FNC_VLR_RMN from ESA18FNC ´+
´where FNC_VLR_RMN <> ´´´´ and FNC_TXT_RES = ´´´+
QESA64OPC.fieldbyname(´OPC_COD´).asstring+´´+
´´´ order by FNC_NOME´;
F_wwQuery(QGERAL, v_sql, ´O´);
end
else QESA18FNC.Close;
end;

procedure TfrmRE44500.QGERALCalcFields(DataSet: TDataSet);
begin
while not QESA18FNC.Eof do
begin
if rbgTipo.ItemIndex = 0 then
begin
s_valor := formatfloat(´0.00´, QESA18FNC.fieldbyname(´FNC_VLR_RMN´).asfloat);
mskValor.Text := ´´;
mskPerc.Text := ´´;
end
else if rbgTipo.ItemIndex = 1 then
begin
mskValor.Text := ´´;
if (mskPerc.Text <> ´ ´) then
begin
if (QESA18FNC.fieldbyname(´FNC_VLR_RMN´).asstring <> ´´) then
begin
s_valor := formatfloat(´0.00´,
(QESA18FNC.fieldbyname(´FNC_VLR_RMN´).asinteger*
strtoint(Trim(mskPerc.Text)))/100);
end
else
begin
MessageDlg(´Não há valor para este funcionário´, mterror, [mbOk], 0);
end;
end
else
begin
MessageDlg(´Favor Preencher o Percentual´, mterror, [mbOk], 0);
rbgTipo.ItemIndex := -1;
mskPerc.SetFocus;
end;
end
else if rbgTipo.ItemIndex = 2 then
begin
mskPerc.Text := ´´;
if mskValor.Text <> ´´ then
begin
s_valor := formatfloat(´0.00´, strtofloat(mskValor.Text));
end
else
begin
MessageDlg(´Favor Preencher o Valor´, mterror, [mbOk], 0);
mskValor.SetFocus;
end;
end;
if QGERAL.fieldbyname(´FNC_COD´).asstring =
QESA18FNC.fieldbyname(´FNC_COD´).asstring then
begin
QGERAL.edit;
QGERALD_VALOR.Value := s_valor;
QGERAL.Next;
end;
QESA18FNC.Next;
end;
end;

Por favor se puderem me ajudar

Estou com extrema urgencia

Agradeço antecipadamente

Cabelo. 8)


Responder

Posts

14/05/2003

Daaneto

O problema é que o Delphi não permite a atualização de uma query com junção.

Você deve separar a query em duas, ou seja, em um master-detail, aí sim você poderá atualizar a(s) sua(s) query(s).


Espero ter ajudado.


Daniel Augusto
daaneto@bol.com.br


Responder

14/05/2003

Ggean

se vc usar o [b:32012d989e]Order by [/b:32012d989e]tambem mesmo estando com RequesteLive=true mas a query fica ReadOnly
Obracos.
Gean Carlos.


Responder