Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-06-2011
martita martita is offline
No confirmado
 
Registrado: jun 2005
Posts: 146
Poder: 0
martita Va por buen camino
Red face algo parecido a findnearest

hola foro, tengo la necesidad de aplicar algo parecido a un findnearest pero a un tquery, se que esa funcion solo aplica a ttable, hay alguna funcion o algo para hacere algo parecido a un tquery, en formas anteriores usaba el codigo siguiente: pero ahora ocupo hacerlo con un tquery , ir buscando el nombre mas proximo o parecido a lo que voy tecleado en un tedit.

procedure Tfbuscaope.Edit1Change(Sender: TObject);
begin
data.empleados.findnearest([edit1.text]);
end;
//saludos y gracias por la atencion.
Responder Con Cita
  #2  
Antiguo 21-06-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Locate y FindNearest son muy similares. Lo que ambos hacen es un bucle en dónde en cada interacción evalúan la similitud de los valores pasados en los parámetros. Por lo anterior, puedes revisar la implementación de FindNereast para TTable y hacer una copia del código pero que funcione con TQuery. No ha de hacer muy distinto. Incluso creo que el mismo código casi intacto puede funcionar ya que las propiedades necesarias son compartidas entre TTable y TQuery.

Saludos,
Chris.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #3  
Antiguo 21-06-2011
martita martita is offline
No confirmado
 
Registrado: jun 2005
Posts: 146
Poder: 0
martita Va por buen camino
Red face marca error

marca errror el findnearest y el locate con los tquery, son exclusivos para ttable, se me ocurre hacerlo en mi select

si tengo un tedit1 y quiero buscar en un dbgrid asignado a un tquery el
valor del nombre de empleado mas aproximado como seria

en el evento onchange del tedit como seria la sentencia sql
select * from empleados.db where ????????????????????????
como hacer en el select que solo busque en el campo nombre
lo mas proximo a lo que puse en el edit ?
o que solucion mas podria aplicar ?
Responder Con Cita
  #4  
Antiguo 21-06-2011
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Hola...

Puedes usar algo así:

Código SQL [-]
select * from empleados.db where campo like 'texto%'

De esta forma te busca todos los que el campo empiece con la cadena texto.

Ahora, también depende de que motor de base de datos estés usando, por que creo que con bases de datos Paradox esto no se puede.


Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #5  
Antiguo 21-06-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola martita.

Podés usar la condición LIKE y parametrizar la consulta:
Código Delphi [-]
function QueryNearest(AQuery: TIBQuery; Tabla, Campo: string; Dato: Variant): Boolean;
begin
  AQuery.Close;
  AQuery.SQL.Clear;
  AQuery.SQL.Add('SELECT * FROM '+Tabla);
  AQuery.SQL.Add('WHERE '+Campo+' LIKE :DATO || ''%''');
  AQuery.ParamByName('DATO').Value:= Dato;
  AQuery.Open;
  Result:= not AQuery.IsEmpty;
end;
Si usas BDE basta con cambiar el tipo TIBQuery del parámetro AQuery por el tipo TQuery.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 21-06-2011 a las 22:41:53. Razón: Sacar carita risueña del código...
Responder Con Cita
  #6  
Antiguo 22-06-2011
martita martita is offline
No confirmado
 
Registrado: jun 2005
Posts: 146
Poder: 0
martita Va por buen camino
ok pero

ok la ultima solucion me parece bien, pero el detalle es que trabajo con tablas paradox, con el bde, y un alias, el tibquery no me reconoce cuando quiero poner el nombre de la base de datos no aparece ninguna y tengo registradas como 5 en el bde se supone que deberia de mostrarme la lista de las bases de tados registradas en bde.

como puedo solucionar esto ?
Responder Con Cita
  #7  
Antiguo 22-06-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola martita.

No entiendo bién el problema que tenes ya que no conozco mucho a Paradox, pero como te dije arriba sólo tendrías que cambiar el tipo del argumento AQuery de TIBQuery por TQuery.

Te adjunto un ejemplo funcional que utiliza la BDE, así lo podes analizar con tranquilidad. Para probarlo sólo descomprimilo en una carpeta y compilalo, incluye la tabla sobre la que trabaja.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 01-08-2011 a las 10:02:56.
Responder Con Cita
  #8  
Antiguo 22-06-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola de nuevo.

Ahora entiendo lo que comentas del Alias...

En el evento OnShow del ejemplo que te adjunte, cambia:
Código Delphi [-]
Query1.DatabaseName:= ExtractFilePath(Application.ExeName);

Por:
Código Delphi [-]
Query1.DatabaseName:= 'NOMBRE_DE_TU_ALIAS';

O como una solución más completa, se puede agregar otro argumento a la función:
Código Delphi [-]
function QueryNearest(AQuery: TQuery; Alias, Tabla, Campo: string; Dato: Variant): Boolean;
begin
  AQuery.DatabaseName:= Alias;
  AQuery.Close;
  AQuery.SQL.Clear;
  AQuery.SQL.Add('SELECT * FROM ' + Tabla);
  AQuery.SQL.Add('WHERE '+Campo+' LIKE :DATO || ''%''');
  AQuery.ParamByName('DATO').Value:= Dato;
  AQuery.Open;
  Result:= not AQuery.IsEmpty;
end;

Ejemplo de llamada con la tabla Country que viene con Delphi:
Código Delphi [-]
  QueryNearest(Query1, 'DBDEMOS', 'COUNTRY', 'NAME', Edit1.Text);

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 23-06-2011
martita martita is offline
No confirmado
 
Registrado: jun 2005
Posts: 146
Poder: 0
martita Va por buen camino
Red face gracias a ecfisa y a todos

gracias por el apoyo y colaboracion con el ejemplo que envio en zip
ecfisa pude comprender a fondo el funcionamiento de la busqueda de datos en una tabla, agradezco mucho por el tiempo y ayuda prestado.

saludos.

espero y sirva a otros compañeros del foro.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Api Messenger o algo parecido ColdFusion Varios 0 16-09-2010 22:26:46
combo box o algo parecido truequeman Conexión con bases de datos 1 19-01-2007 20:23:04
Replicación o algo parecido... kovaski Firebird e Interbase 6 22-11-2006 16:40:02
Algo parecido al try...except __cadetill PHP 18 10-05-2004 00:03:55
Algo parecido a un TabSheet.... craven Varios 1 05-09-2003 18:10:25


La franja horaria es GMT +2. Ahora son las 17:12:11.


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
Copyright 1996-2007 Club Delphi