FIREBIRD AUTONUMERACAO
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
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
vc usa ADO, se não o q vc usa?
Sim estou utilizando ADO...
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:
/*** 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
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...
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...
no firebird basta tu criar um gatinho "TRIGGER" e pronto ele ira fazer a autumeração
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!
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!
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.
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.
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.
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
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