Campo calculado na Query
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:
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
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
Curtidas 0
Respostas
Diogoalles
28/06/2005
olá pessoal,
ainda ñ consegui resolver.. alguem poderia me ajudar?
ainda ñ consegui resolver.. alguem poderia me ajudar?
GOSTEI 0
Beppe
28/06/2005
Pode ser mais simples:
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.
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
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?
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
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:
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]
- Logo após a palavra ´implementation´, escreva a procedure:
- Coloque as instruções abaixo no evento OnCreate do Form:
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.
private procedure DBGridClick(Sender: TObject);
implementation
{$R *.DFM}
procedure TForm1.DBGridClick(Sender: TObject);
begin
ShowMessage(´Clicou no DBGrid.´); // coloque o seu código aqui
end;
procedure TForm1.FormCreate(Sender: TObject); begin DBGrid1.ControlStyle := DBGrid1.ControlStyle + [csClickEvents]; TForm(DBGrid1).OnClick := DBGridClick; end;
GOSTEI 0