Fórum Identificar qual o campo de uma table q está sendo alterado #323915
21/06/2006
0
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
Curtir tópico
+ 0Posts
21/06/2006
Steve_narancic
Gostei + 0
21/06/2006
Janete
É 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.
Gostei + 0
22/06/2006
Marco Salles
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;Gostei + 0
22/06/2006
Janete
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;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.
Gostei + 0
22/06/2006
Weber
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´);
Gostei + 0
23/06/2006
Marco Salles
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
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;
Gostei + 0
23/06/2006
Cpd_arim
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
Gostei + 0
26/06/2006
Janete
Estou usando banco Paradox e Table.
Gostei + 0
26/06/2006
Cpd_arim
Gostei + 0
27/06/2006
Janete
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. :)
Gostei + 0
28/06/2006
Marco Salles
Ja disse , evento onchange do tfield
Gostei + 0
29/06/2006
Janete
Ja disse , evento onchange do tfield
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.
Gostei + 0
29/06/2006
Marco Salles
voce disse que :
então voce deve colocar o campo como readOnly como true
mas voce também disse ;
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;
Gostei + 0
29/06/2006
Ajnet
fim teste
Gostei + 0
30/06/2006
Marco Salles
[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]
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)