Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-08-2004
arual arual is offline
Miembro
 
Registrado: jul 2004
Ubicación: Málaga
Posts: 21
Poder: 0
arual Va por buen camino
Búsquedas en tablas

Buenas tardes!!!

Tengo una aplicación que rellena campos según un número de teléfono, es decir, lo típico, se pide un número de teléfono y a partir de éste se rellenan el resto de las edit.

Pero me encuentro con un problema, al no ser el número de teléfono la clave, puedo tener a varias personas con el mismo número de teléfono pero con distinto nombre.

Entonces, cuando rellenan el campo del teléfono hago:

procedure TPres1.PTlfExit(Sender: TObject);
begin
With Inicio.Personas do
begin
First;
if Locate('Tlf',PTlf.text,[]) then
begin
RELLENO LOS EDIT
AQUÍ TENDRÍA QUE COMPROBAR SI EXISTEN MÁS PERSONAS CON ESE NÚMERO DE TELÉFONO Y ACTIVAR UN BOTÓN QUE HE LLAMADO BSIGUIENTE.
BSiguiente.enabled:=True;
end;
end;
end;

No sé cómo comprobar si existen más personas con ese número de teléfono, es decir, tendría que buscar después de ese registro, pero no sé avanzar el puntero.

Admeás, me falta el procedimiento de cuando le de al botón de siguiente, pero cómo avanzo el puntero de la tabla para que me busque a aprtir del que ya ha encontrado?? (poniendo 'next' me sigue encontrando el mismo)

muchas gracias

P.D.: Perdón por las mayúsculas, pero las he utilizado por claridad. Gracias.
Responder Con Cita
  #2  
Antiguo 02-08-2004
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Poder: 21
marto Va por buen camino
Wop!

¿Por qué no en lugar de hacer un locate no filtras la tabla? Así solamente tendrías los registros con el teléfono en cuestión, de manera que al hacer el Next conseguirías el efecto que propones.

Otra cosa, para mayor claridad, es mejor que pongas tu código entre tags [delphi], sino, da dolor de cabeza leerselo
__________________
E pur si muove
Responder Con Cita
  #3  
Antiguo 02-08-2004
Avatar de ruina
ruina ruina is offline
Miembro
 
Registrado: jun 2004
Posts: 196
Poder: 20
ruina Va por buen camino
no es dificil, simplemente debes poner una condición en el filter y llamar a FindFirst - FindNext.

No es necesario que la propiedad Filtered este a true (aunque con eso conseguirias ver en un grid solo aquellos telefonos que cumplen la condición)

seria algo asi:
Código Delphi [-]
Inicio.Personas.Filter:='Tlf = '+QuotedStr(PTlf.text);
Inicio.Personas.FindFirst;
 
...
...//boton siguiente 
Inicio.Personas.FindNext;
__________________
todo el mundo debe creer en algo... yo creo que voy a tomarme otra copa.

Última edición por marto fecha: 02-08-2004 a las 17:53:42.
Responder Con Cita
  #4  
Antiguo 02-08-2004
arual arual is offline
Miembro
 
Registrado: jul 2004
Ubicación: Málaga
Posts: 21
Poder: 0
arual Va por buen camino
Muchas Gracias, con eso del findFirst me funciona, no lo conocía, muchas gracias otra vez.
Responder Con Cita
  #5  
Antiguo 02-08-2004
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Poder: 21
marto Va por buen camino
Wop!

cuando uses los tags tienes que cerrarlos al estilo xml, en este caso, [/delphi], he editado tu mensaje, para que se vea correctamente
__________________
E pur si muove
Responder Con Cita
  #6  
Antiguo 02-08-2004
Avatar de ruina
ruina ruina is offline
Miembro
 
Registrado: jun 2004
Posts: 196
Poder: 20
ruina Va por buen camino
Cita:
Empezado por marto
Wop!

cuando uses los tags tienes que cerrarlos al estilo xml, en este caso, [/delphi], he editado tu mensaje, para que se vea correctamente
¿no he puesto el de cierre?
valla, lo siento .. y gracias por la corrección marto ^_^
__________________
todo el mundo debe creer en algo... yo creo que voy a tomarme otra copa.
Responder Con Cita
  #7  
Antiguo 02-08-2004
arual arual is offline
Miembro
 
Registrado: jul 2004
Ubicación: Málaga
Posts: 21
Poder: 0
arual Va por buen camino
Y otra preguntilla mas...

Cómo se pueden hacer los filtros por más de un campo?

Gracias
Responder Con Cita
  #8  
Antiguo 02-08-2004
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Poder: 21
marto Va por buen camino
Wop!

En la propiedad Filter puedes poner condiciones simples unidas por AND y OR.

Cita:
Empezado por Delphi's help
Specifies the text of the current filter for a dataset.

property Filter: string;

Description

Use Filter to specify a dataset filter. When filtering is applied to a dataset, only those records that meet a filter’s conditions are available. Filter describes the filter condition. For example, the following filter condition displays only those records where the State field is 'CA' or 'MA':

