Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-05-2012
comodoro comodoro is offline
Registrado
 
Registrado: feb 2009
Posts: 3
Poder: 0
comodoro Va por buen camino
Manejo de Excepciones de Base de Datos MySQL en Lazarus

Saludos cordiales;

Buscando e investigando aqui y allá aunado a la experiencia desarrolle un procedimiento para el manejo de las excepciones de base de datos, especificamente MySQL, con Lazarus.

Es bueno hacer notar que hago uso de las libreria ZEOS Lib

Aqui les escribo el codigo, ademas lo adjunto para que puedan descargarlo:

Código Delphi [-]
unit Unit1; 

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, db, FileUtil, Forms, Controls, Graphics, Dialogs, DBGrids,
  ZConnection, ZDataset, ZDbcIntfs;

type

  { TForm1 }

  TForm1 = class(TForm)
    Conn: TZConnection;
    DBGrid1: TDBGrid;
    dsZQ1: TDatasource;
    ZQ1: TZQuery;
    ZQ1apellido_persona: TStringField;
    ZQ1cedula_persona: TLargeintField;
    ZQ1email_persona: TStringField;
    ZQ1fec_reg_persona: TDateField;
    ZQ1fnac_persona: TDateField;
    ZQ1genero_persona: TStringField;
    ZQ1nombre_persona: TStringField;
    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
    procedure TratarExcepciones (sender: tObject; E : Exception); //Se define el manejo de excepciones para la aplicacion
    procedure ManejarExcepcion (DataSet: TDataSet; E: EDatabaseError; //Se define el manejo de excepciones para la base de datos
      var DataAction: TDataAction);
  public
    { public declarations }
  end; 

var
  Form1: TForm1; 

implementation

{$R *.lfm}

{ TForm1 }

//Implementacion del manejador de exepciones para la base de datos
procedure TForm1.ManejarExcepcion  (DataSet: TDataSet; E: EDatabaseError;
      var DataAction: TDataAction);
Var
  codigo_error  : Integer;
  str_Mensaje   : String;
  str_codigo_er : String;
begin
  codigo_error  := EZSQLException(E).ErrorCode;
  str_Mensaje   := EZSQLException(E).Message;
  str_codigo_er := IntToStr(codigo_error);
  case codigo_error of
       1048 : str_Mensaje := 'Columna no puede ser nula';
       1061 : str_Mensaje := 'nombre de clave duplicado';
       1062 : str_Mensaje := 'Entrada duplicada para clave';
       //...la lista continua ver MySQL 5.1 Reference Manual :: C.3 Server Error Codes and Messages
  end;
  MessageDlg ('Se ha producido un error.'+#13#10+'Error Nro.:'+str_codigo_er+#13#10+str_Mensaje , mtError,
[mbOk],0);
DataAction:=daFail;
end;

//Implementacion del manejador de exepciones para la aplicacion.
//Aca se pueden definir todas y establecer el codigo necesario
//para el manejo de cada una de ellas.
procedure TForm1.TratarExcepciones (sender: tObject; E:Exception);
Var
  codigo_error  : Integer;
  str_codigo_er : String;
  str_Mensaje   : String;
begin
    codigo_error  := 0;
    str_codigo_er := '';

    if (E is EZSQLException)
    then begin
         codigo_error  := (E AS EZSQLException).ErrorCode; //Codigo de error de la excepcion EZSQLException
         str_codigo_er := IntToStr(codigo_error);
         str_Mensaje   := (E AS EZSQLException).Message;
         case codigo_error of
              1045 : str_Mensaje := 'Acceso denegado para usuario. revise nombre y clave';
              1046 : str_Mensaje := 'Base de datos no seleccioanda';
              1146 : str_Mensaje := 'Tabla No existe';
              //...la lista continua ver MySQL 5.1 Reference Manual :: C.3 Server Error Codes and Messages
         end;
         MessageDlg ('Se ha producido un error.'+#13#10+'Error Nro.:'+str_codigo_er+#13#10+str_Mensaje , mtError,
[mbOk],0);
       exit;
    end;

    if (E is EConvertError)
    then begin
         str_Mensaje := (E AS EConvertError).Message;
         MessageDlg ('Se ha producido un error.'+#13#10+'Error Nro.:'+str_codigo_er+#13#10+str_Mensaje , mtError,
[mbOk],0);
       exit;
    end;
(*
    if (E is EDatabaseError)
    then begin
         codigo_error  := EZSQLException(E).ErrorCode; //Codigo de error de la excepcion EZSQLException
         str_codigo_er := IntToStr(codigo_error);
         str_Mensaje := (E AS EDatabaseError).Message;
         MessageDlg ('Se ha producido un error.'+#13#10+'Error Nro.:'+str_codigo_er+#13#10+str_Mensaje , mtError,
[mbOk],0);
       exit;
    end;
*)
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  //Se asocia el manejador de exepciones de base de datos
  //al evento OnPostError del Zquery
  ZQ1.OnPostError:= @ManejarExcepcion;

  //Se asocia el manejador de exepciones de la aplicacion
  //al evento OnException de la Aplicacion
  Application.OnException := @TratarExcepciones;
 // try
    ZQ1.Open;
  //Except
  (*    on E: EZSQLException do
      begin
                 ShowMessage('Mi Mensaje de exepcion');
      end;
      *)
  //end;
end;

procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  ZQ1.Close;
end;

end.
Archivos Adjuntos
Tipo de Archivo: zip ManejoExepciones By Tom Zambrano.zip (67,8 KB, 26 visitas)

Última edición por Casimiro Notevi fecha: 11-05-2012 a las 18:58:09.
Responder Con Cita
  #2  
Antiguo 11-05-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración


Recuerda poner los tags al código fuente, ejemplo:



Gracias



.
Responder Con Cita
  #3  
Antiguo 11-05-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola comodoro.

Gracias por compartir tu código con nosotros.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 11-05-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Se me pasó

¡¡¡Gracias por la aportación!!!
Responder Con Cita
  #5  
Antiguo 11-05-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
No mi amigo no se te pasó, ya habías echo mención:

Cita:
Empezado por Casimiro Notevi Ver Mensaje
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración
...
Gracias

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 11-05-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por ecfisa Ver Mensaje
No mi amigo no se te pasó, ya habías echo mención: Saludos.
Cierto, ya la costumbre
Responder Con Cita
  #7  
Antiguo 14-05-2012
comodoro comodoro is offline
Registrado
 
Registrado: feb 2009
Posts: 3
Poder: 0
comodoro Va por buen camino
Gracias por las observaciones!!!

Es un pequeño aporte para muchos programadores que se inician y que ya tienen un cierto nivel!!!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
manejo de excepciones en lazarus marioar Lazarus, FreePascal, Kylix, etc. 3 02-12-2010 23:07:12
¿cómo conectar lazarus a una base de datos access y a Mysql? Master23 Varios 3 01-09-2010 15:53:42
Manejo de excepciones de base de datos andressanchez Varios 8 10-03-2010 19:15:55
Manejo de consultas SQL y Base de datos metroyd Conexión con bases de datos 0 07-10-2007 22:31:37
manejo de la base de datos con sql altatrejo Conexión con bases de datos 0 22-08-2005 18:52:04


La franja horaria es GMT +2. Ahora son las 18:31:36.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi