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


La franja horaria es GMT +2. Ahora son las 22:00:08.

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