Ver la Versión Completa : 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
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:
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.
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.
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
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
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.
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.
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
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;
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
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
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
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
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:
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:
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
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
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
vBulletin v3.6.8, Derechos ©2000-2013, Jelsoft Enterprises Ltd.