Lazarus com Firebird e JVUIB

Sabemos que o Delphi é uma excelente IDE de desenvolvimento, no entanto muitos programadores ao adotarem o Linux, precisam aprender uma outra linguagem. Através deste artigo vou apresentar de uma maneira objetiva como utilizar o banco de dados Firebird com Lazarus e JVUIB.

[ Hits: 62.091 ]

Por: Maurício Martins Marques em 24/07/2007


Criando a aplicação



1) Como root execute:

# /usr/bin/lazarus

2) Para darmos início a uma nova aplicação, clique no menu "project", "new project application".

3) Clique no menu "File", "save all" e salve o projeto em um diretório qualquer, sugiro /home/sistema/src.

4) Criaremos uma unit com o nome de global, nela colocaremos todas as rotinas de manipulação do banco de dados.

5) Clique no menu file, new Unit.

6) Clique em "File", "save all" e dê o nome global.

7) Através da janela do Lazarus, delete todo o conteúdo da unit global e substitua pelo código abaixo.

// Início do código

unit global;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, jvuib, JvUIBLIB,
  ExtCtrls, jvuibdataset, LCLType, Gtk;

procedure TrataErro(E: Exception; UnitErro, Simbolo, Tipo, Descricao: string);
procedure ConexaoDataset(DataSet:TJvUIBDataSet);
procedure ConexaoQuery(Dataset:TJvUIBQuery);
function DadosDataSet(Dataset:TJvUIBDataSet;Campo:String):STRING;
procedure Salvar(var Query:TJvUIBQuery);

Var
variavel1:integer;
variavel2:integer;

Const
// INFORME O CAMINHO COMPLETO DE SEU BANCO DE DADOS

BaseDeDados:String = '/home/mauricio/sistema/db/base.gdb';

implementation

procedure TrataErro(E: Exception; UnitErro, Simbolo, Tipo, Descricao: string);
var
  Arquivo: TextFile;
  Caminho: string;
