Focalizar cursor no último registro de uma tabela.
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.
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
Curtidas 0
Respostas
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
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
04/06/2004
vlw pela ajuda, vou tentar.
GOSTEI 0
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
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
04/06/2004
no evento OnDataChange do seu Data Source coloque o código
Table.last;
Table.last;
GOSTEI 0
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
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
04/06/2004
Experimente:
Lógico, DM se sua query estiver no DataModule.
Boa sorte!!
Cli_Atual := DM.SQLQuery1.FieldByName(ID_CLIENTE).AsInteger;
Lógico, DM se sua query estiver no DataModule.
Boa sorte!!
GOSTEI 0
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