Fórum Avançar X Retroceder com sql #319967

26/04/2006

0

Salve

Tenho um cadastro de cliente onde estou precisando colocar a opção do usuario ir navegando entre os clientes cadastrados que estejam vinculados ao usuario corrente.
Por exemplo na minha tabela CLIENTE eu tenho os campos:
IDCLIENTE
USUARIO

Eu preciso fazer é colocar quatro botoes de navegação tipo o dbNavigator:
<< < > >>

O codigo para dois botoes que sao [ Primeiro e Ultimo ] eu ja fiz assim:

<< Primeiro
´select min(IDCLIENTE) IDCLIENTE from CLIENTE where USUARIO = :USUARIO´


>> Ultimo
´select max(IDCLIENTE) IDCLIENTE from CLIENTE where USUARIO = :USUARIO´


E depois que o sql me retorna o IDCLIENTE eu faço:
cdsCliente.Close;
cdsCliente.Params[0].asInteger := [IDCLIENTE Retornado acima]
cdsCliente.Open;


Minha duvida é com o botoes de Proximo e Anterior, pois eu teria que pegar o IDCLIENTE do cliente que esta aberto SOMAR ou SUBTRAIR 1 ... A lógica seria essa mas o problema é que:
Supondo que eu estou logado no sistema e meu codigo de USUARIO é 5 e o cliente que esta aberto é IDCLIENTE = 10 se eu clico no botao avançar ele teria que me retornar qual o proximo cliente depois de 10 onde o codigo do usuario USUARIO é igual a 5 .... porque se o cliente de codigo IDCLIENTE = 11 for de outro usuario ele nao pode me retornar IDCLIENTE = 11

Bom é isso q to precisando fazer. Meu banco é Firebird 1.5, Delphi 7, DbExpress


Valews


Mmoreira

Mmoreira

Responder

Posts

26/04/2006

Emerson Nascimento

parece bem simples. utilizando sua técnica, basta fazer:
[BotaoAnterior]
´select first 1 IDCLIENTE from CLIENTE where USUARIO = :USUARIO and IDCLIENTE < :IDCLIENTE order by IDCLIENTE desc ´;
// note que essa instrução retorna os registros em ordem DECRESCENTE
parambyname(´IDCLIENTE´).AsInteger := cdsCliente.FieldByName(IDCLIENTE).AsInteger;
Open;

[BotaoPosterior]
´select first 1 IDCLIENTE from CLIENTE where USUARIO = :USUARIO and IDCLIENTE > :IDCLIENTE order by IDCLIENTE ´;
parambyname(´IDCLIENTE´).AsInteger := cdsCliente.FieldByName(IDCLIENTE).AsInteger;
Open;

aí vc testa:
if not IsEmpty then
begin
  cdsCliente.Close; 
  cdsCliente.Params[0].asInteger := [IDCLIENTE Retornado acima] 
  cdsCliente.Open; 
end;



Responder

Gostei + 0

27/04/2006

Mmoreira

Emerson.en,

Show de bola, mais uma vez vc mandou bem.
Meu problema foi resolvido com sua ajuda.

Valewsss


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar