PDA

Ver la Versión Completa : Busqueda generica en tabla y query


Kenobi
19-03-2009, 17:30:45
Hola que tal....
Normalmente para buscar un elemento en una tabla uso locate y para buscar un elemento en un query lo hago parametrizando la consulta...
query.params.paramvalues['NombreParametro']:=ValorABuscar;
ahora bien lo que quiero es hacer algo generico, me gustaria parametrizar las tablas algo asi

Function Buscar_Registro(CampodelaTabla:Variant;Tabla:TDataSet):boolean;
begin

Abrir(Tabla);
If Tabla.Locate(QuotedStr(CampodelaTabla),Codigo,[]) then Result:=true
else
Begin
Application.MessageBox('Registro no encontrado','Aviso al Usuario',MB_ICONWARNING+MB_OK);
Result:=false;
End;

end;

el problema con este codigo es eso muchos parametros, lo que quisiera es poder parametrizar la tabla

Function Buscar_Registro(Valor:string;Tabla:TDataSet):boolean;
begin

Tabla.Close
Tabla.param.paramvalues(Quotedstr(NombreParametro):=valor
Tabla.open;

if not Tabla.eof the Result:=true
else
Begin
Application.MessageBox('Registro no encontrado','Aviso al Usuario',MB_ICONWARNING+MB_OK);
Result:=false;
End;

end;

el problema es que el tipo tabla no me acepta la propiedad params sin embargo si dentro de cualquier procedure hago esto

Gente.Close
Gente.param.paramvalues(Quotedstr(NombreParametro):=valor
Gente.open;

funciona, la unica diferencia es que estoy llamando la tabla por su nombre y no de forma generica .....

Gracias por sus comentarios ....

Chris
19-03-2009, 17:42:11
Para el parámetro tabla puedes utilizar un tipo más generico, cómo por ejemplo el TComponent. Y para pasar diferentes parámetros a la consulta, puedes hacer una lista especial de registros.
procedure buscar_valor(ComponenteTabla: TComponent; Valor: Variant);
begin
if ComponenteTabla.InheritsFrom('TQuery') then
ComponenteTabla.params...
else
ComponenteTabla.Locate(...
end;

[EDITO]
Cuando me refiero a una Lista Especial de Registros, quiero decir a un TList compuesto por punteros a tipos de datos formados Records;

Type
Tparametros_para_procedimientos = record
nombre_del_param: String;
valor_del_param: Variant;
end;

Pparametros_para_procedimientos = ^Tparametros_para_procedimientos;