FIREBIRD AUTONUMERACAO

USUARIO.EXCLUIDOS 10/04/2007 15:57:18
#211059
Boa Tarde,

Estou tentando criar uma rotina que através do VB, cria auto numeração dentro do FireBird.

SET TERM ^;
CREATE TRIGGER "TRG_TESTE" FOR "DPEXCL"
ACTIVE BEFORE INSERT POSITION 0 AS
BEGIN
NEW.ID = GEN_ID(AUTOID,1);
END
^
COMMIT WORK ^
SET TERM;^

Essa rotina acima funciona perfeitamente dentro do IBOconsole, gostaria de saber como eu faço para adaptar para rodar em VB.

Desde de já agradeço
RODRIGOGBGOMES 10/04/2007 16:01:47
#211061
vc usa ADO, se não o q vc usa?
USUARIO.EXCLUIDOS 10/04/2007 16:08:01
#211064
Sim estou utilizando ADO...
USUARIO.EXCLUIDOS 10/04/2007 16:15:29
#211065
Resposta escolhida
Clayton, eu utilizo geradores (generators), que crio pelo proprio IBConsole


/*** Cria o seguencial para a tabela usuario ***/
CREATE GENERATOR gen_codigo_usuario;
SET GENERATOR gen_codigo_usuario TO 0;

COMMIT;
/************************************************

E para acessar o autonumerador pelo VB, faço assim:

Public Function Incluir() As Boolean

On Error GoTo TrataErro

sSql = ""
sSql = sSql & "INSERT INTO usuario" & vbNewLine
sSql = sSql & " (codigo," & vbNewLine
sSql = sSql & " nome," & vbNewLine
sSql = sSql & " login," & vbNewLine
sSql = sSql & " senha," & vbNewLine
sSql = sSql & " codtipo," & vbNewLine
sSql = sSql & " codsetor)" & vbNewLine
'---------------------------------------------------
'Aqui chamo o gerador, criado. Esse 1 é o incremento
'GEN_ID(<NOME DO GERADOR CRIADO>,INCREMENTO)
'---------------------------------------------------
sSql = sSql & " VALUES (GEN_ID(GEN_CODIGO_USUARIO, 1)," & vbNewLine
sSql = sSql & " '" & Nome & "'," & vbNewLine
sSql = sSql & " '" & Login & "'," & vbNewLine
sSql = sSql & " '" & Senha & "'," & vbNewLine
sSql = sSql & " '" & Tipo & "'," & vbNewLine
sSql = sSql & " '" & Setor & "')" & vbNewLine

Call objConexao.BeginTrans
Call objConexao.Execute(sSql)
Call objConexao.CommitTrans

Incluir = True

Exit Function

TrataErro:

Call objConexao.RollbackTrans
Call MensagemErro(NOME_CLASSE & ".Incluir", "Erro ao tentar Incluir Usuário")
Incluir = False

End Function





USUARIO.EXCLUIDOS 10/04/2007 16:36:40
#211070
PIOLHO,

O que eu estou precisando mesmo é criar um ID que tenha autonumeração, eu tenho essa rotina.

strTriggers = "SET TERM ^;" & vbNewLine
strTriggers = strTriggers & "CREATE TRIGGER ID" & nArquivo & " FOR " & nArquivo & " " & vbNewLine
strTriggers = strTriggers & "ACTIVE BEFORE INSERT POSITION 0 AS " & vbNewLine
strTriggers = strTriggers & "BEGIN" & vbNewLine
strTriggers = strTriggers & "NEW.ID = GEN_ID(AUTOID,1); " & vbNewLine
strTriggers = strTriggers & "End" & vbNewLine
strTriggers = strTriggers & "^" & vbNewLine
strTriggers = strTriggers & "COMMIT WORK ^" & vbNewLine
strTriggers = strTriggers & "SET TERM;^" & vbNewLine

Conexao.Execute strTriggers

Mas está dando erro na ultima linha...
WEBER 10/04/2007 16:47:22
#211074
no firebird basta tu criar um gatinho "TRIGGER" e pronto ele ira fazer a autumeração
USUARIO.EXCLUIDOS 10/04/2007 16:52:21
#211076
Mas o que te passei faz exatamente isso, basta você criar uma tabela com o campo do tipo integer, que o que te passei vai gerar um autonumerador, através do GENERATOR do FIREBIRD.

Como estou vendo você pode criar um para o Arquivo (nArquivo), que você está querendo:

*** Cria o seguencial para a tabela usuario ***/
CREATE GENERATOR gen_codigo_arquivo;
SET GENERATOR gen_codigo_arquivo TO 0;

COMMIT;
/************************************************

e na rotina que te passei você chama assim:

sSql = sSql & " VALUES (GEN_ID(GEN_CODIGO_ARQUIVO, 1)," & vbNewLine

obs.: você pode até tentar criar esse GERADOR a partir do último número do arquivo que você tem, exemplo:


*** Cria o seguencial para a tabela usuario ***/
CREATE GENERATOR gen_codigo_arquivo;
SET GENERATOR gen_codigo_arquivo TO <último número do arquivo>;

COMMIT;
/************************************************

mas confesso que não testei.

Exemplo: se você tem o número um determinado número de arquivo 14,
quando for incluir o próximo, a função GEN_ID, vai pegar o 14, incrementar 1, passando para 15 e grava o 15 no banco, assim por diante!

WEBER 10/04/2007 17:05:12
#211080
ai vai uma apostila simples q tu pode criar o gerador no proprio firebird, caso tu nao tenhas tanta intimidade com a criação via codigo no vb.
USUARIO.EXCLUIDOS 10/04/2007 17:05:34
#211081
Piolho,

Da maneira que você passou está funcionando corretamente, mais o meu problema é que tenho que criar essa autonumeração no comando CREATE TABLE, pois essa rotina que estou usando esta sendo criada em VISUAL BASIC e o sistema que vai alimentar os dados é o DBASE PLUS 2.6. E esse sistema vai ter a função de apenas alimentar as tabelas.

USUARIO.EXCLUIDOS 10/04/2007 17:37:26
#211106
Obrigado Galera...
Com a ajuda de vocês montei uma rotina que cria essa autonumeração através de código...


strTriggers = strTriggers & "CREATE TRIGGER ID" & nArquivo & " FOR " & nArquivo & " " & vbNewLine
strTriggers = strTriggers & "ACTIVE BEFORE INSERT POSITION 0 AS " & vbNewLine
strTriggers = strTriggers & "BEGIN" & vbNewLine
strTriggers = strTriggers & "NEW.ID = GEN_ID(AUTOID,1); " & vbNewLine
strTriggers = strTriggers & "End" & vbNewLine

Conexao.Execute SQL
Tópico encerrado , respostas não são mais permitidas