simulando autoincremento ...
pessoal é o seguinte, por questoes que nao irei detalhar aqui preciso gerar as chaves primarias a partir do meu executavel ...
entao me sugeriram o seguinte esquema ....
no evento OnNewRecord de minha tabela colocaria o seguinte codigo:
e no evento BeforePost o seguinte codigo:
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
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
Curtidas 0
Respostas
Paullsoftware
20/02/2006
não sei como vc está fazendo a soma dos registros, mais se estiver usando RecordCount, pode ter problemas, não funciona...
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:
modo de usar:
espero ter ajudado!
ADODataset1.FieldByName(´codigo´).Value:= adotable1.fieldbyname(´reg´).Value + 1;
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
Rafael Gomes
20/02/2006
acho que noa ficou muito claro ... ai no caso eu tenho minhas tabelas e uma adicional chamada tbregistros essa tabela tem a seguinte estrutura:
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
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
Rjun
20/02/2006
Bom, o ideal seria se o BD fizesse isso. Mas já que você não prentede usar o autoincremento do BD utilize uma tabela com a seguinte estrutura:
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.
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
Rafael Gomes
20/02/2006
bom amigos, ficauma duvida?? o que exatamente select max(campo) from tabela me retorna????
[]ss
[]ss
GOSTEI 0