Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Excepción en conexión MySQL (https://www.clubdelphi.com/foros/showthread.php?t=69351)

MikyVato 12-08-2010 09:43:02

Excepción en conexión MySQL
 
Hola amigos, tengo un pequeño problema, hice una aplicacion en Delphi que se conecta con un servidor de DB MySQL el cual se encuentra en un Hosting, quiero poner una excepción al código en caso de que la conexión a internet falle pero no me toma estas excepciones :confused: aqui les dejo el codigo espero puedan ayudarme. Desde ya gracias...

Código:

begin
  //obtengo el ultimo ID da la tabla externa
  idlocal := '0';
  QidExterno.Active := False;
  QidExterno.SQL.Clear;
  QidExterno.SQL.Text := 'select * from cliente order by id desc';
  try
    QidExterno.Active := True;
    idlocal := QidExterno.Fields[0].AsString;
  finally
    //obtengo los registros pendientes de subir de la Tabla Local
    if StrToInt (idlocal) <> 0 then
      begin
        QPrincipal.Active := False;
        QPrincipal.SQL.Clear;
        QPrincipal.SQL.Text := 'select * from cliente where id > '''+idlocal+'''';
        QPrincipal.Active := True;

        while (not QPrincipal.Eof) do
          begin
            idlocal := QPrincipal.Fields[0].AsString;
            nom := QPrincipal.Fields[1].AsString;
            loc := QPrincipal.Fields[2].AsString;
            try
              QInsercion.SQL.Clear;
              QInsercion.SQL.Text := 'INSERT INTO cliente (Id,nombre,localidad) VALUES ('''+idlocal+''','''+nom+''','''+loc+''')';
              QInsercion.ExecSQL;
            finally
              QPrincipal.Next;
              LTiempo.Caption := ' '+DateToStr (Date)+'  '+TimeToStr (Time)+'';
            end;
          end;
      end
    else
      LTiempo.Caption := 'No se subieron datos!!';
  end;
end;

Puntualmente no me funcionan las estruturas :(

Código:

try
  //instrucciones
except
  //instrucciones
end;

como tampoco la estructura :o

Código:

try
  //instrucciones
finally
  //instrucciones
end;


Neftali [Germán.Estévez] 12-08-2010 12:36:15

Para saber si te funcionan las estructuras (en concreto try..except), habría que saber cómo las estás incluyendo en tu código, de todas formas, me parece que hay un error en el diseño.

Por defnición un Try..finally, hace que si falla lo que hay en el Try, se ejecute forzosamente lo que hay en el Finally.

No me acaba de quedar claro porqué tienes en el Finally ese código. Creo que no es la estructura adecuada para este caso. Creo que bastaría con algo así:

Código Delphi [-]
  try
    QidExterno.Active := True;
    idlocal := QidExterno.Fields[0].AsString;
  Except
    // Mostrar el error o guaradarlo si hace falta
    //...
    // adegurarnos de que vale 0 (está más arriba)
    idLocal := 0;
  end;
  //obtengo los registros pendientes de subir de la Tabla Local
  if StrToInt (idlocal) <> 0 then
    ...

El código que hay en el Finally no cumple la premisa de que se deba ejecutar siempre, puesto que si hay error, tú mismo no lo ejecutas. :confused::confused::confused:

MikyVato 12-08-2010 19:26:41

Si es así la estructura esta errada, es el resultado después de varios intentos, corregi como sugieres pero nada, pruebo la aplicación pero en caso de no tener conexión a Internet se detiene con un fatal error al intentar conectar con la DB...:confused:

No entiendo porque ejecuta las lineas que están dentro del try y si da error detiene la aplicación, lo correcto seria que ejecute las lineas que estan dentro del except
Estoy utilizando Delphi7 habrá que configurar algo para tener en cuenta las excepciones??. los componentes que utilizo son el Query de la paleta BDE. :(

Neftali [Germán.Estévez] 13-08-2010 10:25:39

¿Puedes poner el código tal como lo has dejado?

Desactiva en Las opciones de Debug, "Debug on language exceptions"; A ver si es por eso que te están saltando los errores.

MikyVato 14-08-2010 06:19:19

Listo encontré la solución!!!, lo que hice fue Click en Menu Tools/Debuger Option y en la pestaña general destilde la Opción integrated debugging y WALA!!! toma las Excepciones.

Mil gracias Neftali por tu buena voluntad me sirvió de mucho tu ayuda.

Ahora paso al siguiente inconveniente ya que esto no se termina aquí jeje, en la DB que se encuentra colgada en Internet tengo dos tipos de datos que me están dando dolor de cabeza uno es DATETIME y el otro TIMESTAMP yo recibo originalmente los datos de una DB local guardo los datos en una variable STRING y lo paso a la DB en internet pero solo llegan 0000-00-00 00:00:00 :confused::confused::confused: como hago??

MikyVato 17-08-2010 04:02:48

Bueno solucione el problema de la Fecha lo unico que hice es configurar la fecha y hora en mi maquina como lo tiene el MySQL y ya!!...
Gracias a Todos....


La franja horaria es GMT +2. Ahora son las 00:04:04.

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