Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-06-2011
manuFP manuFP is offline
Registrado
NULL
 
Registrado: jun 2011
Posts: 6
Poder: 0
manuFP Va por buen camino
Como Tratar Excepciones En Delphi Al Ejecutar Sentencia Sql

Hola a todos.

Primero me presento, soy Manuel y esta es la primera vez que escribo por aquí.

He intentado buscar algo referente a ésto en los distintos foros y no he sido capaz de encontrar nada.

Si no supe buscar bien pido disculpas y os ruego ayuda agradeciéndoos de antemano.

Tengo un objeto memo en un formulario, a través del cuál escribo las sentencias sql que cargo en la propiedad correspondiente de un query, lo que quiero es que cuando introduzca algún dato en la consulta con errores de escritura en la frase sql, que no me corte el programa y tenga que volverlo a ejecutar escribiendo de nuevo toda la frase sql.

Supongo que eso se hace con manejo de excepciones?

el caso es que lo he intentado aplicar y no hay forma humana de que me funcione.

El trozo concreto de código es el siguiente:
Código Delphi [-]
 
...
  try
    dmquerys.Query1.ExecSQL;
  except
      on E:Exception do
      begin
        SHOWMESSAGE('Fallo en Sentencia SQL');
        DMQUERYS.Query1.SQL.Clear;
        DMQUERYS.QUERY1.SQL.Add('SELECT * FROM [tabla]');
      end;
  END;
  DMQUERYS.QUERY1.Open;
....
cuando me equivoco en la sentencia sql (en tiempo de ejecución), nada más llegar a la línea que hay a continuación de la sentencia try me dispara en error de EDBEngineerror......

¿Hay alguna manera de solucionarlo de forma que no se corte la ejecución del programa y que pueda sacar el típico mensaje "Error en sentencia sql" o algo similar?

Muchas Gracias.
Manuel.

Última edición por ecfisa fecha: 05-06-2011 a las 22:05:28. Razón: Etiquetas [DELPHI] [/DELPHI]
Responder Con Cita
  #2  
Antiguo 06-06-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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 manuFP y bienvenido a los foros del Club Delphi.

Tenés que utilizar el objeto EDBEngineError para poder extraer el código de error y actuar en consecuencia.
Un ejemplo:
Código Delphi [-]
  Query1.SQL.Text:= 'SELECT a* FROM COUNTRY';
  try
   Query1.Open;
  except
    on E: Exception do
     if E is EDBEngineError then  // Error de base de datos
     begin
       case EDBEngineError(E).Errors[0].ErrorCode of
         $2A12:begin// Invalid use of keyword
                 ShowMessage('Error en sentencia SQL'); //<- Error que arroja la sentencia de arriba
                 ...
               end;
          //...
         else ShowMessage(EDBEngineError(E).Errors[0].Message);
       end;
     end
     else ShowMessage(E.Message);
  end;
El tema es extenso para tratarlo en un mensaje con un simple ejemplo y los problemas que acarrea no capturar un error son serios. Te recomiendo
que amplies buscando sobre el tratamiento de errorres, objeto EDBEngineError, BDE Error codes, etc.
Y si quisieras ir un paso más allá y personalizar tus excepciones, Delphi te permite redefinir el manejador de las mismas mediante el evento Application.OnException.

Sin ir más lejos en el FTP del Club tenés La Cara Oculta de Delphi 4 que dedica un capítulo a tratar el tema excepciones.


Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 06-06-2011 a las 00:32:26.
Responder Con Cita
  #3  
Antiguo 23-07-2011
manuFP manuFP is offline
Registrado
NULL
 
Registrado: jun 2011
Posts: 6
Poder: 0
manuFP Va por buen camino
Muchas Gracias Ecfisa, he estado algo liado y no lo he podido probar en profundidad pero alguna vez que intenté ponerlo en práctica, creo recordar que aunque en el ejecutable final me funcionaba, cuando lo estoy probando en el entorno de programación y ejecuto el programa me da error, sin embargo después con el programa corriendo de manera independiente me funcionó correctamente.

No se si esto es normal.

Gracias de todas formas y miraré de cerciorarme al 100% y tenerte informado.

Saludos.
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
Ayuda descargue lazarus y al tratar de ejecutar una aplicasion da error Gattaca Lazarus, FreePascal, Kylix, etc. 0 11-04-2009 08:36:37
Problemas tratar de ejecutar IBStoredProc usantdo Blobs fredycc Firebird e Interbase 0 03-01-2009 07:40:51
como manejar errores con las excepciones en delphi Nelly Varios 2 06-10-2005 18:24:48
Al ejecutar sentencia sql, error en Idpdx32.dll URBANO SQL 5 31-05-2005 17:27:24
Ejecutar sentencia SQL Osorio Firebird e Interbase 3 28-06-2003 16:51:19


La franja horaria es GMT +2. Ahora son las 10:41:13.


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