ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

DICA: Uma outra forma de autoincremento com Fb 2.0

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
thomazs
Moderador
Moderador


Registrado: Segunda-Feira, 1 de Março de 2004
Mensagens: 2835

MensagemEnviada: Qua Fev 07, 2007 1:58 pm    Assunto: DICA: Uma outra forma de autoincremento com Fb 2.0 Responder com Citação

Um artificio interessante do Firebird 2.0 é a possibilidade de termos o retorno de algum(s) campo(s) após o insert. Ou seja, o(s) valor(es) seria(m) retornado(s) após o processamento de todas as triggers. Usando-se desse artificio, podemos ter em nosso sistema uma forma bem interessante de inserção, onde seria possível, sem muito esforço, e deixando o processamento apenas no Banco de dados, pegarmos o valor de um campo autoincremento. Deixando o blá-blá-blá de lado, vamos aos códigos:

Supondo que teríamos a seguinte tabela:

Código:
Create Table Clientes(
  ID Integer Not Null,
  Nome Varchar(50) Not Null,
  Fone Varchar(16) Not Null,
  DT_cadastro Date Default Current_Date,
  Instante TimeStamp
);

Alter Table Clientes Add Constraint PK_Clientes primary key (ID);

Create Generator GEN_CLIENTES_ID;

Set Term ^ ;
Create Trigger BI_Clientes FOR Clientes
Active Before Insert or Update Position 0
as
Begin
  IF (NEW.ID IS NULL) THEN
    NEW.ID = GEN_ID(GEN_CLIENTES_ID,1);
  Instante = Current_TimeStamp
End^
Set Term ; ^


Se notarem, a trigger será disparada após inserir e após alterar. Portanto o campo Instante, do tipo TimeStamp, será atualizado a cada alteração na linha da tabela. E o ID será pego a partir do Generator, de dentro da trigger. Bom, agora vem a parte interessante da história: Criaremos uma procedure para efetuar a inserção dos dados!

Código:

Set term ^ ;
Create Procedure SP_Ins_Cliente(
  inNome Varchar(50),
  inFone Varchar(16)
)
Returns (
  outID Integer
)
as
Begin
  Insert Into Clientes (Nome, Fone) Values ( inNome, inFone )
  RETURNING ID INTO :outID;
End
^
Set Term ; ^


Bom, como já dá pra saber, pra usarmos, bastaria usar qualquer componente de execução de select's, como por exemplo um IBQuery, SqlQuery, Query, ZQuery, IBOQuery, MDOQuery, etc...

Para fins didáticos, vou mostrar como ficaria usando um IBQuery:

Código:

try
  with IbQuery1 do begin
    Close;
    Sql.Text := 'SELECT outID FROM SP_Ins_Cliente( :P1, :P2 )';
    Params[0].AsString := 'ActiveDelphi Super Site';
    Params[0].AsString := '(00) 0000-0000';
    Open;
    Showmessage('Dados Inseridos!');
    Showmessage('O ID do Cliente é '+Fields[0].AsString );
    Transaction.Commit;
  end;
except
  on E:Exception do begin
    Application.Messagebox( PChar('Falha: '+E.message), 'Verifique' , mb_ok);
    IbQuery1.Transaction.RollBack;
  end;
end;


Bom pessoal... não é nenhuma "Grande Descoberta" (tem referencia ao retorno de dados no release notes, que sempre é bom darmos uma olhada), mas pode ajudar muita gente, principalmente em cadastros do tipo mestre/detalhe, ou que se precise de um retorno do id.

Espero que ajude....

[img]http://itmanager3.intel.com/pt-br/users/Badge.axd/7a65c9e0-0630-4e9e-ba19-3845879ba46b[/img]
_________________
Suporte e Consultoria em Desenvolvimento de Sistemas
Bacharel em Sistemas de Informação
Especialista em Bancos de Dados
Desenvolvimento: Clipper, Delphi, PHP, Python/Django


Editado pela última vez por thomazs em Qua Jun 17, 2009 10:09 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
nikeblue
Novato
Novato


Registrado: Quinta-Feira, 24 de Janeiro de 2008
Mensagens: 13

MensagemEnviada: Qui Jan 24, 2008 11:14 am    Assunto: Responder com Citação

Ola!
Sou novo no delphi!
tenho apenas 14 anos e gostaria de uma ajuda!
como q eu faço o Banco-de-dados no firebird e ligo ele com o delphi??
eu ficaria muito agradesido se alguem me respondese
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
nikeblue
Novato
Novato