State = 'CA' or State = 'MA'

When a filter is set, Blank records do not appear unless explicitly included in the filter. For example:

State <> 'CA' or State = NULL

When a field name contains spaces, you must enclose the field name in brackets. For example:

[Home State] = 'CA' or [Home State] = 'MA'

Filter expressions on remote SQL tables and on client datasets support field comparisons. For example:

Field1 > Field2

Field comparisons are not supported against local tables (Paradox, dBASE, Access, FoxPro).

For a complete list of operators you can use in filter strings, see SettingTheFilterProperty.

Note: Filters are not supported on unidirectional datasets. If you set the Filter property of a unidirectional dataset, it raises an exception.

The FilterOptions property controls case sensitivity and filtering on partial comparisons.

Tip: Applications can set Filter at runtime to change the dataset’s filtering condition (for example, in response to user input).
__________________
E pur si muove
Responder Con Cita
  #9  
Antiguo 02-08-2004
arual arual is offline
Miembro
 
Registrado: jul 2004
Ubicación: Málaga
Posts: 21
Poder: 0
arual Va por buen camino
Ya intenté lo que me dices, pero no compila, puse:
Código Delphi [-]
Filter:= ('Tlf='+QuotedStr(PTlf.text)) and ('Nombre='+QuotedStr(PNombre.text))and ('Ape1='+QuotedStr(PApe1.text));

Lo probé con paréntisis y sin ellos, y me dice: 'operator not applicable to this operand type' eso con los paréntisis, sin ellos me dice muchas más cosas.


gracias.
Responder Con Cita
  #10  
Antiguo 02-08-2004
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Poder: 21
marto Va por buen camino
mmmmm ¿tú te has leído la ayuda? La propiedad Filter es de tipo String..... no le puedes hacer un and.... el "and" tiene que estar dentro de la cadena...
__________________
E pur si muove
Responder Con Cita
  #11  
Antiguo 02-08-2004
Avatar de ruina
ruina ruina is offline
Miembro
 
Registrado: jun 2004
Posts: 196
Poder: 20
ruina Va por buen camino
en estos casos es muy util tirar de la función Format:
Código Delphi [-]
Filter:=
Format('(Tlf = %s) and (Nombre = %s) and (Ape1 = %s) ', 
 [QuotedStr(PTlf.text), QuotedStr(PNombre.text),QuotedStr(PApe1.text)])
__________________
todo el mundo debe creer en algo... yo creo que voy a tomarme otra copa.
Responder Con Cita
  #12  
Antiguo 02-08-2004
arual arual is offline
Miembro
 
Registrado: jul 2004
Ubicación: Málaga
Posts: 21
Poder: 0
arual Va por buen camino
mou?

Inglés, la verda q no entiendo mucho, la ayuda me la he leído, sí, lo q me has puesto antes ya lo había visto yo, pero la cosa es... y entonces??? cómo lo puedo hacer??? qe meta el and dónde??

ains...

muchas gracias
Responder Con Cita
  #13  
Antiguo 02-08-2004
arual arual is offline
Miembro
 
Registrado: jul 2004
Ubicación: Málaga
Posts: 21
Poder: 0
arual Va por buen camino
Muchas gracias Ruina, empiezas a ser mi Dios... muackas!!!
Responder Con Cita
  #14  
Antiguo 04-08-2004
paren paren is offline
Miembro
 
Registrado: jul 2004
Ubicación: Tijuana, B. C. Mexico
Posts: 18
Poder: 0
paren Va por buen camino
Question Otra preguntilla

Yo quiero hacer una busqueda, donde una palabra en un edit, se encuentre en cualquier parte del campo de un registro, lei en la ayuda que se puede hacer al go como esto

Cita:
De la ayuda de delphi
To filter strings bases on partial comparisons, use an asterisk as a wildcard. For example:

State = 'M*'
Solo que esta busqueda solo me trae los campos que empiezen con M y yo quiero que me traiga si encuentra la palabra en medio, al principio o al final

algo asi

select * from cliente
where empresa Like '%Tijuana%'
order by empresa

ya intente usar el like en el filter pero me marca el error:

raised exception class EDBEngineError with message 'Operation not aplicable.' ,
gracias por su ayuda

Uso delphi 5, win 98 se, e interbase 1.0.0.315

Última edición por paren fecha: 04-08-2004 a las 01:06:16.
Responder Con Cita
  #15  
Antiguo 04-08-2004
paren paren is offline
Miembro
 
Registrado: jul 2004
Ubicación: Tijuana, B. C. Mexico
Posts: 18
Poder: 0
paren Va por buen camino
siempre no jeje

Bueno es ke me he leido este hilo
http://www.clubdelphi.com/foros/show...ghlight=Filter

y ya veo ke es imposible hacer lo ke kiero , entonces tendre ke usar una sentencia sql
en tiempo de ejecucion, gracias de antemano y hasta luego

Última edición por paren fecha: 04-08-2004 a las 01:21:16.
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


La franja horaria es GMT +2. Ahora son las 08:41:03.


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