Pegar ultimo id

(system) #1

Como pegar o ultimo campo ID que é auto imcrement, pelo evento before insert.

eu fiz assim, fiz um select do ultimo campo gravado, so que não adianta, ele nao pega.

grato.

(Haroldo) #2

Verifique se a macro sc_seq_register resolve seu problema.

(system) #3

não consegui achar esta funçao no manual.

(Haroldo) #4

Esta no webhelp do SC3.

sc_seq_register
Disponibiliza o número sequencial do registro que está sendo processado.

Ex:
$seq_atual = {sc_seq_register};

(system) #5

Tente pegar o ultimo ID através de um select:

Exemplo em uma tabela assim:

tb_clientes
id | nome

        sc_lookup(id,"Select max(id) from tb_clientes");

$maior_id={ds[0][0]};

A variavel ‘$maior_id’ vai ser carregada com o maior ‘id’ cadastrado.

Atenciosamente
Renan Andrade
NetMake - Soluções em Informática

(system) #6

valeu

(snarkhx) #7

Isso só vai funcionar se a aplicação não tiver acesso concorrente!!!

(system) #8

Pegando a tabela de exemplo do post do Renan eu faço a busca por ID assim:

sc_lookup(id,“SELECT id FROM tbl_clientes ORDER BY id DESC”);

if(empty({id[0][0]}))
{
{campo_id} = 1;
}
else
{
{campo_id} = {id[0][0]} + 1;
}

e já incremento, sendo {campo_id} o campo da sua aplicação que vai receber o ID

(system) #9

Sobre o acesso concorrente, quando estamos no onBeforeInsert já estamos com a sessão do banco aberta e o banco não vai executar nada até confirmar ou cancelar a operação.
Então acredito que não tem problema.

(Haroldo) #10

a sc_seq_register não funciona em todas aplicações, acredito que só em consulta, usar o Select max(id) … é mais aconselhavel.

(system) #11

Pergunto:
É possível usar [font=Verdana]select gen_id(gen_cursos_id, 0) from rdb$database[/font] com eventos, eventos ajax ou javascript e mostrar o retorno da query no formulário sem o mesmo ser repassado para o banco de dados, uma vez que estou disparando esse generator através de trigger do bd?

Tipo:
sc_lookup(rst, “select gen_id(gen_cursos_id, 0) from rdb$database”);
if (!empty({rst})){
$codigo = {rst}[0][0];
}

(Raphael Godoi) #12

Olá eu já utilizei a função mysql_insert_id() e funcionou perfeitamente, não sei se vai lhe ajudar segue o link do manual de referência do Mysql: http://dev.mysql.com/doc/refman/4.1/pt/example-auto-increment.html

Para utilizá-la dentro do Scriptcase atribua a uma variável

$id = mysql_insert_id();

Obs: Quando utilizei foi dentro do evento OnAfterInsert.

(tunge) #13

Bacana parabens realmente funciona

sc_lookup(id,“SELECT id FROM tbl_clientes ORDER BY id DESC”);

if(empty({id[0][0]}))
{
{campo_id} = 1;
}
else
{
{campo_id} = {id[0][0]} + 1;
}