Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-04-2015
alexglez1255 alexglez1255 is offline
Miembro
NULL
 
Registrado: jul 2013
Posts: 86
Poder: 11
alexglez1255 Va por buen camino
Orden Clear me manda de nuevo al pricipio del procedimiento

Hola jovenes tengo una pregunta, tengo este codigo


Código Delphi [-]
procedure Taltadecontratos.edtBuscarCteChange(Sender: TObject);
var
 cadenaAbuscar: string;
 codcliente:Integer;
begin

  if (cmbBusqCte.ItemIndex=1) then
    DBGrid1.Visible:=True
  else
    DBGrid1.Visible:=False;
  CadenaAbuscar:=edtBuscarCte.Text;

  if (cmbBusqCte.ItemIndex<>1)and(CadenaAbuscar<>'') and (not TryStrToInt(cadenaAbuscar,codcliente)) then
  begin
   ShowMessage('En el campo de Codigo solo puede escribir numeros, ponga cuidado por favor');
   edtBuscarCte.Clear;
   exit;
//   raise Exception.Create(
//  'Solo introducir numeros por favor para buscar en campo de '+cmbBusqCte.Text);
  end;

//Buscar numero de cliente

  if cmbBusqCte.ItemIndex=0 then
  logicanegocio.CDSclieCOD.Locate('COD_CLIENTE',edtBuscarCte.Text,[loPartialKey]);
  if cmbBusqCte.ItemIndex=1 then
  begin
    logicanegocio.CDSclieCOD.Locate('CLIENTE',edtBuscarCte.Text,[loPartialKey]);

    with logicanegocio.CDSclieCOD do
    begin
      Filtered := False;
      Filter   := Format( 'CLIENTE LIKE %s ', [ QuotedStr(edtBuscarCte.Text + '%' ) ] );
      Filtered := True;
    end;
 end;
end;

En este codigo cuando se escribe numeros en el campo manda un mensaje de error, luego le hago un edtbuscarCte.clear
para borrar los datos pero la cosa es que en ves de esperar otra ves captura del operador me ejecuta de nuevo el procedure... que puedo hacer para que no se ejecute de nuevo el procedimiento ya que el clear me hace que se autoejecute..gracias

Última edición por ecfisa fecha: 11-04-2015 a las 04:16:01. Razón: Agregar etiquetas [DELPHI]
Responder Con Cita
  #2  
Antiguo 11-04-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por alexglez1255 Ver Mensaje
Hola jovenes tengo una pregunta,...
Se agrace...

Es inevitable que el uso del método Clear dispare el evento OnChange ya que el contenido del TEdit cambia. Y si esto lo haces dentro del evento OnChange....

Una forma de que funcione ( aunque me desagrada en absoluto ) es desasignar el evento antes de la llamada al método Clear y reasignarlo luego:
Código Delphi [-]
procedure Taltadecontratos.edtBuscarCteChange(Sender: TObject);
var
  tn : TNotifyEvent;
  tmp: Integer;
begin
  width logicanegocio do
  begin
    case cmbBusqCte.ItemIndex of
      0: begin
           if not TryStrToInt(edtBuscarCte.Text, tmp) then
           try
             ShowMessage('En el campo de Codigo solo puede escribir numeros');
             tn := edtBuscarCte.OnChange;  // guardar 
             edtBuscarCte.OnChange:= nil;  // desasignar
             edtBuscarCte.Clear;           // borrar
             Exit;
           finally
             edtBuscarCte.OnChange := tn;  // reasignar
           end;
           CDSclieCOD.Locate( 'CUSTNO', edtBuscarCte.Text,[loPartialKey] );
         end;
      1: begin
           DBGrid1.Visible := True;
           CDSclieCOD.Locate( 'COMPANY', edtBuscarCte.Text,[loPartialKey] );
           CDSclieCOD.Filtered := False;
           CDSclieCOD.Filter   := Format( 'COMPANY LIKE %s ', [ QuotedStr(edtBuscarCte.Text + '%' ) ] );
           CDSclieCOD.Filtered := True;
         end;
    end;
  end;
end;

Lo que yo haría es avisar del error y dejar que el usuario lo corrija:
Código Delphi [-]
procedure Taltadecontratos.edtBuscarCteChange(Sender: TObject);
var
  tmp: Integer;
begin
  width logicanegocio do
  begin
    case cmbBusqCte.ItemIndex of
      0: begin
           if not TryStrToInt(edtBuscarCte.Text, tmp) then
           begin
             ShowMessage('En el campo de Codigo solo puede escribir numeros');
             edtBuscarCte.SetFocus;
             Exit;
           end;
           CDSclieCOD.Locate( 'COD_CLIENTE', edtBuscarCte.Text,[loPartialKey] );
         end;
      1: begin
           DBGrid1.Visible := True;
           CDSclieCOD.Locate( 'CLIENTE', edtBuscarCte.Text,[loPartialKey] );
           CDSclieCOD.Filtered := False;
           CDSclieCOD.Filter   := Format( 'CLIENTE LIKE %s ', [ QuotedStr(edtBuscarCte.Text + '%' ) ] );
           CDSclieCOD.Filtered := True;
         end;
    end;
  end;
end;
Por otro lado, el primer código es poco amable con el usuario. Imagina que lleva ingresado: 0123456789a.
¿ Por que borrarle todo el contenido si solo tiene un caracter erroneo ?

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 11-04-2015
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
alexglez1255,

Cita:
...hago un edtbuscarCte.clear para borrar los datos...Orden Clear me manda de nuevo al principio del procedimiento edtBuscarCteChange...


Revisa esta información:



El método Clear del TEdit, dispara el evento OnChange al producirse un cambio en el contenido del TEdit.

Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    edtBuscarCte: TEdit;
    procedure edtBuscarCteKeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.edtBuscarCteKeyPress(Sender: TObject; var Key: Char);
begin
   if not (Key in ['0'..'9',#8]) then
      Key := #0;
end;

end.
El código anterior en Delphi 7 sobre Windows 7 Professional x32, Solo permite la entrada de números, tecla de retroceso y flechas de dirección en un TEdit evitando la necesidad de validar dicha entrada por caracteres distintos a dígitos.

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 11-04-2015 a las 16:35:28.
Responder Con Cita
  #4  
Antiguo 12-04-2015
alexglez1255 alexglez1255 is offline
Miembro
NULL
 
Registrado: jul 2013
Posts: 86
Poder: 11
alexglez1255 Va por buen camino
muchas gracias ECFISA por sus consejos creo que usare la que le pide que lo reescriba
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
Datetimepicker.clear Osorio OOP 5 27-07-2017 17:13:04
Leer parámetros que manda otra aplicación NPIdea API de Windows 2 14-09-2010 11:20:22
Error al compilar proyecto que manda mail JADE_TYLER OOP 2 20-11-2009 17:51:05
simular en un DBLookupcombobox el efecto de un DBedit.clear el_barto Varios 4 11-08-2007 01:57:20
QReport me manda a imprimir 20,000 hojas El_Raso Impresión 0 23-03-2007 01:41:49


La franja horaria es GMT +2. Ahora son las 08:44:09.


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