Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Busqueda generica en tabla y query (https://www.clubdelphi.com/foros/showthread.php?t=64157)

Kenobi 19-03-2009 17:30:45

Busqueda generica en tabla y query
 
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...
Código Delphi [-]
query.params.paramvalues['NombreParametro']:=ValorABuscar;
ahora bien lo que quiero es hacer algo generico, me gustaria parametrizar las tablas algo asi

Código Delphi [-]
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

Código Delphi [-]
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

Código Delphi [-]
 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.
Código Delphi [-]
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;
Código Delphi [-]
Type
  Tparametros_para_procedimientos = record
    nombre_del_param: String;
    valor_del_param: Variant;
  end;

 Pparametros_para_procedimientos = ^Tparametros_para_procedimientos;


La franja horaria es GMT +2. Ahora son las 00:26:50.

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