Fórum Identificar qual o campo de uma table q está sendo alterado #323915

21/06/2006

0

Preciso saber qual o campo que está sendo alterado e no momento e abortar a alteração, exemplo:

procedure TFrmCaddastro.Table1BeforeEdit(DataSet: TDataSet);
begin
if {aqui a forma de indentificar o campo q não pode ser alterado}Then
begin
messagedlg(´Esse produto não pode ser alterado. ´,mterror,[mbok],0);
SysUtils.Abort;
end;
end;


Janete

Janete

Responder

Posts

21/06/2006

Steve_narancic

Não é mais facil colocar os campos que você não quer alterar como ReadOnly


Responder

Gostei + 0

21/06/2006

Janete

Não é mais facil colocar os campos que você não quer alterar como ReadOnly


É q esse campo as vezes nem sempre pode ser alterado, tenho um outro if antes pra verificar uma tabela q é vinculada com essa q está editando, e se ela estiver fazia pode alterar esse campo se não não pode, e é somente esse campo.


Responder

Gostei + 0

22/06/2006

Marco Salles

É q esse campo as vezes nem sempre pode ser alterado, tenho um outro if antes pra verificar uma tabela q é vinculada com essa q está editando, e se ela estiver fazia pode alterar esse campo se não não pode, e é somente esse campo.


Acho que ao inves de usar o SysUtils.Abort voce deve gerar uma execeção.. Pode ate colocar um bloco try Finally

procedure TFrmCaddastro.Table1BeforeEdit(DataSet: TDataSet); 
var 
  negado;Boolean;
begin 
  negado:=False;
   try
     if {aqui a forma de indentificar o campo q não pode ser alterado}Then 
        begin
          negado:=True;
          raise exception.Create();
      end;
  finally
    if negado Then
    messagedlg(´Esse produto não pode ser alterado. ´,mterror,[mbok],0); 
  end;
end;



Responder

Gostei + 0

22/06/2006

Janete

[quote:bcf54ef4f0=´Marco Salles´]
É q esse campo as vezes nem sempre pode ser alterado, tenho um outro if antes pra verificar uma tabela q é vinculada com essa q está editando, e se ela estiver fazia pode alterar esse campo se não não pode, e é somente esse campo.


Acho que ao inves de usar o SysUtils.Abort voce deve gerar uma execeção.. Pode ate colocar um bloco try Finally

procedure TFrmCaddastro.Table1BeforeEdit(DataSet: TDataSet); 
var 
  negado;Boolean;
begin 
  negado:=False;
   try
     if {aqui a forma de indentificar o campo q não pode ser alterado}Then 
        begin
          negado:=True;
          raise exception.Create();
      end;
  finally
    if negado Then
    messagedlg(´Esse produto não pode ser alterado. ´,mterror,[mbok],0); 
  end;
end;
[/quote:bcf54ef4f0]

Tudo bem, mas continuo com o mesmo problema de como indentificar o campo que eu não quero q seja alterado em algum momentos:
if {aqui a forma de indentificar o campo q não pode ser alterado}Then // eu preciso saber nesse if o que colocar pra saber se é o campo q eu quero q fique ou não desabilidado.


Responder

Gostei + 0

22/06/2006

Weber

Crie uma variavel privada
cProduto: String

quando o edit receber o texto faça a variavel receber também

na hora de salvar

if Edit.Text <> cProduto then
ShowMessage(´Você não pode alterar´);


Responder

Gostei + 0

23/06/2006

Marco Salles

Tudo bem, mas continuo com o mesmo problema de como indentificar o campo que eu não quero q seja alterado em algum momentos: if {aqui a forma de indentificar o campo q não pode ser alterado}Then // eu preciso saber nesse if o que colocar pra saber se é o campo q eu quero q fique ou não desabilidado.


Ora , eu pensei que a condição para permitir ou não a edição , voce a priori ja tinha colocado em citaçoes anteriores as condiçoes para que a edição seje ou não permitida

verificar uma tabela q é vinculada com essa q está editando, e se [b:9e3ebd20ae]ela estiver fazia pode alterar esse campo se não não pode[/b:9e3ebd20ae], e é somente esse campo.


eu pensei que não se trata de saber identificar ou não o campo , mas sim
gerar uma exceção na hora da edição , caso a condição citada por voce não seje atendida....

Porem caso voce queira saber se o campo esta sendo alterado , pode usar o evento OnChange do Tfield


procedure TForm1.Table1NomeDoCampoChange(Sender: TField);
begin
//Aqui voce fica sabendo quando este campo esta sendo alterado
//aqui voce testa se esta no modo de edição ou Inderção
//aqui voce gera uma exceção quando for conveniente
end;



Responder

Gostei + 0

23/06/2006

Cpd_arim

veja se resolve seu problema:


