DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 
DevWare  
Novidade: DevMedia lança o DevWare - Saiba mais!

Fórum DevMedia


Autor
Mensagem
EDSON GARCIA DE MELO
 


País: Brasil
Estado: PA
Cidade: parauapebas
Mensagens: 230
 Postado em: 3/3/2012 12:39:42 PM
 
fiz um topico nesta pagina, onde pesquisava a opção para se fazer uma pesquisa no generaitor, de uma tabela que criei,

ok , eu precisava saber o ultimo numero do generaitor desta tabela, me foi informado um select, mas ai esta minha duvida como aplico este select,

nos meus sistemas uso o select com um clientedataset assim:

cds_registro.commandtext:= Select.........

sera que devo usar o select informado dete mesmo jeito, mas preciso jogar o numero em uma variavel

ajude

Joel Rodrigues
 
 

 


País: Brasil
Estado: RN
Cidade: Natal
Mensagens: 3356
 Postado em: 4/3/2012 09:03:47 PM
 
Você quer saber como usar no Delphi o select que lhe trás o último número utilizado?
Bem, você faz da mesma forma que para qualquer outro select, utilizando um DataSet. A diferença é que no select haverá apenas um campo que você pode nomear conforme sua preferência. Para recuperar o valor, faça algo como o seuginte:

ultimo_valor = cdsUltimoValor.FieldByName(CAMPO).AsInteger;

Não sei se é essa sua dúvida...

EDSON GARCIA DE MELO
 


País: Brasil
Estado: PA
Cidade: parauapebas
Mensagens: 230
 Postado em: 8/3/2012 05:51:04 PM
 
não e isto, não

queria uma maneira de pegar o ultimo numero do generaitor criado para a tabela em questão.

no seu caso eu teria que abrir a tabela para dar um comando last que ira para o ultimo registro e dai pegar o numero no campo. nao e essa minha intensao, preciso saber o ultimo numero gerado pelo generaitor, mas sem ter que abrir a tabela em questão, pois penso esta tabela agora e pequena, mas daqui a alguns anos ela se tornara grande e deixara o sistema lento para poder abrir. a informação que me interessa nesta tabela e pegar o ultimo registro gravado nela,para isso e so aplicar um filtro informado o ultimo registro e so sera trafegado na rede 1 registro so, seeu tiver que abrir toda tabela para saber o ultimo registro,para mim não serve.

vou te esplicar melhor ,no meu sistema tem um dedo duro,ou seja tudo que o usuario fizer vai ficar registrado emuma tabela,por isso da pra se entender que logo esta tabela ira ficar enorme,a minha ideia e aplicar um filtro nos ultimos 50 operações executadas, mas pra isso teria de saber o ultimo numero e aplicar um filtro tirando 50 que me daria a faixa requerida das informações. so para constrar e um sistema para hotel,e o gerente pe pediu um dedo duro no sistema,para saber oque o pessoal anda fazendo

me enviaram um select que sei que resolveria o problema mas não sei como aplicar o select, e ainda guardar o numero retornado por ele em uma variavel

espero que alguem me ajude

EDSON GARCIA DE MELO
 


País: Brasil
Estado: PA
Cidade: parauapebas
Mensagens: 230
 Postado em: 8/3/2012 05:54:06 PM
 
exemp em firebid

--saber o proximo numero da seq

select max(oservico_id)+1 from ordemservico // nao serve pois tenho que abrir a tabela
--saber o meu proximo numero do generator
select gen_id(GENAGENCIA_ID,1) from rdb$database // esta acho que me serve mas nao sei como aplicar e ainda armazenar a
// resposta em uma variavel

quen solber me ajudem

Joel Rodrigues
 
 

 


País: Brasil
Estado: RN
Cidade: Natal
Mensagens: 3356
 Postado em: 8/3/2012 07:39:31 PM
 
