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.