Como editar os campos de uma tabela menos um?????????????
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!!!!!!!
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
Curtidas 0
Respostas
Marcos.gandin
09/10/2009
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.
edit1.Text := IntToStr(Query.FieldByName(´Codigo´).asInteger);
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);
GOSTEI 0
Lehapan
09/10/2009
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.
Espero ter ajudado.
GOSTEI 0
Wagnermarrane
09/10/2009
De uma maneira mais simples vc pederia fazer assim:
Espero ter ajudado.
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.
GOSTEI 0
Carlosrm
09/10/2009
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:
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.
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.
GOSTEI 0
Carlosrm
09/10/2009
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
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
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
GOSTEI 0