query1.close;
query1.sql.clear;
query1.sql.add(´select * from produto´);
query1.sql.add(´where codigo =´ #39+edit1.text+39);
query.open;

if query1.recordcount > 0 then
begin
showmessage(´Voce nao pode alterar este produto´);

qq dúvida cpd_arim@hotmail.com


Responder

Gostei + 0

26/06/2006

Janete

veja se resolve seu problema: query1.close; query1.sql.clear; query1.sql.add(´select * from produto´); query1.sql.add(´where codigo =´ #39+edit1.text+39); query.open; if query1.recordcount > 0 then begin showmessage(´Voce nao pode alterar este produto´); qq dúvida cpd_arim@hotmail.com


Estou usando banco Paradox e Table.


Responder

Gostei + 0

26/06/2006

Cpd_arim

vc não precisa mudar, use uma query apenas para fazer este tratamento.


Responder

Gostei + 0

27/06/2006

Janete

Não resolveu meu caso totalmente, mas provisóriamente estou fazendo o seguinte, estou colocando no evento DrawColumnCell do dbgrid a verificação q desejo e fico habilidando a coluna toda sempre q o usuario passar ou clicar nela, é que mudo de cor o dbgrid qdo o readonly de alguma coluna está true para diferenciar das outras, e assim fica mudando a cor da coluna inteira conforme vai passando pelo dbgrid.

if (TbItens.RecordCount <> 0)Then //essa table é vinculada com a
//tabela em uso
DBGrid1.Columns[1].ReadOnly:=true
else
DBGrid1.Columns[1].ReadOnly:=False;

Mas se alguem descobrir como fazer uma verificação de um campo exato de uma tabela, me avisa. Obrigado. :)


Responder

Gostei + 0

28/06/2006

Marco Salles

Mas se alguem descobrir como fazer uma verificação de um campo exato de uma tabela, me avisa. Obrigado.


Ja disse , evento onchange do tfield

Porem caso voce queira saber se o campo esta sendo alterado , pode usar o evento OnChange do Tfield



Responder

Gostei + 0

29/06/2006

Janete

[quote:fea20e0d6f=´Marco Salles´]
Mas se alguem descobrir como fazer uma verificação de um campo exato de uma tabela, me avisa. Obrigado.


Ja disse , evento onchange do tfield

Porem caso voce queira saber se o campo esta sendo alterado , pode usar o evento OnChange do Tfield
[/quote:fea20e0d6f]

Já tentei isso tb, mas não deu certo pois ele só passa no evento depois q já digitou e mesmo eu abortando a edição ele não volta como estava antes.


Responder

Gostei + 0

29/06/2006

Marco Salles

acho que o que voce quer é muito fácil. nos é que estamos desviando o foco

voce disse que :

só passa no evento depois q já digitou


então voce deve colocar o campo como readOnly como true

mas voce também disse ;

e se ela estiver fazia pode alterar esse campo se não não pode, e é somente esse campo.


Logo no meu entendimento voce deve criar uma logica que coloque este campo como [b:12a41832db]ReadOnly:=True [/b:12a41832db]quando for conveniente e coloca-lo com o [b:12a41832db]ReadOnly como false [/b:12a41832db]na sua necessidade


tem muitas maneiras de se fazer isto , pode ser no evento BeforeEdit da deu DataSet , pode ser no OnEnter do seu DataControl...

Veja um exemplo usando o DataSet

procedure TForm1.Table1BeforeEdit(DataSet: TDataSet);
begin
if suaLogiga Then
 begin
table1data.ReadOnly:=true ;//não permite a edição
//mensagem...e bla bla
end
else
table1data.ReadOnly:=False; //permite a edição
end;



Responder

Gostei + 0

29/06/2006

Ajnet

foi citado:


procedure TFrmCaddastro.Table1BeforeEdit(DataSet: TDataSet); begin if Then begin messagedlg(´Esse produto não pode ser alterado. ´,mterror,[mbok],0); SysUtils.Abort; end; end;


fim teste


Responder

Gostei + 0

30/06/2006

Marco Salles

foi citado: Janete escreveu: procedure TFrmCaddastro.Table1BeforeEdit(DataSet: TDataSet); begin if Then begin messagedlg(´Esse produto não pode ser alterado. ´,mterror,[mbok],0); SysUtils.Abort; end; end; fim teste


[b:77bf22820c]é eu não dei conta do inicio [/b:77bf22820c] :oops: :oops: ... logicamente que não serve

então vamos passar uma [b:77bf22820c]borracha[/b:77bf22820c] ...

a janete não disse , mas ´supando´ que se trata de um [b:77bf22820c]dbgrid [/b:77bf22820c], ela também pode fazer assim que dá:

procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if condição de não permitir a edição then
    begin
       if (dbgrid1.SelectedField = table1data)and(key <> 37) then
          begin
            key:=0;
            //mensagem
         end
     end
end;


P:S Nesse exemplo usai um TFiel TableData para fazer o teste e o resultado parece ser o que ele quer...

P:S [b:77bf22820c]no caso de um DbEdit fica ainda mais fácil[/b:77bf22820c]


Responder

Gostei + 0

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

Aceitar