|
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.
|
|