Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-06-2007
ghuttemann ghuttemann is offline
Registrado
 
Registrado: mar 2007
Ubicación: Asunción, Paraguay
Posts: 2
Poder: 0
ghuttemann Va por buen camino
Exclamation Captura y "traducción" de errores

Desarrollo aplicaciones con Delphi y los gestores de base de datos Firebird y PostgreSQL.

El problema que tengo que solucionar es desplegar mensajes de error apropiados, cuando el error se produce del lado servidor, es decir, en la base de datos.

Básicamente, los errores que debería manejar son los siguientes:
  1. Violación de clave foránea, al eliminar o editar algún registro.
  2. Violación de clave primaria (o única).
  3. Violación de campos requeridos (campos NOT NULL).
Estuve considerando varias opciones para solucionar este problema; los cito a continuación, especificando sus inconvenientes asociados:
  1. Utilizar la propiedad Required de los TField de un TDataSet, de manera a poder realizar el control de campos requeridos del lado cliente. El inconveniente con esto es que dicha propiedad nada tiene que ver con la restricción del campo en la base de datos, si cambia un campo de la base, es decir, si deja de ser o se vuelve requerido, habría que cambiar eso también en la aplicación y recompilarla.
  2. Capturar el código de error ocurrido en la base de datos y mapearlo a un mensaje apropiado según el significado del mismo. El inconveniente con esto es que no funciona con PostgreSQL, sí con Interbase o Firebird. Talvez haya otros gestores con los que tampoco funcione. En fin, no es una solución general.
  3. Crear triggers que verifiquen los tres tipo de violaciones mencionados más arriba y de acuerdo al caso lanzar una excepción con un mensaje correspondiente, que sea entendible por el usuario común. Al parecer esta es la opción más general pero a la vez más trabajosa, tampoco es muy portable si llegásemos a cambiar de gestor, pero por lo menos dejamos el control solo de un lado (el del gestor).
Será que existe algún mecanismo conocido por Ustedes que pueda ayudarme a solucionar este problema. Qué pueden decir al respecto.

Desde ya muchas gracias.
Responder Con Cita
  #2  
Antiguo 20-06-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
Código Delphi [-]

Try
 ExecSQL;
except on E:EDBEngineError do begin
   If E.Errors[0].ErrorCode = 9729 then begin
     Showmessage('Ya existe');
   end else begin
     raise;
   end; //if errorcode
 end; //exception
End; //try

Lo que tienes que manejar es el código de error. En mi caso por utilizar SQL Server, el error es el 9729 para una llave duplicada (única); tienes que identificar que código de error te arroja firebird y/o postrgeSQL en cada uno de los casos que quieres identificar.

Teniendo esto, podrías utilizar un "Case E.Errors[0].ErrorCode Of" para cada caso en particular.

Bienvenido a los foros, dale una leída a este enlace para tener mayor información.
__________________


Última edición por ContraVeneno fecha: 20-06-2007 a las 18:48:24.
Responder Con Cita
  #3  
Antiguo 20-06-2007
sinaloenc sinaloenc is offline
Registrado
 
Registrado: jun 2007
Posts: 4
Poder: 0
sinaloenc Va por buen camino
busqueda con datos alfanumericos

tengo un problema con un adoquery, no puedo buscar un campo que tenga numeros y letras, ejemplo quiero buscar el registro 982abbp0215 y manda un error que no hay una columna con ese nombre.


o si se puede saber como usar un like en una consulta con un adoquery.


gracias de antemano... .
Responder Con Cita
  #4  
Antiguo 20-06-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
En cualquier consulta sql puedes usar un like, ahora por el error que te da asumo que estas pasando mal los parametros la cosa seria algo asi

Código SQL [-]
Select * from tutabla where elcampo like '%algun valor%'
segun lo que escribes lo debes tener asi:

Código SQL [-]
Select * from tutabla where '%algun valor%' like elcampo

Por cierto bienvenido al club, leete la guia de estilo, que no debes comenzar una pregunta en un hilo abierto
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #5  
Antiguo 24-06-2007
sinaloenc sinaloenc is offline
Registrado
 
Registrado: jun 2007
Posts: 4
Poder: 0
sinaloenc Va por buen camino
Captura y traduccion

bueno ps gracias por la respuesta pero coreo que no esta bien editada mi pregunta, si se como usar el like, lo que pasa es que en delphi quiero tomar el valor de un edit, por consiguiente la sentencia seria algo asi....




('select * from MITABLA where MICAMOPO like " ' %+edit.text+%' "


o la otra opcion a eso seria oen la misma sentencia hacer la busqueda pero el campo a buscar contiene numeros y letras revueltos.....


ejemplo :

('select * from MITABLA where MICAMOPO = '+edit.text+' '

donde edit.text contiene el valor de 982abbp2548

gracias....
Responder Con Cita
  #6  
Antiguo 25-06-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
A ver vamos por parte que tiene que ver el like con que el valor sea alfanumerico????

ok si el valor es exacto no utilizes like toma menos tiempo a la consulta

si el campo es numerico
Código SQL [-]
'select * from MITABLA where MICAMOPO = '+edit.text

si el campo es alfabetico
Código SQL [-]
'select * from MITABLA where MICAMOPO = ' + QuotedStr(edit.text)

Ahora si por alguna otra razon la busqueda es inexacta utilizando el like

Código SQL [-]
'select * from MITABLA where MICAMOPO like '' %' + edit.text + '% ''
Fijate en la posicion de los % y en ves de comillas usas apostrofes

suerte avisa si entendi mal
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #7  
Antiguo 29-06-2007
sinaloenc sinaloenc is offline
Registrado
 
Registrado: jun 2007
Posts: 4
Poder: 0
sinaloenc Va por buen camino
Saber que Filtro el query..

gracias amigo tus respuestan me han sido de mucha ayuda solo que ahora me tope con pared cuando necesito sacar los valores que filtro el query, por ejemplo cuando hago una busqueda de un numero de usuario y necesito sacar los valores como son apellido nombre y esas cosas no se como sacarlas de la seleccion y ponerlas en un edit.....


me eres de mucha ayuda creemelo ..


gracias...
Responder Con Cita
  #8  
Antiguo 30-06-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Dos formas

1.- Enlaza un dbedit al dataset por medio de un datasource

2.- por codigo

Código Delphi [-]
edit2.Text := MiDataSet.FieldByName('MiCampo').AsString;

depende tus necesidades
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
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
Comentario "aplastante" contra los que atacan la "piratería" Casimiro Notevi La Taberna 12 07-03-2010 14:03:02
error: "La operacion de multiples pasos OLE DB genero errores" gabriella MS SQL Server 3 16-08-2007 12:51:31
Necesito llamar a métodos de clases "hija" desde su clase "padre" Flecha OOP 17 20-04-2007 00:03:53
Ventana MDI, "Siempre visible" y "Pantalla completa" ixMike API de Windows 7 11-04-2007 18:36:55
Traducción del mensaje "Field value required" menfis Conexión con bases de datos 1 18-02-2005 11:43:03


La franja horaria es GMT +2. Ahora son las 16:20:13.


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