Fórum problemas com sql de pesquisa #413681
03/03/2012
0
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
Edson Melo
Curtir tópico
+ 0Posts
04/03/2012
Joel Rodrigues
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...
Gostei + 0
08/03/2012
Edson Melo
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
Gostei + 0
08/03/2012
Edson Melo
--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
Gostei + 0
08/03/2012
Joel Rodrigues
- 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.
Gostei + 0
08/03/2012
Joel Rodrigues
(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.
Gostei + 0
24/03/2012
Edson Melo
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
Gostei + 0
07/04/2012
Edson Melo
obrigado a todos
Gostei + 0
26/04/2012
Joel Rodrigues
SELECT * FROM AUDITORIA WHERE ID_AUDIT >= (SELECT (MAX(ID_AUDIT)-50) FROM AUDITORIA)
Gostei + 0
26/04/2012
Marcelo Augusto
voce pode usar um componente tipo edit ou outro para pegar o valor somente ligando-o no datasource.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)