Incremento
Bem pessoal eu estou fazendo incrementaçao atraves de uma table cada formulario eu acrescento um table, problema que quando vou da um novo registro as vezes da um novo incremento ou as vezes ele repete, mas no caso um exemplo tem o codigo do cliente ja existente 1, e se e u da um novo ele deveria aparecer no codigo 2, mas as vezes ele repete, ai que ta eu queria contornar esse problema na hora da pessoa preencher todos os campos, e mandar salvar e se o codigo estiver repetindo da uma mensagem para o usuario alterar. eu utilizo firebird, e como ja disse to usando cada formulario para acrescentar uma table vou deixar o codigo como faço para incrementar.
var ultcod: integer;
begin
DM_dados.tbl_cliente.insert;
tblauxcliente.Open;
tblauxcliente.Last;
ultcod:=tblauxclienteCLI_CODIGO.value+1;
DM_dados.tbl_clienteCLI_CODIGO.value:=ultcod;
tblauxcliente.close;
no caso o tblauxcliente é a table que utilizo no formulario e o tbl_cliente que é uma table no Data Module
var ultcod: integer;
begin
DM_dados.tbl_cliente.insert;
tblauxcliente.Open;
tblauxcliente.Last;
ultcod:=tblauxclienteCLI_CODIGO.value+1;
DM_dados.tbl_clienteCLI_CODIGO.value:=ultcod;
tblauxcliente.close;
no caso o tblauxcliente é a table que utilizo no formulario e o tbl_cliente que é uma table no Data Module
Rodrigo X
Curtidas 0
Respostas
Edineidaniel
15/05/2008
Rodrigo...
Eu não gosto muito de depender de componentes do tipo table para executar este tipo de função, pq a gnt nunca sabe exatamente com o componente erá se comportar... (as vezes certo, as vezes errado)...
Utilizo SQL e nunca mais tive problema...
Faça a adequação desta função para os componentes que vc utiliza, eu uso DBExpress
t+
Edinei
Eu não gosto muito de depender de componentes do tipo table para executar este tipo de função, pq a gnt nunca sabe exatamente com o componente erá se comportar... (as vezes certo, as vezes errado)...
Utilizo SQL e nunca mais tive problema...
Faça a adequação desta função para os componentes que vc utiliza, eu uso DBExpress
function AutoInc(Conexao: TSQLConnection; Tabela, Campo: String): String; Var sqlAuto: TSQLDataSet; begin Result := ´1´; try sqlAuto := TSQLDataSet.Create(Nil); try with sqlAuto do begin SQLConnection := Conexao; close; CommandText := ´SELECT MAX(´+Campo+´)+1 as CAMPO FROM ´+Tabela; Open; if not IsEmpty then if Fields[0].AsString <> ´´ then Result := Fields[0].AsString; end; finally sqlAuto.Free; end; except ShowMessage(´Problemas com o AutoIncremento da Tabela [´+tabela+´]!´); end; end;
t+
Edinei
GOSTEI 0
Rodrigo X
15/05/2008
bem eu criei um generator e uma trigger
CREATE TRIGGER ´GERA_CODIGO_CLIENTE´ FOR ´CLIENTE´
ACTIVE BEFORE INSERT POSITION 0
as
begin
new.cli_codigo = gen_id(gen_cod_cliente,1);
end
^
bem eu utilizo no delphi, so os componentes table datasource, quero saber se puder com detalhes o que eu preciso agora para auto incrementar
pesquisei varias vezes aqui no forum e nada so acho dizendo para outros tipo de banco ou utilizando bdeexpress, e nao conseguir assimiliar
se alguem puder me ajudar utilizo entao como eu disse table e datasource obrigado.
CREATE TRIGGER ´GERA_CODIGO_CLIENTE´ FOR ´CLIENTE´
ACTIVE BEFORE INSERT POSITION 0
as
begin
new.cli_codigo = gen_id(gen_cod_cliente,1);
end
^
bem eu utilizo no delphi, so os componentes table datasource, quero saber se puder com detalhes o que eu preciso agora para auto incrementar
pesquisei varias vezes aqui no forum e nada so acho dizendo para outros tipo de banco ou utilizando bdeexpress, e nao conseguir assimiliar
se alguem puder me ajudar utilizo entao como eu disse table e datasource obrigado.
GOSTEI 0
Paullsoftware
15/05/2008
Conselho!!!
Esqueça os componentes ´[b:e7d053fed1]Tables[/b:e7d053fed1]´, ele são componentes que normalmente tazem todos os dados, deve se amarrar a Filters, e as consultas normalmente são usadas com Locate, use SQLQuerys ou de preferência SQLDataSet´s se estiver usando DBExpress, em conjunto com os DataSetProviders e ClientDataSets...
As Querys e DataSet´s aceitam comandos SQL que facilitam e melhoram muito o desempenho de suas aplicações... sem contar que é mais fácil de dar manutenção entre outros...
espero ter ajudado :wink:
Esqueça os componentes ´[b:e7d053fed1]Tables[/b:e7d053fed1]´, ele são componentes que normalmente tazem todos os dados, deve se amarrar a Filters, e as consultas normalmente são usadas com Locate, use SQLQuerys ou de preferência SQLDataSet´s se estiver usando DBExpress, em conjunto com os DataSetProviders e ClientDataSets...
As Querys e DataSet´s aceitam comandos SQL que facilitam e melhoram muito o desempenho de suas aplicações... sem contar que é mais fácil de dar manutenção entre outros...
espero ter ajudado :wink:
GOSTEI 0