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 15-04-2008
Avatar de georgejg
georgejg georgejg is offline
Miembro
 
Registrado: ene 2008
Ubicación: Colombia
Posts: 37
Poder: 0
georgejg Va por buen camino
limitar Número de caracteres de un DBGRid

Hola Nuevamente,

Me gustaria saber si es posible limitar Número de caracteres de un DBGRid es decir..

Tengo el DBGrid Asociado al DataSource y este a un Query.
realizo la consulta perfectamente y puedo modificar los registros.

en la consulta se muestra campos como "Cantidad" que es de tipo Entero. en la Base de Datos esta con un tamaño de 10 y lo q se requiere es q al realizar la consulta y querer modificarlo no permita ingresar mas de 10 numeros.

por decir algo
Esto es un ejemplo de lo q me permite Digitar o ingresar el DBgrid
"145289654125478562121............"
y asi es como deberia quedar:
"1254782120"

les agradeceria una pronta respuesta.

Saludos.
Responder Con Cita
  #2  
Antiguo 15-04-2008
Avatar de juanlaplata
juanlaplata juanlaplata is offline
Miembro
 
Registrado: ene 2007
Ubicación: La Plata, Bs. As. (Argentina)
Posts: 212
Poder: 18
juanlaplata Va por buen camino
Mira la propiedades del campo en cuestion, para integer podes usar minValue y maxValue, tal ves te puede servir. (Ej: maxValue = 9999999999)
Responder Con Cita
  #3  
Antiguo 16-04-2008
Avatar de georgejg
georgejg georgejg is offline
Miembro
 
Registrado: ene 2008
Ubicación: Colombia
Posts: 37
Poder: 0
georgejg Va por buen camino
Unhappy

Gracias por contestar juanlaplata

ahora e probado lo q dices y lo hago de la Siguiente manera:

en el Botton "Consultar" al terminar la consulta pongo el Siguiente codigo:

Código Delphi [-]
Masdata.Query11CANTIDAD.MaxValue:= 9999999999;  //(Maximo 10 Caracteres)

Efectivamente lo carga y pone el Query con un Maximo de 10 caracteres ya que al Ingresar en la celda (Por Ejemplo) 11 numeros es decir 12345678901 o mas entonces me Muestra un error Diciendo

12345678901 is not a valid a value for field 'CANTIDAD'. The allowed range is 0 to 9999999999

mas o menos mi traduccion de PitInglis
el valor 12345678901 no es un válido para el campo 'CANTIDAD'. La gama permitida es 0 a 9999999999.

y si digito 10 o menos No lanza el error lo q indica q si lo esta validando, pero no con el mensaje adecudo.

E intentado capturar o validar el para poner otro mensaje de Error con el Siguiente Codigo.

Código Delphi [-]
if (Masdata.Query11CANTIDAD.MaxValue >= 99999999999) then  //Mayor o Igual a 11 Caracteres
  begin
    MessageDlg('Error EL Numero Maximo de Caracteres son 10!!',MtError,[MbOk],0);
    Edit11.SetFocus;   //Edit de Prueba
    Abort;
  End;

pero el Problema esta en q no se en q evento colocarlo, lo e intentado en algunos eventos del DBGrid como:
odDrawDataCell, odDrawColumnCell, KeyPress, OnColExit

y eventos del Query como BeforeEdit, OnUpdateError, Pero no funciona..


Si me Podrian dar su Opinion ya sea si el Codigo para Validar el Error esta Mal o si esta bien en q evento de q componente debo ponerlo.

Les Agradesco una pronta respuesta,

Saludos...
Responder Con Cita
  #4  
Antiguo 17-04-2008
Avatar de juanlaplata
juanlaplata juanlaplata is offline
Miembro
 
