Ir al contenido


Foto

manejo de excepciones y praxis?


  • Por favor identifícate para responder
48 respuestas en este tema

#41 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes

Escrito 07 abril 2016 - 04:01

 

Primero pegate un martillazo en la cabeza cada vez que leas que un componente tiene el nombre por defecto. Label1, Edit1, ZQuery1..mas aun cuando ese componente lo vas a usar para algo especifico, en el caso de un TLabel que le pones el texto en tiempo de diseño y luego te olvidas es aceptable
 
Pero ya me estoy mareando de quien es cada cosa y eso que apenas son dos query
 
Dales un nombre

 

Segundo

 

 
Eso esta al revez
 
En el Form donde pones el Grid, tenes un componente DataSource. Le vamos a llamar dsGridPersonas. En ese dsGridPersonas, hay una propiedad DataSet. En esa propiedad DataSet vamos a poner a qryListaPersonas. qryListaPersonas es el ZQuery que ejecuta la sentencia SQL SELECT * FROM Personas
 
Luego renombra el ZQuery2 y ponle qryInsertaPersona o algo similar

 

 

Llevas toda la razón Agustin_Ortu, pero no quería cambiar de momento porque me entero mejor así, aunque pueda parecer al revés.

Aunque a partir de ahora iré cambiando y renombrando componentes y propiedades y que voy asociando términos y conceptos.

 

Teneis alguna sugerencia con respecto a mis dudas de la pregunta anterior?

 

Gracias compañero!


  • 0

#42 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 07 abril 2016 - 05:20

Pos yo ya me perdí :(

Necesito leer de nuevo despacio a ver para donde va la cosa. Ya no me quedan neuronas libres... a ver si el fin de semana aflojan.

 

Saludos,


  • 0

#43 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes

Escrito 08 abril 2016 - 12:13

No consigo ramificar los errores que se pudieran dar con la base de datos. Si he visto el EDatabaseError, pero no logro, usar un "Case" para usar los codigos de error que enecumene me indicó. En todos los casos que he visto, hace referencia a 

 

Except

 on E:EDatabaseError;

     ShowMessage('.......')

 

pero en este codigo, no puedo dar mensaje según error producido (Error al abrir base de datos, error clave primaria repetida, error.....)

 

No se si es que Sqlite no puede implementarse...

 

Un saludo


  • 0

#44 cram

cram

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 832 mensajes
  • LocationMisiones, Argentina

Escrito 11 abril 2016 - 06:03

Dooper.

Antes de marearme no leí todo el hilo, pero solo quiero decirte una cosita respecto de excepciones:

 

Hay veces que es mejor evitar los errores que sobrecargar al programa. Por ejemplo -nada que ver con el caso en cuestión- antes de dividir y obtener eventualmente el caso de excepción de división por cero, es posible, preguntar si el divisor es cero y así evitar el error desde un principio.

En el caso de las bases de datos, donde hay muchas variables incontrolables dada su naturaleza, hay también algunos casos que sí se pueden controlar de antemano y evitar el uso de excepciones, por lo que "matarse" controlando cada una de ellas es un camino algo complicado y evitar los errores puede ser a veces un camino más simple y una solución más elegante.

 

Saludos.


  • 0

#45 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes

Escrito 13 abril 2016 - 02:49

Gracias Cram, buen consejo, lo tendré en cuenta. Pero esta claro que algunos errores no quedarán otro remedio que controlarlos.

En mi caso concreto, por mas que busco algo que me permita catalogar los mensaje de error para cuando se produzca un error

en abrir la base de datos (open), etc.... no hay forma de encontrarlo, ni siquiera adaptando los consejos que enecumene, delphis y Agustín me

suministraron para avanzar...

 

Seguiré luchando contra este problema, aun sin resolver, ya que en mi proyecto de prueba, hago referencia a EDataBaseError pero no ramifico según que error haya producido, imprimir un mensaje acorde al error cometido...

 

Un saludo


  • 0

#46 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 26 abril 2016 - 02:43

Yo te tengo la solución para capturar los códigos de error de SQLite:


delphi
  1. var Mensaje: String;
  2.  
  3. try
  4. ...
  5. except
  6. on E:EZSQLThrowable do
  7. begin
  8. case E.ErrorCode of
  9. 1: Mensaje := 'Error de lógica o no está la base de datos.'
  10. 2: Mensaje := 'Mensaje';
  11. ...
  12. end;
  13.  
  14. ShowMessageFmt(Mensaje + #13 + #13 + '%s',[E.Message]);
  15. ...
  16. end;

Lo acabo de probar.

 

NOTA: debes añadir la unida ZDbcIntfs.

 

Saludos.


  • 0

#47 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes

Escrito 26 abril 2016 - 03:09

Increíble amigo! Probaré ver si esta vez no me da "indentificador no encontrado" en ErrorCode y EZSQLExcepción, ahora llamado EZSQLThrowable

.

Los códigos de error ya dispongo de ellos. Y porque no se usa EDataBaseError como siempre se ha dicho?

 

Importante veo, en añadir la unidad ZDbcIntfs.

 

Da motivación ir viendo soluciones a los problemas!

 

Elegí el motor de base de datos Sqlite3 porque se comentaba que era fácil de manejar y de usar con lazarus, pero estoy

comprobando que no me está siendo tan sencillo.

 

Gracias y mil gracias.

 

Un saludo


  • 0

#48 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 26 abril 2016 - 11:31

Solo quiero acotar lo siguiente:

 

Multiple processes can have the same database open at the same time. Multiple processes can be doing a SELECT at the same time. But only one process can be making changes to the database at any moment in time, however.

 

 

Recuperado de la página oficial de SQLite

 

Saludos


  • 0

#49 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes

Escrito 30 abril 2016 - 01:45

Solo quiero acotar lo siguiente:

 

 

Recuperado de la página oficial de SQLite

 

Saludos

 

Que sugieres Egostar,  voy a probar el codigo que enecumene ha averiguado, y si hay algo que poder añadir?

 

Un saludo


  • 0




IP.Board spam blocked by CleanTalk.