Alguns esclarecimentos:
- no exemplo que eu dei, a ideia não era abrir a tabela com todos os registros e ir para o último com o comando Last();
- utilizando a instrução
select max(oservico_id)+1 from ordemservico
você não está abrindo toda a tabela, está trazendo apenas UM registro contendo o maior valor do campo oservico_id;
- utilizando a instrução
select gen_id(GENAGENCIA_ID,1) from rdb$database
você pega o último valor gerado pelo generator GENAGENCIA_ID, mas veja bem, e se o último registro for apagado? O generator vai ter gerado um número, mas este não estará mais na tabela. Logo, sugiro utilizar a instrução SQL anterior;
- você costuma fazer selects no seu sistema utilizando datasets (querys, tables, etc)? Se sim, o procedimento para trazer apenas um registro é o mesmo (como eu citei na primeira postagem). Você define o comando sql do dataset, e ao abrí-lo, recupera o valor do campo em questão;
- o tal DEDO DURO tem um nome técnico: AUDITORIA;

Boa sorte.

Joel Rodrigues
 
 

 


País: Brasil
Estado: RN
Cidade: Natal
Mensagens: 3356
 Postado em: 8/3/2012 07:49:45 PM
 
Permita-me esclarecer mais meu exemplo:
(não lembro bem das propriedades dos componentes IB e DBx, pois faz muito tempo que não uso, logo, adeque à sua necessidade)

var
ult_id:Integer;//nessa variável vou armazenar o último valor
begin
dsUltimoValor.Close();
dsUltimoValor.SQL.Text := ´SELECT MAX(ID) AS ULTIMO_ID FROM TABELA´;
dsUltimoValor.Open();
ult_id := dsUltimoValor.FieldByName(´ULTIMO_ID´).AsInteger;
end;

Pronto, eis um exemplo simples.

MAS, diante da sua necessidade, a menos que seja realmente necessário você armazenar o maior valor da coluna, você pode fazer seu select na tabela de auditoria diretamente, trazendo apenas os 50 últmos. Veja um exemplo:

´SELECT * FROM AUDITORIA WHERE ID_AUDIT <= (SELECT (MAX(ID_AUDIT)-50) FROM AUDITORIA)´

Ou seja, recupera os registros cuja coluna ID_AUDIT seja menor ou igual que o maior valor dessa coluna - 50.

Teste aí, qualquer coisa é só falar.

EDSON GARCIA DE MELO
 


País: Brasil
Estado: PA
Cidade: parauapebas
Mensagens: 230
 Postado em: 24/3/2012 02:08:05 PM
 
ola joel

tentei a opcao

´SELECT * FROM AUDITORIA WHERE ID_AUDIT <= (SELECT (MAX(ID_AUDIT)-50) FROM AUDITORIA)´

não funcionou ela me deu o arquivo completo e não os ultimos 50 registros que solicitei no comando


EDSON GARCIA DE MELO
 


País: Brasil
Estado: PA
Cidade: parauapebas
Mensagens: 230
 Postado em: 7/4/2012 08:24:11 PM
 
ok ja consegui resolver

obrigado a todos

Joel Rodrigues
 
 

 


País: Brasil
Estado: RN
Cidade: Natal
Mensagens: 3356
 Postado em: 26/4/2012 11:31:44 AM
 
O correto seria inverter o sinal de < para >. Foi falha minha, só agora, relendo o tópico, percebi:
#Código
SELECT * FROM AUDITORIA WHERE ID_AUDIT >= (SELECT (MAX(ID_AUDIT)-50) FROM AUDITORIA)

marcelo Augusto
 


País: Brasil
Estado: MG
Cidade: bh
Mensagens: 95
 Postado em: 26/4/2012 02:25:38 PM
 
Ola, Creio que você pode usar algo mais facil sempre uso o seguinte, coloco uma adoquery e na string (select max(cod)+1)

voce pode usar um componente tipo edit ou outro para pegar o valor somente ligando-o no datasource.

web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03