Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-10-2010
PINO72 PINO72 is offline
Miembro
 
Registrado: oct 2004
Ubicación: Málaga - España
Posts: 40
Poder: 0
PINO72 Va por buen camino
Question Validación de Campos y TDBAdvEdit

Saludos a todos.

Tengo un problema con los componentes de la empresa TMS , en concreto con los TDBAdvEdits que estoy probando.

Tengo las validaciones a nivel campos programadas en los correspondientes eventos OnValidate de los objetos TField, pero cuando utilizo estos componentes para mejorar la entrada de texto, no se despliegan los mensajes de error programadas en las excepciones tipo DataBaseError.

El foco permanece en el campo por que falla la validación, pero no me despliega la ventana de error, con lo que no puedo informar al usuario de la circunstancia que provocó el error de validación.

Esta situación no se repite con los controles DBEdit, en los que funcionan perfectamente las excepciones.

Espero que me puedan ayudar, ya que me gustan estos componentes y me gustaría emplearlos en el futuro.


Saludos.
Responder Con Cita
  #2  
Antiguo 19-10-2010
PINO72 PINO72 is offline
Miembro
 
Registrado: oct 2004
Ubicación: Málaga - España
Posts: 40
Poder: 0
PINO72 Va por buen camino
DbAdvEdit y DataBaseError = Sin mensaje

Lo que decía, cuando utilizo componentes DbAdvEdit y genero una excepción en el evento OnValidate del campo asociado, no se visualiza el mensaje del DataBaseError, aunque no se me permite salir del foco (Al fallar la validación).

Pongo algo de código;

Código Delphi [-]
 
 
...
//EditCCODCLI es  TDBAdvEdi;
//CDSCabAlb es TClientDataSet
//CDSCabAlbCCODCLI es TStringField
...
 
 
procedure FTichaABMCAlbCli.CDSCabAlbCCODCLIValidate(Sender : Tfield);
Var IBSQL : TIBSQL;
begin
Try
IBSQL:= TIBSQL.Create(nil);
IBSQL.Transaction:= tr;
IBSQL.Sql.Text:= 'Select Count(*) from clientes where CCODCLI = :XCODCLI');
IBSQL.ParamsByName('XCODCLI').AsString:= TrimRight(EditCCODCLI.Text);
IBSQL.ExecQuery;
** AQUI SE PRODUCE EL FALLO . SI SE GENERA LA EXCEPCIÓN NO SE VISUALIZA EL MENSAJE!!!
If IBSQL.RecordCount = 0 then DataBaseError ('El Cliente no existe');
   ****** Aquí
 
finally
IBSQL.Close;
IBSQL.Free;
end;
end;
De nuevo os pido ayuda ...

Saludos.

Última edición por PINO72 fecha: 19-10-2010 a las 10:38:53. Razón: Fallo en etiquetas
Responder Con Cita
  #3  
Antiguo 23-10-2010
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
Resp

IBSQL.ExecQuery;

Es para insert, delete update o execute etc.

pero para para select debes usar open o active:= true;

pero igual tienes un error ya que debes preparar la consulta antes de pasarle el parametro
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Responder Con Cita
  #4  
Antiguo 25-10-2010
PINO72 PINO72 is offline
Miembro
 
Registrado: oct 2004
Ubicación: Málaga - España
Posts: 40
Poder: 0
PINO72 Va por buen camino
ExecQuery y Open

Ante todo gracias por contestar.

Con respecto a las sentencia ExecQuery, es la que pone en marcha la consulta, sea del tipo que sea a mi entender.

según la ayuda delphi 7:
Metodo : ExecQuery "Call ExecQuery to execute the SQL query."

en cuanto al comando Open es más bien una propiedad, que determina si el dataset está abierto . Cito : Use the Open property to determine if the dataset is open.

Es por eso por lo que utilizo de manera habitual ExecQuery en lugar de Open, ya que también abre de manera automática el dataset.

En cualquier caso, open tambien ejecuta la sentencia SQL al abrir el dataset correspondiente.

En cuanto al método Prepare, estoy de acuerdo en que se debería llamar antes de ejecutar la consulta, sobre todo cuando ejecutamos la misma sentencia SQL cambiando sólo los parámetros, es por eso por lo que hay que "preparar" la sentencia para su ejecución.

Como decía el hecho de que el foco siga prohibiendome salir del campo es signo de que la consulta se realiza correctamente, ya que no encuentra el cliente en la tabla, el problema es únicamente que no se muestra el mensaje que causa el error y que he programado en DatabaseError.

Corrígeme si me estoy equivocando el algo.

Saludos.
Responder Con Cita
  #5  
Antiguo 26-10-2010
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
resp

Y no es eso lo que estas haciendo pasando un parametro. O pretendes que al pasar el parametro el dataset haga magia y te devuelva algun resultado. Pero si cres que asi esta perfecto yo no te puedo cambiar tu manera de pensar.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Responder Con Cita
  #6  
Antiguo 26-10-2010
PINO72 PINO72 is offline
Miembro
 
Registrado: oct 2004
Ubicación: Málaga - España
Posts: 40
Poder: 0
PINO72 Va por buen camino
Exclamation

IBSQL.ExecQuery;
Es para insert, delete update o execute etc.

No es cierto : ExecQuery pone en marcha la consulta sea del tipo que sea.

"pero para para select debes usar open o active:= true;"

No es cierto : Open es una PROPIEDAD y no un PROCEDIMIENTO. Lo único que arroja es el resultado de conocer si el DATASET está abierto o cerrado. Encima es de sólo lectura (como es lógico). Te respondí que Open tambien ejecuta la consulta (a veces me despistan un poco..).

"pero igual tienes un error ya que debes preparar la consulta antes de pasarle el parametro"

"Igual tienes que preparar la consulta" = No sabes lo que dices.

Cuando se ejecuta una consulta muchas veces y lo único que cambia son los valores de búsqueda, para no cargar al servidor con contínuas aperturas y cierres de transacciones se pasan los parámetros a la consulta. El comando PREPARE no es obligatorio pero si aconsejable utilizarlo para preparar esos parámetros precisamente.

En una consulta que sólo se realiza una vez ( ya que después se destruye el IBSL) no es necesario.


Te aconsejo que mires antes de manuales antes de contestar algo que no sabes. Yo me tomo primero mi tiempo en comprobar el código. En caso de no dar con la solución acudo al club para ver si alguien me ayuda, lo que no me ayuda son respuestas a la ligera.


La magia no existe... Te remito a los artículos:
http://delphiallimite.blogspot.com/2...parmetros.html
http://delphiallimite.blogspot.com/2...con-ibsql.html


Saludos.

Última edición por PINO72 fecha: 26-10-2010 a las 13:18:59.
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
Validación de campos sisne OOP 3 12-04-2010 07:34:04
Clases para validación de campos alquimista_gdl PHP 3 02-09-2008 23:35:38
validacion de campos iris2408 Varios 5 18-06-2006 20:09:24
Validación de campos Mathom Conexión con bases de datos 4 26-11-2005 18:21:41
Validacion de campos Shidalis Varios 6 28-07-2005 23:12:50


La franja horaria es GMT +2. Ahora son las 07:59:01.


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