Registrado: ene 2007
Ubicación: La Plata, Bs. As. (Argentina)
Posts: 212
Poder: 18
juanlaplata Va por buen camino
Bueno, veamos un poco mas, si tienes un query, dataSet, table,lo que sea, y le das doble click (en timepo de diseño no?) se mostrara una pequeña ventanita (Fields editor). Estando este componennte (dataSet,...) en estado Active = True le das botton derecho y Add all Fields. Se agregaran todos los campos de dicho dataset, ... ; y ahi seleccionas el campo que deseas controlar, y en el Object Inspector tienes entre otras las prop que antes mencionabamos e incluso eventos, como por ejemplo onValidate, que en este caso creo seria en el cual poner tu nuevo codigo. Espero te sirva de ayuda.

Última edición por juanlaplata fecha: 17-04-2008 a las 14:16:09.
Responder Con Cita
  #5  
Antiguo 17-04-2008
Avatar de georgejg
georgejg georgejg is offline
Miembro
 
Registrado: ene 2008
Ubicación: Colombia
Posts: 37
Poder: 0
georgejg Va por buen camino
hola. juanlaplata e probado lo q me digisted y puse la propiedad MaxValue del Query11CANTIDAD directamente sobre el Inspector de Objetos (MaxValue 9999999999) e igual lanza el mensaje si digito mas de 10 caracteres.

Ahora el Detalle esta nuevamente al quere Capturar el Error puse el codigo

Código Delphi [-]
if (Masdata.Query11CANTIDAD.MaxValue >= 99999999999) then  //Mayor o Igual a 11 Caracteres
  begin
    MessageDlg('Error EL Numero Maximo de Caracteres son 10!!',MtError,[MbOk],0);
    Abort;
  End;
en el evento OnValidate del Query11CANTIDAD pero no lo toma..

mira el mensaje deberia aparecer si sucede lo siguiente:
1. Digitan mas de 10 Numeros
2. Al salir de la Celda ya sea usando el teclado o mause debe mostrar el Mensage "Error EL Numero Maximo de Caracteres son 10!!" y que el foco quede nuevamente en la celda en la q estaba escribiendo.

no se q evento me controla la Salida de la Celda si lo coloco en el ColExit aparece el error Deseado "Error EL Numero Maximo de Caracteres son 10!!" pero no me Deja ingresar a la Columna.

asi q no se si me podria decir cual es el Evento q controla la Salida de una Celda para poner el codigo alli y probar nuevamente.

De antemano gracias por la atencion prestada..


Saludos..
Responder Con Cita
  #6  
Antiguo 18-04-2008
Avatar de georgejg
georgejg georgejg is offline
Miembro
 
Registrado: ene 2008
Ubicación: Colombia
Posts: 37
Poder: 0
georgejg Va por buen camino
Hola a Todos con respecto al tema..

encontre este hilo el cual puede darle un nuevo rumbo a la solucion de este dilema.

si nos fijamos en el encontramos que efectivamente como decia nuestro compañero juanlaplata la validacion se debia hacer en el Evento OnValidate del QueryCANTIDAD.

en el hilo se encuentra un codigo dado por Roman q adecuandolo a lo q se tiene quedaria de la siguiente manera:

Código Delphi [-]
procedure Masdata.Query11CANTIDADValidate(Sender: TField);
begin
  if Sender.AsString = '' then
     raise Exception.Create('El Campo no Puede Quedar en Blanco!');  //Efectivamente valida el campo en blanco y no lo deja continuar hasta q digite algo
end;

y si agregamos el codigo para validar el numero de caracteres segun el ejemplo quedaria de la siguiente manera:

Código Delphi [-]
procedure TBDMasdata.Query11CANTIDADValidate(Sender: TField);
begin
    if Sender.AsString = '' then
    raise Exception.Create('El Campo no Puede Quedar en Blanco!');

    if Query11CANTIDAD.MaxValue >= 999999 then
      begin
        raise Exception.Create('El Valor Maximo es de 5!!');
      end;
end;

