PDA

Ver la Versión Completa : Consulta SQL con Locate


Ivan_25
16-11-2005, 09:05:03
Hola a tod@s!!!. Vamos a ver, tengo un Edit, sobre el que actua el evento onChange, y en este evento tengo un Locate para ir buscando en el campo nombre de una base de datos a medida que voy escribiendo. El problema es que no funciona siempre, es decir, me funciona si las letras que introduzco son unas y no me funciona si son otras. Por ejemplo, si la primera letra que introduzco es una 'a', si me busca cualquier nombre que contenga una 'a', pero si introduzco una 'e', no me busca nada. He probado a hacer la consulta en Access y si me funciona, aunque el like tengo que hacer con * en lugar de % como en builder. ¿Sabeis porque pasa esto?. La consulta que utilizo en builder es:

Select * from candidatos where Nombre like '%"+ENombre->Text.Trim()+ "%'

y la de access:

SELECT *
FROM candidatos
WHERE Nombre like '*e*';

alt126
16-11-2005, 09:25:49
yo comprobaria varias cosas...

1º si introduces una "a"...y te la encuentra...y luego intruduces una "e"...entonces buscaria por .... "ae"...y puede que sea normal k no encuentre nada con esas letras.

2º si no es asi, mira si en la tabla que buscas hay algo que tenga "e"...a ver si va a ser eso.

sino puesssssss....prueba a hacerlo con otro evento, pq puede que haya algo raro...

Ivan_25
16-11-2005, 10:30:03
Ya esta solucionado. El problema es que yo tenia el locate asi:


if(ADOQListacandidatos->Locate("Id", ECodigo->Text.Trim(), Opts)==true)
{}

quitandole el if ya funciona.

Otra pregunta, vamos a ver, cuando busco por codigo, como en este if anterior, al ser un campo clave, cuando borro el codigo que he metido para poner otro me da falla la aplicacion, y lo he solucionado con :

if(ECodigo->Text == "") ECodigo->Text = 0;

pero es un rollo, porque tienes que escribir el codigo despues del cero, y despues borrar el cero. ¿Como puedo hacer para que al dejar el campo en blanco no me falle?

Ivan_25
16-11-2005, 10:54:45
Ya esta solucionado:

if(ECodigo->Text != "")
{
ADOQListacandidatos->Locate("Id", ECodigo->Text.Trim(), Opts);
ADOQListacandidatos->SQL->Clear();
ADOQListacandidatos->SQL->Add("Select * from candidatos where id like '%"+ECodigo->Text.Trim()+ "%' ORDER BY Id");
ADOQListacandidatos->ExecSQL();
ADOQListacandidatos->Active = true;
this->DBGCandidatos->DataSource = this->DSListacandidatos;
}
else
{
ADOQListacandidatos->SQL->Clear();
ADOQListacandidatos->SQL->Add("Select * from candidatos ORDER BY Id");
ADOQListacandidatos->ExecSQL();
ADOQListacandidatos->Active = true;
this->DBGCandidatos->DataSource = this->DSListacandidatos;
}

alt126
16-11-2005, 13:35:44
Eres como juan palomo...

...YO ME LO GUISO YO ME LO COMO!!

Ivan_25
17-11-2005, 08:45:37
Y que quieres, macho, cuando pregunto, sigo probando, y si doy con la solucion, la pongo.

Dime lo de las copias de seguridad de la base de datos.