Registrado: Quinta-Feira, 24 de Janeiro de 2008
Mensagens: 13

MensagemEnviada: Qui Jan 24, 2008 11:14 am    Assunto: Responder com Citação

Ah!
o meu é o delphi 7
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
heberinf
Novato
Novato


Registrado: Segunda-Feira, 30 de Junho de 2008
Mensagens: 26

MensagemEnviada: Ter Ago 19, 2008 9:54 am    Assunto: Responder com Citação

Nossa!

muito bom, eu uso muito o FB e a cada dia ele tem se mostrado melhor do que imaginava.

muito bom msm

vlw
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
mydyfreitas
Novato
Novato


Registrado: Terça-Feira, 2 de Fevereiro de 2010
Mensagens: 4

MensagemEnviada: Ter Fev 02, 2010 5:18 pm    Assunto: Responder com Citação

nikeblue escreveu:
Ola!
Sou novo no delphi!
tenho apenas 14 anos e gostaria de uma ajuda!
como q eu faço o Banco-de-dados no firebird e ligo ele com o delphi??
eu ficaria muito agradesido se alguem me respondese


È o seguinte nikeblue, coloque um componente SQLConnection dentro de um DataModule e clique duas vezes em cima do componente para abrir uma caixa para vc realizar a conexão. Depois clique no mais(+), escolha o driver e um nome para esse seu BD. Insira depois o path do banco de dados e teste a conexão.
Espero ter ajudado!
Smile
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
rangelalvess
Novato
Novato


Registrado: Domingo, 13 de Março de 2011
Mensagens: 66
Localização: Damianópolis

MensagemEnviada: Seg Ago 08, 2011 8:15 pm    Assunto: Dicas para usar banco de dados Responder com Citação

nikeblue escreveu:
Ola!
Sou novo no delphi!
tenho apenas 14 anos e gostaria de uma ajuda!
como q eu faço o Banco-de-dados no firebird e ligo ele com o delphi??
eu ficaria muito agradesido se alguem me respondese

Sugiro que instale o 2010, mas se não for possível fique com 2007 mesmo.

Respondendo sua pergunta: Para facilitar totalmente seu trabalho com banco de dados daqui para frente, instale um componente no Delphi chamado Zeos.

Depois de instalado o Zeos, raste um TZConection, um TZQuery, uma TDataSource, um TDBGrid (se quiser mostrar os dados nela). E configure as propriedades, é muito fácil de configurar Very Happy

Suponho que você esteja começando agora, e neste caso deve estar desenvolvendo projetos pequenos para "facilitar" seu trabalho, faça com banco de dados locais tipo SQLite ou Access. (Recomendo fortemente o SQLite se seu projeto for pequeno menos que 50 mil registros por tabela). Ex.: Controle de Estoque para mercadinhos, controle de locadora, e todos os demais que não precisem de funcionarem em Rede.

Agora se seu software for para venda e for para rodar em Rede recomendo o Firebird 100%.

Se for projeto para você mesmo (pessoal) mais que precisa estar online e ser acessado de qualquer lugar recomendo o MySQL.

Um dica: Um excelente gerenciador de banco de dados (http://fishcodelib.com/Database.htm) abre todo tipo de banco, inclusive Firebird, SQLite e Access!

Para você que está começando o conselho é não parar de ler, estudar e usar muito o Google.
_________________
Rangel Alves - www.rangelproducoes.com
Desenvolvimento de Sites e Softwares
http://www.rangelproducoes.com/?pagina=softwares
Como Montar Negócio 100% Online
http://rangelalves.com/dicas-gratis/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário MSN Messenger
leogazio
Colaborador
Colaborador


Registrado: Domingo, 18 de Fevereiro de 2007
Mensagens: 1047
Localização: Alto Paraná - PR

MensagemEnviada: Sex Nov 25, 2011 12:49 am    Assunto: Responder com Citação

Mas por que tá sendo enfatizada a versão "2.0"? As versões mais antigas do Firebird como por exemplo a 1.5, não dão suporte a trabalhar dessa forma?
_________________
Leonardo Gazio - Consultoria e Suporte a Desenvolvedores.

Suporte para todo o Brasil via;
E-mail: leonardogazio@delphimasters.com
Msn: lngsmattos@hotmail.com
Claro: (21) 7301-7243
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB