Campo calculado na Query

Firebird

28/06/2005

pessoal
tenho uma query com ´select * from clientes´
adicionei os campos no fieldseditor e criei um campo Calculado tipo boolean que ao abrir a query fica como false.

tenho essa rotina no calcfields da query:
  if x = 1 then
  begin
    if Qcheck.Value = True then
      Qcheck.Value := False
    else
      if Qcheck.Value = False then
        Qcheck.Value := True;
  end;


x recebe 1 somente depois q a query é aberta.

então o que eu preciso é o seguinte:
ao selecionar um registro no grid eu preciso q o campo boolean calculado receba seu valor inverso, conforme rotina acima.
só q o calcfields atualiza todos os registros e não só o que tenho selecionado.
como posso resolver?


obrigado

Diogo


Diogoalles

Diogoalles

Curtidas 0

Respostas

Diogoalles

Diogoalles

28/06/2005

olá pessoal,
ainda ñ consegui resolver.. alguem poderia me ajudar?


GOSTEI 0
Beppe

Beppe

28/06/2005

Pode ser mais simples:
if x = 1 then
  Qcheck.Value := not Qcheck.Value;


Se vc quer executar só em um registro, não coloque no OnCalcFields, coloque em algum lugar em que vc pode assegurar que só executará no registro selecionado.


GOSTEI 0
Diogoalles

Diogoalles

28/06/2005

mas aí esta um problema.
por se tratar dum campo camlculado duma Query
ele não deixa mudar de valor no DbgridOnCellClick por exemplo. Dá erro.

eu só conheco o calcfields pra atribuir valor ao campo calculado.
teria outro evento que fizese essa alteração somente no registro selecionado?


GOSTEI 0
Sandra

Sandra

28/06/2005

Diogo,

Não testei se funciona... é apenas uma idéia. Experimente assim:
- deixe a opção do DBGrid dgRowSelect = True;
- ative o evento OnClick para o DBGrid;
- e coloque seu código para o OnClick.

Dica do DTDelphi:
[size=12:e56784a9b1]412 - Adicionar o evento OnClick do DBGrid Problema: Meu programa precisa processar algo quando o usuário clicar no DBGrid em um determinado form. O problema é que o DBGrid não possui o evento OnClick. É possível adicionar este evento no DBGrid? Solução: É possível sim. Afinal é muito simples. Siga os passos abaixo para resolver seu problema: - Monte seu form normalmente, colocando o DBGrid e demais componentes; - Vá na seção ´private´ da unit e declare a procedure abaixo:[/size:e56784a9b1]
  private
    procedure DBGridClick(Sender: TObject);
- Logo após a palavra ´implementation´, escreva a procedure:
implementation

{$R *.DFM}
 
procedure TForm1.DBGridClick(Sender: TObject);
begin
  ShowMessage(´Clicou no DBGrid.´);  // coloque o seu código aqui
end;
- Coloque as instruções abaixo no evento OnCreate do Form:
procedure TForm1.FormCreate(Sender: TObject);
begin
  DBGrid1.ControlStyle :=  DBGrid1.ControlStyle + [csClickEvents];
  TForm(DBGrid1).OnClick := DBGridClick;
end;
E pronto. Execute e teste. Observações O segredo principal desta dica está OnCreate do Form. A primeira instrução ativa o evento OnClick. A segunda instrução acessa o manipulador do evento OnClick. Para isto precisamos tratar o DBGrid como se fosse Form, pois o evento OnClick está declarado como protegido (protected) na classe TDBGrid.



GOSTEI 0
POSTAR