Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   hacer filtro (https://www.clubdelphi.com/foros/showthread.php?t=53979)

spia 05-03-2008 21:02:33

hacer filtro
 
hola que tal amigos, tengo una duda hice una form de busqueda de un articulo e hice un filtro cuando yo escribo lo que quiero buscar si me lo encuentra pero cuando le doy aceptar no me arroja ese articulo a la pantalla anterior osea pantalla maestro porque sera, mando mi codigo haber si alguien me ayuda gracias
Código Delphi [-]
 
procedure TFbusart.Edit1Change(Sender: TObject);
Var Filtro : string;
begin
if (edit1.Text <> '') then
begin
  ATArticulos.Filtered := false;
  if cbfiltro.Text = 'codigo' then filtro := 'cveart like '''+edit1.Text + '*'''
  else if cbfiltro.Text = 'Descripcion' then filtro := 'descripcion like '''+ edit1.Text + '*'''
  else if cbfiltro.Text = 'Linea' then filtro := 'linea like '''+ edit1.Text+ '*''';
  ATArticulos.Filter := Filtro;
  ATArticulos.Filtered := True
  end
  else ATArticulos.Filtered := false;
end;
 
procedure TFbusart.FormCreate(Sender: TObject);
begin
ATarticulos.Open
end;
 
procedure TFbusart.FormDestroy(Sender: TObject);
begin
ATArticulos.Close
end;
 
procedure TFbusart.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if key = vk_down then
dbgrid1.SetFocus;
end;
 
procedure TFbusart.btnaceptarClick(Sender: TObject);
begin
cveart:= ATArticuloscveart.AsString
end;
 
procedure TFbusart.btncancelaClick(Sender: TObject);
begin
cveart := '';
close;
end;
 
procedure TFbusart.DBGrid1DblClick(Sender: TObject);
begin
Btnaceptarclick(dbgrid1);
end;
end.

enecumene 05-03-2008 21:15:40

Solo debes hacer esto:

Código Delphi [-]
procedure TFbusart.Edit1Change(Sender: TObject);
Var Filtro : string;
begin
if (edit1.Text <> '') then
begin
  ATArticulos.Filtered := false;
  if cbfiltro.Text = 'codigo' then begin
        filtro := 'cveart like '''+edit1.Text + '*''';
        ATArticulos.Filter := Filtro;
       ATArticulos.Filtered := True;
      end;
  if cbfiltro.Text = 'Descripcion' then begin
        filtro := 'descripcion like '''+ edit1.Text + '*''';
       ATArticulos.Filter := Filtro; 
       ATArticulos.Filtered := True;
      end;
  if cbfiltro.Text = 'Linea' then begin
       filtro := 'linea like '''+ edit1.Text+ '*''';
      ATArticulos.Filter := Filtro;
      ATArticulos.Filtered := True;
     end;
  end
  else ATArticulos.Filtered := false;
Close;
end;

Saludos.

spia 06-03-2008 16:39:43

filtro
 
que tal amigo que tal ya le puse el codigo que pusiste y no queda hace lo mismo no me arroja nada que sera

eduarcol 06-03-2008 16:50:10

quizas el problema este en la llamada, porq no colocas el codigo de donde lo llamas a ver que puede suceder.

spia 06-03-2008 17:41:42

Filtro
 
de hecho tengo la form principal de clientes y la form de busqueda el codigo lo estoy poniendo en la form de busqueda adonde tengo el filtro ahi debe de ir supongo yo

spia 06-03-2008 18:17:32

Filtro
 
mira en la pantalla principal de articulos tengo este codigo para que be abra el otro form de busqueda

procedure TFarticul.BtnBuscarClick(Sender: TObject);
begin
Fbusart := TFbusart.Create(Self);
try
Fbusart.ShowModal;
finally
if fbusart.cve_art <> '' then
adoqarticulos.Locate('cveart',fbusart.cve_art,[]);
Fbusart.Free;

eduarcol 06-03-2008 18:59:58

ok, estas bien, solo faltaria saber que esta devolviendo, coloca un break point en la linea if fbusart.cve_art <> '' then y fijate que valor toma el cve_art, avisa la respuesta para seguir aislando el problema

spia 07-03-2008 01:03:12

filtro
 
perdon por mi ingorancia pero como soy novato en esto apenas estoy agarrando la onda como inserto el break point gracias

eduarcol 07-03-2008 01:12:52

Parate sobre la linea y presiona el boton F5, cuando el programa ejecute esa linea se detendra, le das F8 para que pase a la siguiente linea y colocando el mouse encima veras que valor obtiene.

Recuerda que para obtener el valor de la variable debe ser despues de asignado.

spia 07-03-2008 18:28:02

filtro
 
que tal mira ya lo hice le precione la tecla f5 y dspues les precione la f8 y se ejecuto y me mando a la form principal donde se inician todas las forms y mando estos registros gracias

Thread Start: Thread ID: 3476. Process tienda.exe (3308)
Process Start: C:\produc\tienda.exe. Base Address: $00400000. Process tienda.exe (3308)
Module Load: tienda.exe. Has Debug Info. Base Address: $00400000. Process tienda.exe (3308)
Module Load: ntdll.dll. No Debug Info. Base Address: $7C910000. Process tienda.exe (3308)
Module Load: KERNEL32.dll. No Debug Info. Base Address: $7C800000. Process tienda.exe (3308)
Module Load: OLEAUT32.dll. No Debug Info. Base Address: $770F0000. Process tienda.exe (3308)
Module Load: ADVAPI32.dll. No Debug Info. Base Address: $77DA0000. Process tienda.exe (3308)
Module Load: RPCRT4.dll. No Debug Info. Base Address: $77E50000. Process tienda.exe (3308)
Module Load: Secur32.dll. No Debug Info. Base Address: $77FC0000. Process tienda.exe (3308)
Module Load: GDI32.dll. No Debug Info. Base Address: $77EF0000. Process tienda.exe (3308)
Module Load: USER32.dll. No Debug Info. Base Address: $7E390000. Process tienda.exe (3308)
Module Load: msvcrt.dll. No Debug Info. Base Address: $77BE0000. Process tienda.exe (3308)
Module Load: ole32.dll. No Debug Info. Base Address: $774B0000. Process tienda.exe (3308)
Module Load: MSIMG32.dll. No Debug Info. Base Address: $76330000. Process tienda.exe (3308)
Module Load: VERSION.dll. No Debug Info. Base Address: $77BD0000. Process tienda.exe (3308)
Module Load: COMCTL32.dll. No Debug Info. Base Address: $58C30000. Process tienda.exe (3308)
Module Load: IMM32.dll. No Debug Info. Base Address: $76340000. Process tienda.exe (3308)

eduarcol 07-03-2008 18:42:31

obviamente eso no es lo que necesitabamos,

Donde se marco la linea roja, sobre que instruccion exactamente, colocala sobre la instruccion que viene luego del finally.

Otra mas:

lees el valor de esta variable: cve_art, y lo asignas a esta cveart := '';

Estoy casi seguro que ese es el detalle.

spia 07-03-2008 19:46:40

filtro
 
se paro la franja roja en la instruccion de begin
en la form maestra donde inician todas las forms
begin
Application.Initialize;
Application.CreateForm(Tdatamodule1, datamodule1);
Application.CreateForm(TFprincipal, Fprincipal);
Application.CreateForm(TFarticul, Farticul);
Application.CreateForm(TFtempo, Ftempo);
Application.CreateForm(TFLinea, FLinea);
Application.CreateForm(TFsub, Fsub);
Application.CreateForm(TFClien, FClien);
Application.CreateForm(TFProv, FProv);
Application.CreateForm(TFCompras, FCompras);
Application.CreateForm(TFBProv, FBProv);
Application.CreateForm(TFinve, Finve);
Application.CreateForm(TFbusart, Fbusart);
Application.CreateForm(TFbuscaClie, FbuscaClie);
Application.CreateForm(TFUsuario, FUsuario);
Application.CreateForm(TFVende, FVende);
Application.Run;

eduarcol 07-03-2008 19:56:32

revisa lo que te comentaba de las variables. creo que alli esta el problema

spia 07-03-2008 20:27:54

filtro
 
no queda tu crees mira lo raro es que tengo en otro programa la funcion y si me lada te voy a pasar el codigo que tiene en la form principal de articulos

procedure TFProductos.BitBtn4Click(Sender: TObject);
begin
FBuscaArticulo:=TFBuscaArticulo.Create(self);
try
FBuscaArticulo.ShowModal;
finally
If FBuscaArticulo.Cod_Parte <> '' then
ADOQArticulos.Locate('CodParte',FBuscaArticulo.Cod_Parte,[]);
FBuscaArticulo.Free;
end;
end
;

en en la form que tiene el filtro esta asi

procedure TFBuscaArticulo.Edit1Change(Sender: TObject);
var Filtro : String;
begin
If (Edit1.Text <> '') then
begin
ATArticulos.Filtered := False;
If CBFiltro.Text = 'Código' then Filtro := 'CodParte Like '''+Edit1.Text + '*'''
else If CBFiltro.Text = 'Descripción' then Filtro := 'Descripcion Like '''+ Edit1.Text + '*'''
else If CBFiltro.Text = 'Categoría' then Filtro := 'Categoria Like '''+ Edit1.Text + '*''';
ATArticulos.Filter := Filtro;
ATArticulos.Filtered := True
end
else ATArticulos.Filtered := False;
end;
procedure TFBuscaArticulo.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
IF Key = VK_DOWN then
DbGrid1.SetFocus;
end;
procedure TFBuscaArticulo.BitBtn1Click(Sender: TObject);
begin
CodParte := ATArticulosCodParte.AsString;
Cod_Parte := ATArticulosCodParte.AsString;
Close;
end;
procedure TFBuscaArticulo.BitBtn2Click(Sender: TObject);
begin
CodParte := '';
Cod_Parte := '';
Close;
end;
procedure TFBuscaArticulo.DBGrid1DblClick(Sender: TObject);
begin
BitBtn1Click(DBGrid1);
end;
en donde no le entiendo es en los procedimientos que estan en rojo haber si me puedes esplicar el porque van asi y que funcion se lleva a cabo los que te marque en rojo este codigo en el otro programa si funciona bien

enecumene 07-03-2008 20:42:36

Es porque tienes que declararlas como variables, eso es lo que sucede;

Código Delphi [-]
procedure TFBuscaArticulo.BitBtn1Click(Sender: TObject);
Var CodParte, Cod_Parte: string;
begin
   CodParte := ATArticulosCodParte.AsString;
   Cod_Parte := ATArticulosCodParte.AsString;
   Close;
end;
procedure TFBuscaArticulo.BitBtn2Click(Sender: TObject);
Var CodParte, Cod_Parte: string;
begin
    CodParte := '';
   Cod_Parte := '';   
   Close;
end;

y por favor trata de usar las etiquetas.

Saludos.

eduarcol 07-03-2008 20:45:04

Lo que te pasa es sencillo estas buscando en la variable cve_art, pero el valor se lo asignas a cveart, ves la diferencia no es la misma variable. Por eso una esta vacia y no te da el valor

spia 07-03-2008 23:28:23

filtro
 
pues creeras que no queda algo me esta fallando y no m edoy cuenta ya hasat borre todo y lo volvi a escribir por si fue un teclaso y nada cuando le doy f9 el run me manda directamente a cve_Art el renglon q te puse en rojo

procedure TFbusart.btnaceptarClick(Sender: TObject);
var cveart, cve_art: string;
begin
cveart := ATArticuloscveart.AsString
cve_art := ATArticuloscveart.AsString
close;
end;
procedure TFbusart.btncancelaClick(Sender: TObject);
var cveart, cve_art: string;
begin
cveart := '';
cve_art := '';
end;

ya no se que hacer

Caral 07-03-2008 23:39:53

Hola
Código Delphi [-]
procedure TFbusart.btnaceptarClick(Sender: TObject);
var cveart, cve_art: string;
begin
cveart := ATArticuloscveart.AsString;
cve_art := ATArticuloscveart.AsString;
close;
end;
procedure TFbusart.btncancelaClick(Sender: TObject);
var cveart, cve_art: string;
begin
cveart := '';
cve_art := '';
end;
Saludos

spia 08-03-2008 00:16:27

filtro
 
hola caral oye ya le puse todo el codigo como me lo escribes y nada siguen sin mandarme el codigo seleccionado a la pantalla maestro

spia 08-03-2008 00:20:16

filtro
 
caral quieres q te pase el codigo de la form de articulos como esta y tambien la de la form donde esta el filtro porque ya lo rebise todo y lo volvi hacer y no agarra

eduarcol 08-03-2008 01:08:53

var cveart, cve_art: string;

Esas variables deben ser globales.

Te tratare de explicar el concepto porq veo que lo llevas perdido. El asunto es el siguiente, tienes un formulario donde muestras informacion de un articulo determinado llamemoslo FProdutos, en este tienes un boton llamado busqueda cuyo codigo es:

Código Delphi [-]
procedure TFbusart.btnaceptarClick(Sender: TObject);
begin
   Fbusart := TFbusart.Create(Self);
   try
      Fbusart.ShowModal;
   finally
      if fbusart.cve_art <> '' then
         adoqarticulos.Locate('cveart',fbusart.cve_art,[]);
      Fbusart.Free;
   end;
end;

Aqui lo que haces es abrir el formulario de busqueda llamado Fbusart, y en este formulario devuelves el codigo seleccionado por el usuario en una variable en tu caso cve_art. Este es el codigo que devuelve el codigo seleccionado, ubicado en el boton aceptar y cancelar respectivamente de la pantalla de busqueda fBusArt:


Código Delphi [-]
procedure TFbusart.btnaceptarClick(Sender: TObject);
begin
   cve_art:= ATArticuloscveart.AsString
end;
 
procedure TFbusart.btncancelaClick(Sender: TObject);
begin
   cve_art := '';
close;
end;

fijate que estoy utilizando una sola variable cve_art, muy distinto a cveart, pero en ningun momento la declare dentro del procedimiento local, esto se debe a que su declaracion esta en la seccion de variables del formulario de busqueda fbusart, algo asi

Código Delphi [-]
public
   {public declarations}
   cve_art: String;

Espero haberte aclarado la situacion y ayudarte a encontrar el error, que esta dado por las distintas variables que utilizas y las declaras en donde no es

spia 08-03-2008 01:32:14

filtro
 
que tal mira si rebise todo y que crees que ya quedo lo que tenia mal era que los campos de la form principal las tenia con direccion a un datasource mal y eso era lo que no me regresaba el articulo pero ya quedo ya que encuentro el articulo solo seleciono y le doy aceptar y ya me la pasa pues muchas gracias ya que si me dio lata esto y como comentaba que soy principiante pues gracias


La franja horaria es GMT +2. Ahora son las 00:33:16.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi