Fórum simulando autoincremento ... #313631
20/02/2006
0
entao me sugeriram o seguinte esquema ....
no evento OnNewRecord de minha tabela colocaria o seguinte codigo:
ADODataset1.FieldByName(´codigo´).Value:= adotable1.fieldbyname(´reg´).Value + 1;
e no evento BeforePost o seguinte codigo:
procedure TForm1.ADODataSet1BeforePost(DataSet: TDataSet); begin if not (DataSet.State = DsEdit) then begin adotable1.Edit; adotable1.FieldByName(´reg´).Value:= adotable1.fieldbyname(´reg´).Value + 1; adotable1.Post; end; end;
bom, tenho minhas tabelas e uma adicional para contar os registros que foram inseridos em cada uma ... gostaria de saber se alguem ja fez isso, se é uma pratica comum , enfim se voces recomendam!!!!
grande abraço!!
:D
Rafael Gomes
Curtir tópico
+ 0Posts
20/02/2006
Paullsoftware
pois o RecorCount conta o total de registros incluidos e acrescenta mais um certo! e se algum registro pelo meio da tabela for excluido? por exemplo, vc tem uma tabela com 100 registros o proximos seria 101 mais se 51,52,11,01,91 forem excluidos como fica?
tente assim:
//Gera o codigo automatico das tabelas procedure Incrementa(Nome_Tabela: String; Chave_Primaria: TField); var Qry:TadoDataSet; begin if Chave_Primaria.DataSet.State<>dsInsert then Exit; Qry := TADODataSet.Create(nil); Try Qry.Connection := DM_BANCO.CONN; Qry.CommandText := ´Select Max(´+chave_primaria.FieldName+´) From ´+nome_tabela; Qry.Open; if Qry.Fields[0].IsNull then chave_primaria.AsInteger := 1 else chave_primaria.AsInteger := Qry.Fields[0].AsInteger+1; finally FreeAndNil(Qry); end end;
modo de usar:
Incrementa(´CLIENTES´,CLIENTESCODIGO); //onde CLIENTES É O NOME DA TABELA E CLIENTESCODIGO O CAMPO A SER INCREMENTADO...
espero ter ajudado!
Gostei + 0
20/02/2006
Rafael Gomes
nmtabela reg
===========================
tbclientes 10
tbregistros 20
tbusuarios 20
===========================
to utilizando os valores da coluna [b:0d94357f38]REG[/b:0d94357f38] para incrementar os codigos ... assim dessa forma nao terei problemas se forem deletados alguns registros no meio da tabela ...
esse select que vc utilizou retorna o que?? a quantidade de registros que foram inseridos contando com aqueles que foram deletados???
[]sss
Gostei + 0
21/02/2006
Rjun
Nome Varchar 100 - Guarda o nome da tabela
NextID int - Salva o valor do proximo ID
Nessa tabela você coloca o nome de todas as tabelas que você queira controlar o código. E no evento OnNewRecord você obtem a o novo código lendo da tabela.
Gostei + 0
21/02/2006
Rafael Gomes
[]ss
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)