begin
if (E is EUIBError)  then
   begin

  Caminho:='Erros.log';
  AssignFile(Arquivo,Caminho);

  if FileExists(Caminho) then
  begin
  Append(Arquivo);
  Writeln(Arquivo,'');
  Writeln(Arquivo,'----------------------------------------');
  Writeln(Arquivo,'');
  end
  else
  begin
  Rewrite(Arquivo);
  Writeln(Arquivo,'LOG DE ERROS DO SISTEMA');
  Writeln(Arquivo,'----------------------------------------');
  end;
  Writeln(Arquivo,format('DATA/HORA............: %s',[DateTimeToStr(Now)]));
  Writeln(Arquivo,format('Erro na Unit.........: %s',[UnitErro]));
  Writeln(Arquivo,format('SIMBOLO..............: %s',[Simbolo]));
  Writeln(Arquivo,format('Tipo do Erro.........: %s',[Tipo]));
  Writeln(Arquivo,format('DESCRICAO............: %s',[Descricao]));
  Writeln(Arquivo,'');
  CloseFile(Arquivo);




         case (E as EUIBError).SQLCode of
         -530: begin
                 MessageDlg('VIOLACAO DE INTEGRIDADE REFERENCIAL - '+Copy(E.message,38,Pos('na tabela',E.Message)-40)+ '.' + #13 +
                            'Na tabela '+ Copy(E.message,Pos('on table',E.Message)+8,Length(E.Message)-2)+ '.',mtError,[mbOK],0);
               end;


         -902: MessageDlg('OS DADOS NAO CONFEREM, O ACESSO AO BANCO DE DADOS NAO SERA PERMITIDO'+ #13,mtError,[mbOK],0);

         -625: MessageDlg('CAMPO'+Copy(E.message,29,Pos(',',E.Message)-29)+' NAO PODE SER NULO, OU VALOR INVALIDO',mtWarning,[mbOK],0);

         -297: MessageDlg('CHECK '+Copy(E.message,36,Pos(' on ',E.Message)-35)+' VIOLADO NA TABELA '+ Copy(E.message,Pos('table ',E.Message) + 5,Length(E.message)) +'.'+ #13 + 'OPERACAO CANCELADA',mtWarning,[mbOK],0);

         -551: MessageDlg('VOCE NAO TEM PERMISSAO PARA ESTA OPERACAO, CONTATE O ADMINISTRADOR.',mtError,[mbOK],0);

         -832: MessageDlg('ESTE REGISTRO NAO PODE SER EXCLUIDO PORQUE' + #10 +
                           'EXISTEM OUTROS QUE DEPENDEM DELE E NAO FORAM EXCLUIDOS.',mtError,[mbOK],0);

         12203: MessageDlg('BASE DE DADOS ESTA FORA DO AR. FAVOR ENTRAR'
                            + #10 + 'EM CONTATO COM O ADMINISTRADOR DA REDE '
                            + #10 + 'OU TENTE MAIS TARDE.',mtError,[mbOK],0);

         -803: MessageDlg('CHAVE PRIMARIA JA EXISTE, O REGISTRO NAO PODE SER DUPLICADO.',mtError,[mbOK],0);



         -10256 : MessageDlg('ERRO DESCONHECIDO DO SGDB. CONTATE O ADMINISTRADOR.',mtError,[mbOK],0);


         -836 :  MessageDlg(Copy(E.message,Pos('|',E.message)+1,Length(E.message)),mtError,[mbOK],0);


         else
            MessageDlg('TIPO: EUIBError  CODIGO:'+IntToStr((E as EUIBError).SQlCode)+#13+E.message,mtError,[mbOK],0);
      end;
   end
   else
      MessageDlg(E.message,mtError,[mbOK],0);
end;




procedure ConexaoDataset(DataSet: TJvUIBDataSet);
begin
  try
     DataSet.Database:=FrmMenu.conexao;
     DataSet.Transaction:=FrmMenu.transacao;
        except
        on E:Exception do begin
        Trataerro(E,'global','procedure ConexaoDatabase',E.ClassName,E.MESSAGE);
        end;
  end;
end;

procedure ConexaoQuery(Dataset: TJvUIBQuery);
begin
  try
     DataSet.Database:=FrmMenu.conexao;
     DataSet.Transaction:=FrmMenu.transacao;
        except
        on E:Exception do begin
        Trataerro(E,'global','procedure ConexaoQuery',E.ClassName,E.MESSAGE);
        end;
  end;
end;

function DadosDataSet(Dataset: TJvUIBDataSet; Campo:String):STRING;
begin

   Try
        result:= Dataset.FieldByName(Campo).Asstring;
        except
        on E:Exception do begin
        TrataErro(E,'global','Function DadosDataSet',E.ClassName, E.Message);
        end;
   end;
end;

procedure Salvar(var Query: TJvUIBQuery);
begin
  try

  Query.DataBase:=FrmMenu.Conexao;
  Query.Transaction:=FrmMenu.Transacao;

  if not Query.Transaction.InTransaction then  Query.Transaction.StartTransaction;
      Query.Execute;
      Query.close(etmCommitRetaining);
      Query.Transaction.CommitRetaining;

  except
    on E:Exception do begin
      TrataErro(E,'u_atualizacao','procedure Salvar',E.ClassName,E.Message);
      Query.Transaction.RollbackRetaining;
    end;
  end;

end;

end.  

// Final do código

Ok, Salve a unit clicando em File, Save all.

Página anterior     Próxima página

Páginas do artigo
   1. Instalação do Lazarus
   2. Instalação do Firebird
   3. Instalação do componente JVUIB
   4. Criando a base de dados
   5. Criando a aplicação
   6. Utilizando Insert
   7. Utilizando Select
   8. Utilizando Update
   9. Considerações finais
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Case de Sucesso com Sistema de Gestão Hospitalar

O que são Generators no Firebird

Apresentando o FenixSQL - Ferramenta de Banco de Dados para Interbase / Firebird

Firebird, fazendo valer o lado do servidor

Coletando informações direto do FIREBIRD via D.O.S. ou SHELL

  
Comentários
[1] Comentário enviado por aprendiz_ce em 26/07/2007 - 12:51h

Parabéns! Otimo artigo.

Com um estrutura completamente LINUX (SERVIDOR DE ARQUIVOS E ESTAÇÕES DE TRABALHO) e utilizando o Lazarus, é possível desenvolver para três camadas?

Obrigado e aguardo retorno.


[2] Comentário enviado por mauricio.marques em 26/07/2007 - 14:19h

Olá, o uso de componentes comuns a três camadas, como as paletas Datasnap ou Midas do Delphi, não são instalados por padrão no Lazarus. Talvez exista alguma forma de implementar tais componentes embora desconheça como.

Isso porém, não impede que utilizemos o Lazarus como parte da solução.

Segue o link dos componentes que são possíveis instalar no Lazarus, não discarto a hipótese do uso de componentes de Terceiros.

http://wiki.lazarus.freepascal.org/Components_and_Code_examples/pt

[3] Comentário enviado por aprendiz_ce em 26/07/2007 - 21:44h

Entendido! Mas utilizar "o Lazarus como parte da solução" como você menciona, seria utilizo em duas camadas. Correto?

Mais uma vez obrigado pela sua atenção.

[4] Comentário enviado por mauricio.marques em 27/07/2007 - 12:24h

Sim, me refiro ao uso de duas camadas, ou seja a aplicação é instalada em cada cliente e este busca os dados no servidor.

Ao contrario que o modelo de três camadas o propósito é centralizar a aplicação em um servidor de aplicações e o acesso ao banco de dados é feito através de algumas regras.

Creio que isso em breve será possível, afinal o Lazarus está crescendo bastante, já existe até componentes que vinculam o Lazarus com apache.

Espero ter esclarecido as suas dúvidas.

[5] Comentário enviado por aprendiz_ce em 27/07/2007 - 12:46h

Entendido!

Obrigado pela atenção.

[6] Comentário enviado por geda em 09/07/2010 - 15:36h


# rpm -ivh fpc-2.0.4-0.i586.rpm logado com dois ou mas usuarios podemos fazer uma troca de usuarios .

# rpm -ivh fpc-src-2.0.4-0.i386.rpm

alem disso podemos redirecionar as portas UDP + TCP para outro micro , sem necessitar coolocar por DHCP


[7] Comentário enviado por geda em 09/07/2010 - 15:38h

essa camada pode ser quebrada por uma porta UDP - quoga cl

# entrando como Router vai conseguir fazer o #cl + zebra fazendo subir os arquivos .



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts