Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-12-2012
Avatar de darkerbyte
darkerbyte darkerbyte is offline
Miembro
 
Registrado: feb 2005
Posts: 197
Poder: 22
darkerbyte Va por buen camino
Globalizar excepciones?

Hola amigo [movorack]

Creo que la solucion va por ahi, con el manejador global de excepciones. ¿Me podrías explicar un poco mas de cómo lo haces?
De hecho yo tengo la duda si en componente Zconnection no tendrá alguna opción para manejar las excepciones de este tipo. Sería mucho mas simple por que al final de cuentas todas las consultas tienen que pasar por este componente.

¿El manejador de excepciones tambien se puede implementar para las ZTables?

Gracias de antemano
Responder Con Cita
  #2  
Antiguo 12-12-2012
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 22
movorack Va camino a la famamovorack Va camino a la fama
Ok... me cogiste de buenas pulgas y pues...

Antes que leas el código recuerda:

Buscar siempre en google.
Aquí una entrada en Delphi FAQ's
temas relacionados en About.com

Ahora sí... una aproximación a lo que te sugerí. La implementación depende de tu programa.

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, DBTables;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
    function OpenDataset(DataSet : TDataSet; StrSQL : string; Parameters : array of Variant) : Boolean;
  public
    { Public declarations }
    //Mi propia función de manejo de excepciones
    procedure MyOnException(Sender: TObject; E : Exception);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.MyOnException(Sender: TObject; E: Exception);
begin
  {Aquí puedo manejar cualquier cosa antes de mostrare el mensaje de error
   Ej: Escribir en un log, Enviar alguna notificación}

  //No se debe volver a hacer raise de la excepción ya que
  //Esto generaría un bucle que llevaría a error
  Application.ShowException(E);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  //Al crear el formulario Establezco mi función
  //como manejador de excepciones global
  Application.OnException := MyOnException;
end;

procedure TForm1.Button1Click(Sender: TObject);
  var
    lQry : TQuery;
begin
  lQry := TQuery.Create(Self);
  try
    try
      if lQry.Active then
        lQry.Close;
      lQry.Open;
    except
      on e : EDatabaseError do
      begin
        if Pos('NO SQL', UpperCase(E.Message)) > 0 then
          raise Exception.Create('No ha establecido la cadena de consulta.')
        else
          raise Exception.Create('Ha ocurrido un error en el acceso a datos. Error: '+e.Message);
      end;
      on e : exception do
      begin
        raise Exception.Create('Ha ocurrido un error general al ejecutar la consulta. Error: '+e.Message);
      end;
    end;
  finally
    lQry.Free;
  end;
end;

function TForm1.OpenDataset(DataSet: TDataSet; StrSQL: string;
  Parameters: array of Variant): Boolean;
  var
    i : Integer;
begin
  if DataSet.Active then
    DataSet.Close;

  if DataSet is TQuery then
  begin
    TQuery(DataSet).SQL.Text := StrSQL;
    for i := 0 to Length(Parameters) - 1 do
    begin
      TQuery(DataSet).Params[i].Value := Parameters[i];
    end;
  end;

  try
    DataSet.Open;
  except
    on e : Exception do
    begin
      {Aquí darle el manejo que necesito para tratar de solucionar el error}
      raise;
    end;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
  var
    lQry : TQuery;
begin
  lQry := TQuery.Create(Self);
  try
    OpenDataset(lQry, 'select * from tabla where id = :id', [123456]);
  finally
    lQry.Free;
  end;
end;

end.
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Conexión a SQL server zvf Conexión con bases de datos 7 19-12-2007 16:41:30
Conexión MySQL 4.1 Server MaMu MySQL 1 26-08-2007 14:04:56
Conexion con Ms Sql server mrh_peru Conexión con bases de datos 4 19-10-2006 01:48:27
conexion a sql server nnl MS SQL Server 6 25-09-2006 21:50:04
Conexion con mysql server Cosgaya MySQL 2 27-07-2006 17:48:18


La franja horaria es GMT +2. Ahora son las 05:28:11.


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