10 últimos...

Firebird

19/09/2005

Olá pessoal,
Tenho uma dúvida de como posso fazer um form que me mostre os últimos 10 registros gravados no BD.
É o seguinte uso IBX e F.B 1.5, tenho um formulário para registro de casamentos, que nele tem o nº do Livro, nº da Folha e nº do casamanto, gostária de fazer algo para saber qual foi os últimos números digitados, um botão no form registro que abrisse outro form e tivesse uma lista dos últimos 10 digitados, MAS TEM QUE MOSTRAR COM ESTA REGRA (WHERE REGISTRADO = ´SIM´).
Como posso fazer.



Rodrigo.
Obrigado.

[color=green:f79f51f842]Movido de Delphi para Interbase/Firebird[/color:f79f51f842]


Rodrigorpb

Rodrigorpb

Curtidas 0

Respostas

Rjun

Rjun

19/09/2005

Na sua tabela, você guarda a data e hora em que os registros foram gravados?


GOSTEI 0
Adriano Santos

Adriano Santos

19/09/2005

Na sua tabela, você guarda a data e hora em que os registros foram gravados?


[b:5daaadf489]Rjun[/b:5daaadf489], mesmo que ele tenha isso na tabela, como você imagina o algoritimo? Porque o cara pode ter criado um registro mês passado, outro a 15 dias, outro a 17 dias e etc?

Eu pensei em trazer todos os registros com o critério (WHERE REGISTRADO = ´SIM´) e dar um loop de baixo pra cima. Pegar os últimos 10, jogar talvez em uma tabela temporária e apresentar em um grid.

Não imagino outra forma, porque não existe uma função :

SELECT LAST 10 * FROM TABELA WHERE CONDICAO

no interbase, só tem o FIRST.


GOSTEI 0
Rjun

Rjun

19/09/2005

Ele poderia ordernar de forma decrescente.

SELECT TOP 10 * FROM TABELA ORDER BY DATA DESC



GOSTEI 0
Adriano Santos

Adriano Santos

19/09/2005

Ele poderia ordernar de forma decrescente.
SELECT TOP 10 * FROM TABELA ORDER BY DATA DESC



Puts, pode crer. Mas acho que ele pode usar um campo que seja Primary Key também, por exemplo:

SELECT FIRST 10 * FROM TABELA WHERE REGISTRO = ´SIM´ ORDER BY CODIGO DESC



GOSTEI 0
Rodrigorpb

Rodrigorpb

19/09/2005

Eu não uso data do dia que foi gravado, tenho um campo PK do Código, e os nº do casamento nunca se repete.
Mas se for o caso coloco um campo data para registrar o dia do cadastro.


Como é a melhor forma.

Rodrigo.
Obrigado Adriano Santos e Rjun


GOSTEI 0
Adriano Santos

Adriano Santos

19/09/2005

Eu não uso data do dia que foi gravado, tenho um campo PK do Código, e os nº do casamento nunca se repete. Mas se for o caso coloco um campo data para registrar o dia do cadastro. Como é a melhor forma. Rodrigo. Obrigado Adriano Santos e Rjun


Entção [b:44aa4d2563]Rodrigorpb[/b:44aa4d2563], do jeito que o [b:44aa4d2563]Rjun[/b:44aa4d2563] mencionou eu fiz, mas usando um PK. Funcionou.


SELECT FIRST 10 * FROM TABELA WHERE REGISTRO = ´SIM´ ORDER BY SEU_PK DESC 



GOSTEI 0
Rodrigorpb

Rodrigorpb

19/09/2005

Eu estava pensando tb em registrar a hora do registro e listar pela horas, mas vou fazer com o CODIGO (PK).



Obrigado novamente.
Adriano Santos e Rjun


Rodrigo. :D


GOSTEI 0
Adriano Santos

Adriano Santos

19/09/2005

Posta ai depois pra gente se deu certo.


GOSTEI 0
Rodrigorpb

Rodrigorpb

19/09/2005

Olá amigos,
Outra coisa como eu citei em cima, surgiu outra dúvida:

É o seguinte uso IBX e F.B 1.5, tenho um formulário para registro de casamentos, que nele tem o nº do Livro, nº da Folha e nº do casamanto,


Tenho no Form CODIGO INTEGER (PK), NLIVRO INTEGER, NFOLHA INTEGER e NREGISTRO INTEGER, como faço para no delphi ele verificar se o NREGISTRO (Nº do casamento) já existe e se existir passar uma mensagem para o usuário digitar outro número.


Rodrigo.
Obrigado.


GOSTEI 0
Adriano Santos

Adriano Santos

19/09/2005

Olá amigos, Outra coisa como eu citei em cima, surgiu outra dúvida: [quote:d744a9b058]É o seguinte uso IBX e F.B 1.5, tenho um formulário para registro de casamentos, que nele tem o nº do Livro, nº da Folha e nº do casamanto,


Tenho no Form CODIGO INTEGER (PK), NLIVRO INTEGER, NFOLHA INTEGER e NREGISTRO INTEGER, como faço para no delphi ele verificar se o NREGISTRO (Nº do casamento) já existe e se existir passar uma mensagem para o usuário digitar outro número.


Rodrigo.
Obrigado.[/quote:d744a9b058]

Faça uma Select, é mais fácil:

SELECT NREGISTRO FROM CASAMENTOS WHERE NREGISTRO = 12


Se retornar algo, é pq já tem.

Detalhando melhor
procedure TForm1.Button1Click(Sender: TObject);
begin
   with MinhaQuery do
   begin
      Close;
      SQL.Clear;
      SQL.Add(´SELECT NREGISTRO FROM CASAMENTOS WHERE NREGISTRO=:NREGISTRO´);
      ParamByName(´NREGISTRO´).AsInteger := Edit1.Text; //exemplo
      Active := True;
      if not IsEmpty then
         ShowMessage(´NÚMERO JÁ EXISTE´);
      Active := False;
   end;
end;


Veja, essa é uma maneira...existem milhares.


GOSTEI 0
Rodrigorpb

Rodrigorpb

19/09/2005

Cara vc manja heim... :wink:
Vou testar tudo ai passo os dois se deram certinhos.


Obrigado mesmo.
Rodrigo.


GOSTEI 0
Rodrigorpb

Rodrigorpb

19/09/2005

Outra dúvida,
Primeiro para que serve o IsEmpty? Outra coisa, o código que vc passou é ótimo, mas caso eu queria válidar somente quando tiver número, pois ele tb pode ser nulo.

Tem como?


procedure TForm1.Button1Click(Sender: TObject);
begin
   with MinhaQuery do
   begin
      Close;
      SQL.Clear;
      SQL.Add(´SELECT NREGISTRO FROM CASAMENTOS WHERE NREGISTRO=:NREGISTRO´);
      ParamByName(´NREGISTRO´).AsInteger := Edit1.Text; //exemplo
      Active := True;
      if not IsEmpty then
         ShowMessage(´NÚMERO JÁ EXISTE´);
      Active := False;
   end;
end; 


Rodrigo.
Obrigado Adriano Santos


GOSTEI 0
Beppe

Beppe

19/09/2005

1) IsEmpty retorna True se e somente se nenhuma linha for retornada.
2) Se NREGISTRO for null, a comparação retorna null, e o predicado falha, não retornando a linha.
3) Pq não deixa o sistema gerar NREGISTRO para o usuário?


GOSTEI 0
POSTAR