efectivamente el mensaje lo muestra pero ahora el problema radica en q asi escriban 2 numeros en todo caso muestra la validacion lo cual es erroneo ya q solo deberia salir si digitan mas de 5 numeros.

por lo tanto la validacion esta mal hecha ya e intentado varias maneras incluso la q se venia manejando al principio pero nada.

si alguien me puede dar su opinion acerca de la validacion seria muy importante Gracias.

Saludos
Responder Con Cita
  #7  
Antiguo 18-04-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
MaxValue es una propiedad del componente Query1CANTIDAD que establece el valor máximo del campo. Tú mismo la has puesto antes en 999999 y por tanto la comparación >= siempre es cierta. Lo que debes usar es el valor mismo el campo y compararlo contra MaxValue:

Código Delphi [-]
if Sender.AsInteger > Query1CANTIDAD.MaxValue then
  raise Exception.Create('El Valor Maximo es de 5!!');

// Saludos
Responder Con Cita
  #8  
Antiguo 18-04-2008
Avatar de georgejg
georgejg georgejg is offline
Miembro
 
Registrado: ene 2008
Ubicación: Colombia
Posts: 37
Poder: 0
georgejg Va por buen camino
Solucionado....

Primero Agradecerles a juanlaplata y a roman por sus opiniones fueron de gran importancia.

ahora siguiendo con el ejemplo de roman en el cual utilizaba el Sender.AsInteger o Sender.AsString funcionaba con el primero pero si lo utilizaba en mas de dos validaciones este no lo ejecutaba de la manera adecuada.

al final el Codigo q se utilizo fue el siguiente.

Código Delphi [-]
  
if Query11CANTIDAD.AsString = '' then
   begin
      Raise Exception.Create('El Campo Cantidad No Puede Quedar en Blanco!!');
   end;

if Query11CANTIDAD.AsInteger > 999999999 then
   begin
      Raise Exception.Create('El Numero Maximo de Caracteres es 10!!');
   end;

el primero valida q el campo no quede en blanco y el segundo valida q el numero de caracteres no sea superior a 9

Nuevamente Gracias por sus opiniones.
hasta la Proxima

Saludos...
Responder Con Cita
  #9  
Antiguo 29-04-2008
Avatar de laukri
laukri laukri is offline
Miembro
 
Registrado: dic 2007
Posts: 38
Poder: 0
laukri Va por buen camino
Question

Hola a todos!
Yo pongo el codigo en el onValidate del campo, y lanzo la exception... pero cuando la capturo?...
Los ubico un poco en la situacion... tengo que hacer un control de stock y quiero verificar que al momento de hacer la factura y al poner la cantidad que quiero del producto, este no supere el stock diponible...

Código Delphi [-]
 
procedure TDMDocumento.cdsDetalleCANTIDADValidate(Sender: TField);
begin
  dm.cdsArticulos.Open;
  dm.cdsArticulos.Locate('idArticulo', cdsDetalleARTICULO.AsInteger,[loCaseInsensitive]);
   if Sender.AsInteger > dm.cdsArticulosCANTIDAD.AsInteger then
   raise Exception.Create('¡No hay Stock suficiente!');
end;

tengo esto en el onValidate... donde capturo la exception?
desde ya agradezco su ayuda... Saludos
P/d: uso delphi 2007 y firebird 2.0
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
Limitar el nº de caracteres en un Edit Javier_A OOP 4 04-04-2013 19:57:51
Limitar ingreso a un solo numero arespremium OOP 16 26-09-2007 19:58:36
Limitar Caracteres en un Memo jlalvarez OOP 5 03-07-2007 19:06:44
Limitar caracteres en un edits. Arturo Cabrera C++ Builder 3 11-05-2006 16:41:12
Limitar caracteres en DBEdit omy Varios 5 05-10-2005 03:39:34


La franja horaria es GMT +2. Ahora son las 17:56:15.


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