Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-01-2005
JoanKa JoanKa is offline
Miembro
 
Registrado: Jan 2005
Posts: 92
Poder: 14
JoanKa Va por buen camino
No me reconoce variable en la consulta

Hola amgos de este foro.


Tengo una duda.

En esta variable (nombre) asigno el nombre del campo de la tabla TClientes pero cuando la variable 'nombre' lo coloco como campo para realizar una consulta me sale un error

nombre:=DM_General.TClientes.Fields[1].FieldName;

consulta := 'SELECT * FROM T_CLIENTES WHERE UPPER(nombre) LIKE ' + QuotedStr(UpperCase(filtro));
Pero cuando en la codicion pongo cualquier campo(por ejemplo codi, nom_clie, etc) no tengo problemas y la consulta me va muy bien..

Como haria para que la consulta me reconociera a la variable nombre.

Gracias y Saludos
Responder Con Cita
  #2  
Antiguo 26-01-2005
Avatar de Ohcan
[Ohcan] Ohcan is offline
Miembro Premium
 
Registrado: Aug 2004
Ubicación: Madrid (España)
Posts: 119
Poder: 14
Ohcan Va por buen camino
No sé si te he entendido muy bien... pero ahí va eso.
Mira a ver si te vale con esto:
consulta := 'SELECT * FROM T_CLIENTES WHERE UPPER(' + nombre + ') LIKE ' + QuotedStr(UpperCase(filtro));
__________________
La violencia es el último recurso del incompetente. (Salvor Hardin)
Responder Con Cita
  #3  
Antiguo 27-01-2005
JoanKa JoanKa is offline
Miembro
 
Registrado: Jan 2005
Posts: 92
Poder: 14
JoanKa Va por buen camino
Ahora tengo otro problema. Lo que anteriormente me dijistes es cuando elcontenido es una cadena (me va muy bien), pero ahora el contenido de la variable del txt_buscar es un campo de tipo entero y tengo problemas al momento de ejecutar la consulta


var consulta : String;
nombre: String;
texto:String;
numero:integer;
filtro:String;

begin


if rb_codigo.Checked=True Then
begin
nombre:=DM_General.TClientes.Fields[0].FieldName; // recogo el nombre del campo
numero:=strtoint(txt_buscar.Text); // convierto la cadena a numero

QUERY1.Active := False;

filtro:='%'+numero+'%';

consulta := 'SELECT * FROM T_CLIENTES WHERE UPPER(' + nombre + ') LIKE ' + QuotedStr(UpperCase(filtro));

QUERY1.SQL.Clear;
QUERY1.SQL.ADD(consulta);
QUERY1.Open;
end
else if rb_nombres.Checked=True Then nombre:= DM_General.TClientes.Fields[1].FieldName
else if rb_comercial.Checked=True Then nombre:=DM_General.TClientes.Fields[2].FieldName
else if rb_direccion.Checked=True Then nombre:=DM_General.TClientes.Fields[3].FieldName;


texto:=txt_buscar.Text;
QUERY1.Active := False;

filtro:='%'+texto+'%';

consulta := 'SELECT * FROM T_CLIENTES WHERE UPPER(' + nombre + ') LIKE ' + QuotedStr(UpperCase(filtro));

QUERY1.SQL.Clear;
QUERY1.SQL.ADD(consulta);
QUERY1.Open;
end;



Cual seria el posible error ????

Gracias
Responder Con Cita
  #4  
Antiguo 27-01-2005
Avatar de Ohcan
[Ohcan] Ohcan is offline
Miembro Premium
 
Registrado: Aug 2004
Ubicación: Madrid (España)
Posts: 119
Poder: 14
Ohcan Va por buen camino
Seguramente te falla en la línea
filtro:='%'+numero+'%';
porque filtro es de tipo string y numero de tipo integer...
Simplemente haz filtro:='%'+IntToStr(numero)+'%';
Pero creo que esto te va a dar problemas... porque tu campo (en el que buscas) es numérico... y tú consulta fallará (primero porque no creo que puedas poner en UPPER un numérico???) y luego porque el filtro sería texto...)

¿Qué BBDD usas?
__________________
La violencia es el último recurso del incompetente. (Salvor Hardin)
Responder Con Cita
  #5  
Antiguo 27-01-2005
JoanKa JoanKa is offline
Miembro
 
Registrado: Jan 2005
Posts: 92
Poder: 14
JoanKa Va por buen camino
begin
nombre:=DM_General.TClientes.Fields[0].FieldName;
numero:=strtoint(txt_buscar.Text);

QUERY1.Active := False;

filtro:='%'+IntToStr(numero)+'%';

consulta := 'SELECT * FROM T_CLIENTES WHERE + nombre + LIKE ' + QuotedStr(filtro);

QUERY1.SQL.Clear;
QUERY1.SQL.ADD(consulta);
QUERY1.Open;
end

he cambiado pero aun no obtengo la busqueda que deseo...


La base de datos que uso es Paradox.
Responder Con Cita
  #6  
Antiguo 27-01-2005
Avatar de Ohcan
[Ohcan] Ohcan is offline
Miembro Premium
 
Registrado: Aug 2004
Ubicación: Madrid (España)
Posts: 119
Poder: 14
Ohcan Va por buen camino
Bueno...
Yo de Paradox... ni idea... en Oracle (es lo que yo uso) me funcionan cualquiera de estas dos opciones:
select * from clientes where to_char(id) like '%1%'
select * from clientes where id like '%1%'
En la primera convierto el campo id (es numérico) a texto y le paso el filtro tipo string;
en la segunda Oracle convierte automáticamente el campo id... (cuidado, puede resultar muy lento)
Sobre Paradox no lo tengo claro... pero si vale algo parecido a esto, tendrás que montar la consulta según sea el tipo de dato del campo.

Salud2
__________________
La violencia es el último recurso del incompetente. (Salvor Hardin)
Responder Con Cita
  #7  
Antiguo 27-01-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: May 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Tienes que hacer este cambio:
Código SQL [-]
 consulta := 'SELECT * FROM T_CLIENTES WHERE '+ nombre +' LIKE ' + QuotedStr(filtro);

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 03:09:45.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi