| 
			
				|  | ActiveDelphi .: O site do programador Delphi! :.
 
 |  
 
	
		| Exibir mensagem anterior :: Exibir próxima mensagem |  
		| Autor | Mensagem |  
		| thomazs Moderador
 
  
  
 Registrado: Segunda-Feira, 1 de Março de 2004
 Mensagens: 2835
 
 
 | 
			
				|  Enviada: Qua Fev 07, 2007 1:58 pm    Assunto: DICA: Uma outra forma de autoincremento com Fb 2.0 |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| nikeblue Novato
 
  
 
 Registrado: Quinta-Feira, 24 de Janeiro de 2008
 Mensagens: 13
 
 
 | 
			
				|  Enviada: Qui Jan 24, 2008 11:14 am    Assunto: |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| nikeblue Novato
 
  
 
 Registrado: Quinta-Feira, 24 de Janeiro de 2008
 Mensagens: 13
 
 
 | 
			
				|  Enviada: Qui Jan 24, 2008 11:14 am    Assunto: |   |  
				| 
 |  
				| Ah! o meu é o delphi 7
 |  |  
		| Voltar ao Topo |  |  
		|  |  
		| heberinf Novato
 
  
 
 Registrado: Segunda-Feira, 30 de Junho de 2008
 Mensagens: 26
 
 
 | 
			
				|  Enviada: Ter Ago 19, 2008 9:54 am    Assunto: |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| mydyfreitas Novato
 
  
 
 Registrado: Terça-Feira, 2 de Fevereiro de 2010
 Mensagens: 4
 
 
 | 
			
				|  Enviada: Ter Fev 02, 2010 5:18 pm    Assunto: |   |  
				| 
 |  
				|  	  | 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!
 
  |  |  
		| Voltar ao Topo |  |  
		|  |  
		| rangelalvess Novato
 
  
 
 Registrado: Domingo, 13 de Março de 2011
 Mensagens: 66
 Localização: Damianópolis
 
 | 
			
				|  Enviada: Seg Ago 08, 2011 8:15 pm    Assunto: Dicas para usar banco de dados |   |  
				| 
 |  
				|  	  | 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
   
 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 |  |  
		|  |  
		| leogazio Colaborador
 
  
  
 Registrado: Domingo, 18 de Fevereiro de 2007
 Mensagens: 1047
 Localização: Alto Paraná - PR
 
 | 
			
				|  Enviada: Sex Nov 25, 2011 12:49 am    Assunto: |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		|  |  
  
	| 
 
 | Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido
 Editar Mensagens: Proibido.
 Excluir Mensagens: Proibido.
 Votar em Enquetes: Proibido.
 
 |  |