Tabela não ordena
10/03/2003
0
Tenho uma tabela e um campo Integer. Preciso sempre incrementar 1 a este campo, toda vez q eu inserir um novo registro. Faço assim:
var
cont: integer;
begin
tabela.open;
tabela.last;
cont:=1;
cont:=cont+tabelacampointeger.asinteger;
tabela.insert;
tabelacampointeger.asinteger:=cont;
tabela.filtered := false;
tabela.filter := ´cod_venda = -1´;
tabela.filtered:=true;
end;
no afterpost da tabela está assim:
begin
if vendanumero.asinteger = ´´ then exit;
tabela.filter := ´cod_venda = ´+vendnumero.asinteger;
dbisavechanges((dataset as ttable).handle);
end;
este campo é uma chave primária. Qdo reseto a aplicação, e volto, o ponteiro da tabela, não vai para o último registro com o comando last. Qdo abro o DataBase DeskTop, é listado assim:
1, 2, 5,3 , 4 mas deveria estar assim: 1, 2, 3, 4, 5. O q será. Tenho um campo autoincremental como primária também. O q será?
var
cont: integer;
begin
tabela.open;
tabela.last;
cont:=1;
cont:=cont+tabelacampointeger.asinteger;
tabela.insert;
tabelacampointeger.asinteger:=cont;
tabela.filtered := false;
tabela.filter := ´cod_venda = -1´;
tabela.filtered:=true;
end;
no afterpost da tabela está assim:
begin
if vendanumero.asinteger = ´´ then exit;
tabela.filter := ´cod_venda = ´+vendnumero.asinteger;
dbisavechanges((dataset as ttable).handle);
end;
este campo é uma chave primária. Qdo reseto a aplicação, e volto, o ponteiro da tabela, não vai para o último registro com o comando last. Qdo abro o DataBase DeskTop, é listado assim:
1, 2, 5,3 , 4 mas deveria estar assim: 1, 2, 3, 4, 5. O q será. Tenho um campo autoincremental como primária também. O q será?
Paulo
Curtir tópico
+ 0
Responder
Posts
10/03/2003
Evandro Massini
Não intendi muito bem seu código mas...
Tente usar o seguinte:
var
cont: integer;
begin
tabela.open;
/// veja aqui
tabela.indexfieldsnames:=´nomedatabela´;//ordena de forma crescente
/////////////
tabela.last;
cont:=1;
cont:=cont+tabelacampointeger.asinteger;
tabela.insert;
tabelacampointeger.asinteger:=cont;
//// veja aqui
tabela.post;
/////////////
tabela.filtered := false;
tabela.filter := ´cod_venda = -1´;
tabela.filtered:=true;
end;
Vc não usou o método Post para confirmar o acréscimo do novo registro.
Tente usar o seguinte:
var
cont: integer;
begin
tabela.open;
/// veja aqui
tabela.indexfieldsnames:=´nomedatabela´;//ordena de forma crescente
/////////////
tabela.last;
cont:=1;
cont:=cont+tabelacampointeger.asinteger;
tabela.insert;
tabelacampointeger.asinteger:=cont;
//// veja aqui
tabela.post;
/////////////
tabela.filtered := false;
tabela.filter := ´cod_venda = -1´;
tabela.filtered:=true;
end;
Vc não usou o método Post para confirmar o acréscimo do novo registro.
Responder
10/03/2003
Einstein
cara, usando esse metodo vc vai ter dor de cabeça, em um futuro próximo os campos Index da sua tabela vai começar a duoplicar. veja o exemplo de como vc pode resolver este problema:
Crie um procedure Chamada Sequencia:
Insrira um Componente Query com o Seguinte Código:
Select Max(CampoChavePromaria) From tabela
no evvento OnNewRecord digite o seguinte Código:
Query.Opem
CampoChavePrimaria.AsInteger:=Query.Fields[0].AsInteger+1;
Query.Close;
Crie um procedure Chamada Sequencia:
Insrira um Componente Query com o Seguinte Código:
Select Max(CampoChavePromaria) From tabela
no evvento OnNewRecord digite o seguinte Código:
Query.Opem
CampoChavePrimaria.AsInteger:=Query.Fields[0].AsInteger+1;
Query.Close;
Responder
Clique aqui para fazer login e interagir na Comunidade :)