Avançar X Retroceder com sql
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
>> Ultimo
E depois que o sql me retorna o IDCLIENTE eu faço:
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
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
Curtidas 0
Respostas
Emerson Nascimento
26/04/2006
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;
GOSTEI 0
Mmoreira
26/04/2006
Emerson.en,
Show de bola, mais uma vez vc mandou bem.
Meu problema foi resolvido com sua ajuda.
Valewsss
Show de bola, mais uma vez vc mandou bem.
Meu problema foi resolvido com sua ajuda.
Valewsss
GOSTEI 0