Retorno do valor de campo com auto-incremento

Amigos,

Tenho um formulário de cadastro que grava na tabela cadastro seus dados. Até ai tudo simples e normal.
Acontece que alguns desses dados precisam ser incluídos em registros de outras duas tabelas.
Utilizo a macro sc_exec_sql e tem funcionado.

O problema é que preciso o valor de um campo com auto-incremento para alimentar a terceira tabela. Qual o comando para obter esse valor?

Tentando detalhar (simplificando os campos):

  • O formulário usa faz a manutenção da tabela CADASTRO com os seguintes campos:
    - seq_cadastro
    - nome_empresa
    - cnpj
    - nome_operador
    - login
    - senha

  • No evento onValidateSuccess:
    - insiro um registro na tabela EMPRESA, com os seguintes campos:
    - seq_empresa
    - nome_empresa
    - cnpj

    - insiro um registro na tabela USUARIO, com os seguintes campos:
                  - seq_usuario
                  - empresa  **
                  - nome_operador
                  - login
                  - senha
    

** Esse campo é o campo seq_empresa da tabela EMPRESA, que é gerado pelo banco, após a inclusão do registro.
Como obter esse valor, antes da inclusão na tabela USUARIO?

Antecipo agradecimentos pela ajuda.

Jorge bom dia,

O método que me vem à cabeça no momento (estou acordando agora, os neurônios ainda não despertaram direito, rsrsrs) é o seguinte:

Logo após o INSERT na tabela EMPRESA, usar um SC_LOOKUP nessa tabela, pesquisando pelo CNPJ. Assim pegarias o campo que queres, armazenaria em uma variável e assim poderias fazer o outro insert, já com a informação que queres. Tipo assim:

  • No evento onValidateSuccess:
    - insiro um registro na tabela EMPRESA, com os seguintes campos:
    - seq_empresa
    - nome_empresa
    - cnpj

    sc_lookup(dados,"SELECT seq_empresa FROM empresa WHERE cnpj = {cnpj}");
    if ({dados} == FALSE)
       // Coloca tua mensagem aqui
    

    else
    var_empresa = {dados[0][0]};

    - insiro um registro na tabela USUARIO, com os seguintes campos:
                  - seq_usuario
                  - empresa  =  var_empresa
                  - nome_operador
                  - login
                  - senha

Jorge,
Se vc usar o evento onafterinsert pode fazer referencia ao campo assim: {seq_cadastro}
Deve funcionar.
[]s

Fiz um teste aqui e deu certo. O próprio SC armazena o valor do campo auto-incremento na variável {seq_cadastro}.
Portanto vc pode usá-la no evento onAfterInsert.
[]s

Allan,

É isso aí. Uma maneira bem mais rápida mesmo.

Obrigado pessoal.

Estava pensando em fazer exatamente como o Allan Medeiros mencionou.
Valeu!

Como faço para “fechar” o tópico? hehe

Acho que respondi antecipadamente, sem verificar a fundo. hehehe
Deve ser a idade avançada.

O evento onafterinsert ocorre após qualquer inserção ou apenas após a inserção dos dados do formulário?
Lembrando que eu preciso do código de uma tabela com registro inserido pela macro sc_exec_sql e não internamente pelo SC.

Jorge,
O evento onAfterInsert ocorre após o insert do formulário gerado pelo scriptcase unicamente.
Se vc está realizando o insert da tabela CADASTRO através de sc_exec_sql não vai dar certo.
A minha sugestão é que vc utilize um form do SC para a tabela CADASTRO (automaticamente) e no evento onAfterInsert utilize a macro sc_exec_sql para inserir as outras duas tabelas.
[]s

Pois é…

Já estou mudando o meu fluxo. hehe

Obrigado a todos…