Focalizar cursor no último registro de uma tabela.

Delphi

04/06/2004

Tenho uma tabela de clientes, onde tenho ID_CLIENTE, NOME_CLIENTE,etc.
Quero fazer com que uma variável(Cli_Atual : integer) receba o valor ID_CLIENTE do último Cliente cadastrado na tabela.
Fiz assim:
Table1.last;
Cli_Atual := Table1.Fields.Fields[1].AsInteger;
Funciona, mas quando excluo um Cliente do meio da tabela, ele não chega até o fim.
Ex.: ID_CLIENTE | CLIENTE
1hjk
2hkjl
3fgdf
4dfewrew
5bcvc
Se excluo o cliente 3, e executo o comando acima, ele retorna o cliente 2 como sendo o ultimo. E quero que retorne o cliente 5.


Bossoni

Bossoni

Curtidas 0

Respostas

Lucas Silva

Lucas Silva

04/06/2004

Tente o código:

table1.Delete;
table1.FetchAll; // não tenho muita certeza disto;
table1.Last;



GOSTEI 0
Gandalf.nho

Gandalf.nho

04/06/2004

Se o que você quer é pegar o valor do último código (ou seja, o maior) monte uma query do tipo SELECT MAX(ID_CLIENTE) FROM TABELA. Execute-a e pegue o valor retornado. A vantagem é que não prejudica a performance (especialmente em rede)


GOSTEI 0
Bossoni

Bossoni

04/06/2004

vlw pela ajuda, vou tentar.


GOSTEI 0
Bossoni

Bossoni

04/06/2004

Se o que você quer é pegar o valor do último código (ou seja, o maior) monte uma query do tipo SELECT MAX(ID_CLIENTE) FROM TABELA. Execute-a [b:4e6b8eb29d]e pegue o valor retornado. [/b:4e6b8eb29d]A vantagem é que não prejudica a performance (especialmente em rede)

Só + uma coisa, não estou conseguindo pegar esse valor. Como faço isso, estou utilizando dbexpress e interbase.

Preciso armazenar esse valor em uma variavel integer


GOSTEI 0
Bruno Belchior

Bruno Belchior

04/06/2004

no evento OnDataChange do seu Data Source coloque o código
Table.last;


GOSTEI 0
Sandra

Sandra

04/06/2004

no evento OnDataChange do seu Data Source coloque o código Table.last;


Bruno, o ideal não seria no evento AfterDelete? :roll:


GOSTEI 0
Bossoni

Bossoni

04/06/2004

Se o que você quer é pegar o valor do último código (ou seja, o maior) monte uma query do tipo SELECT MAX(ID_CLIENTE) FROM TABELA. Execute-a e [b:3b0bbe417e]pegue o valor retornado[/b:3b0bbe417e]. A vantagem é que não prejudica a performance (especialmente em rede)


Agradeço a todos pela ajuda.

Mas, essa dica do gandalf.nho é a que me serve. Mas quem puder ajudar, como faço para pegar esse valor que o select retorna e guardar em uma variavel.

Obrigado desde já pela ajuda


GOSTEI 0
Sandra

Sandra

04/06/2004

Experimente:
Cli_Atual := DM.SQLQuery1.FieldByName(ID_CLIENTE).AsInteger;

Lógico, DM se sua query estiver no DataModule.


Boa sorte!!


GOSTEI 0
Thoor Cobain

Thoor Cobain

04/06/2004

[quote:5562965e3b=´gandalf.nho´]Se o que você quer é pegar o valor do último código (ou seja, o maior) monte uma query do tipo SELECT MAX(ID_CLIENTE) FROM TABELA. Execute-a e [b:5562965e3b]pegue o valor retornado[/b:5562965e3b]. A vantagem é que não prejudica a performance (especialmente em rede)


Agradeço a todos pela ajuda.

Mas, essa dica do gandalf.nho é a que me serve. Mas quem puder ajudar, como faço para pegar esse valor que o select retorna e guardar em uma variavel.

Obrigado desde já pela ajuda[/quote:5562965e3b]

Faça assim:
query.close;
query.open; // abro a query onde tem o SELECT
tableCliente.fieldByName(´ID_CLIENTE´).asInteger := query.fieldbyname(´MAX´).asInteger; // Jogo o resultado em um campo da sua tabela.


GOSTEI 0
POSTAR