GARANTIR DESCONTO

Fórum Como editar os campos de uma tabela menos um????????????? #375789

09/10/2009

0

Bom meus sistema e em Delphi foi BD Paradox.
Uso TEdits, Table..
Gero o codigo automaticamente na hora da inserção

Table1.First;
while not Table1.Eof do
begin
ultimo := Table1cod_os.AsInteger;
Table1.Next;
end;
edit1.Text := inttostr(ultimo + 1);

Meu problema é que quando vou editar a tabela
o codigo que ja esta no Edit é inserido de novo e da erro.
Vou tentar explicar melhor:

tenho o codigo 250(edit1) e o nome(edit2) ricardo por exemplo..
vou em editar..
edito o nome ..
quando vou gravar
Tblcodigo.value := edit1.text (recebe de novo ja estava gravado)
tblnome.value := edit2.text (edito o nome que eu queria)

Dai da erro porque o codigo já existe!!!!!!!!!!!
Então quando vou editar posso editar qualquer campo menos o do codigo pq e automatico,
mas quando eu digitava o codigo nao tinha esse problema!!!!!!
O comando para gerar codigo esta no botao table.insert!!!!!!!!
To com as idéias embaralhadas demaiiiisssss

Por favor se alguém entendeu me ajude!!!!!!!


Kaka_dp

Kaka_dp

Responder

Posts

09/10/2009

Marcos.gandin

Por que você não gera o código através de um SQL pegando o max() + 1?
Aí é só você gravar o código que o SQL retornou.

Select 
  max(cod) + 1 as Codigo
From
  tabela


edit1.Text := IntToStr(Query.FieldByName(´Codigo´).asInteger);


Responder

Gostei + 0

09/10/2009

Lehapan

Você pode utilizar o GENERATOR, pois o MAX(Cod), sitado pelo marcos.gandin, pode ocorrer de duas ou mais estações estarem gravando registros e ocorrer o mesmo problema, pois já aconteceu comigo quando possuo muito volume de inserções.

Espero ter ajudado.


Responder

Gostei + 0

09/10/2009

Wagnermarrane

De uma maneira mais simples vc pederia fazer assim:

Table1.last ultimo := Table1.fieldbyname(´codigo´).asinteger +1; edt1.text := intostr(ultimo); Table1.insert; table1.fieldbyname(´codigo´).assinteger := ultimo table1.fieldbyname(´nome´).asstring := edt2.text Table1.post Table1.refresh


Espero ter ajudado.


Responder

Gostei + 0

11/10/2009

Carlosrm

kaka_dp,

acho que o jeito mais simples de resolver isso, sem precisar muitas alterações, é colocar um desvio antes de gravar o tblCodigo.
Se a tabela (dataset) estiver em inserção, o sistema grava. Se estiver em estado diferente de inserção, ´pula´ essa linha.
Mais ou menos assim:


If (table.state = dsInsert) then
   Tblcodigo.value := edit1.text;  //(recebe de novo ja estava gravado) 


Assim, se estiver em edição, na hora de gravar o campo código permanecerá o mesmo. Talvez haja alguma variação na escrita do código, mas a idéia geral acho que te serve.
Claro que existem muitas outras maneiras, mas a que melhor atende só você pode avaliar.
boa sorte. carlosrm.


Responder

Gostei + 0

13/10/2009

Carlosrm

kaka_dp,

desculpe, eu fui apressado ao responder. Uma maneira mais decente de contornar o que você postou, não alterando a sua programação, é:

1º) Ignore meu comentário anterior.

2º) Acrescente este pedaço de código
   edit1.text := Table1cod_os.AsInteger; 

no momento (evento) em que entrar em edição (ao pressionar um botão editar, clicar no dbgrid, ou qualquer outro método que esteja usando.)
Assim, na hora de gravar, se estava em Inserção, o edit1 tem o valor do último código mais um. Se era edição, o edit1 tem o código do próprio registro já gravado na tabela.
Aí é só gravar.

boa sorte.carlosrm


Responder

Gostei + 0

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

Aceitar