Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   No me reconoce variable en la consulta (https://www.clubdelphi.com/foros/showthread.php?t=17934)

JoanKa 26-01-2005 14:43:57

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

Ohcan 26-01-2005 14:47:38

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));
:)

JoanKa 27-01-2005 12:35:20

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

Ohcan 27-01-2005 12:59:10

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?

JoanKa 27-01-2005 15:06:05

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.

Ohcan 27-01-2005 15:18:38

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

marcoszorrilla 27-01-2005 15:23:29

Tienes que hacer este cambio:
Código SQL [-]
 consulta := 'SELECT * FROM T_CLIENTES WHERE '+ nombre +' LIKE ' + QuotedStr(filtro);

Un Saludo.


La franja horaria es GMT +2. Ahora son las 07:29:31.

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