Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   error con consulta numerica (https://www.clubdelphi.com/foros/showthread.php?t=60517)

raulmm26 04-10-2008 10:49:10

error con consulta numerica
 
Hola, estoy intentado hacer una consulta y para buscar en un campo string y a mayores en un campo numerico, pero cuando hago la busqueda solo en el campo numerico no me encuentra nada

aSql:='Select numhistoria,nombre,Apellidos,direccion,telefono,localidad,historia,antecedentesmedicos,recetas from historia where Apellidos like' +QuotedStr(bsskinEdit7.Text+'%')+' or telefono like'+qutedstr(bsskinedit8.text) +'order by Apellidos, nombre';
MyQuery1.SQL.Add(aSql);
MyQuery1.Open;

donde bsskinedit8.text es el d ato para buscar en el campo numerico

coso 04-10-2008 11:44:18

hola, si 'telefono' es un campo numerico, no deberias usar ni quotedstr ni like, tansolo hacer '...telefono = ' + TelefonoEdit.Text. Saludos.

raulmm26 04-10-2008 12:01:44

tampoco me funciona de esa forma, no me encuentra nada, estoy usando mysql

coso 04-10-2008 12:07:29

el campo numerico debe ser tal como te comentaba. Es muy raro que no te funcione con '... or Telefono = ' + bsskinedit8.text + ' order by ...'. ¿Has limpiado la consulta antes de el .Add? (MyQuery1.SQL.Clear).

raulmm26 04-10-2008 12:09:55

si

MyQuery1.Close;
Myquery1.SQL.Clear;
aSql:='Select numhistoria,nombre,Apellidos,direccion,telefono,localidad,historia,antecedentesmedicos,recetas from historia where Apellidos like' +QuotedStr(bsskinEdit7.Text+'%')+' or telefono ='+ bsskinedit8.text +'order by Apellidos, nombre';
MyQuery1.SQL.Add(aSql);
MyQuery1.Open;

asi es como lo tengo ahora y sigue sin ir

coso 04-10-2008 12:10:30

Me refiero ... la sentencia 'Select ... from historia where Apellidos like' +QuotedStr(bsskinEdit7.Text+'%')+' or telefono = ' + bsskinedit8.text +' order by Apellidos, nombre' es correcta. El error no esta aqui, siempre claro esta que bsskinedit8.text tenga un numero que exista en la base de datos.

coso 04-10-2008 12:11:38

¿y telefono es un campo numerico?

raulmm26 04-10-2008 12:13:31

si, cuando me referia a campo numerico, me referia a 'telefono'

coso 04-10-2008 12:14:38

Pues la sentencia esta correcta, y no parece que haya mas misterio...

coso 04-10-2008 12:15:41

Fijate en el valor de bsskinEdit8.Text, a ver si es q te has confundido de Edit o coge un valor extraño por algun otro motivo...tambien, claro esta q tenga datos numericos la base de datos concorde a los que pides...saludos.

raulmm26 04-10-2008 12:19:44

pero no habria que convertir el bsskinedit8.edit a entero para que lo reconociese, ya que lo que haces es comparar un string con un campo numerico. eso es lo que pieso yo pero no se que sentencia tengo que usa para harcer eso

coso 04-10-2008 12:21:06

no no... no lo probaste, ¿cierto? tienes q tener en cuenta q la cadena sql la 'parsea' el servidor sql, no tu. Por lo tanto, bsskinedit8.text como string es correcto siempre y cuando dentro tenga un numero. Si no, el servidor sql te saltara la excepcion...Tu lo unico que estas haciendo es crear un string (sql.text)....por eso el uso de quotedstr cuando quieres insertar una cadena, pues es una cadena dentro de otra.

coso 04-10-2008 12:24:51

por ejemplo, con lo que tu tenias al principio, el servidor sql veia (y ejecutaba) esto

select * from historia where Apellidos like 'ramirez%' or telefono like '94232432'

mientras que con lo que te he escrito, ejecuta esto

select * from historia where Apellidos like 'ramirez%' or telefono = 94232432

lo mismo si fuese un campo boolean

select * from historia where si_no = true (y no where si_no = 'true')

raulmm26 04-10-2008 12:26:49

si lo probe y no me muestra nada, y pongo numeros. es muy extraño esto pero no se donde puede estar el fallo. tambien en el myquery en la parte de SQL tengo esta sentencia

Select numhistoria,nombre,Apellidos,direccion,telefono,localidad,historia,antecedentesmedicos,recetas from historia where Apellidos like :bsskinEdit7.text% or telefono like :bsskinEdit8.text order by Apellidos, nombre

pero no se donde estara el fallo

coso 04-10-2008 12:28:03

...or telefono like :bsskinEdit8.text ...

el like, no. Debes usar el = o bien > <. El like es para comparar cadenas.

raulmm26 04-10-2008 12:28:10

si lo probe y no me muestra nada, y pongo numeros. es muy extraño esto pero no se donde puede estar el fallo. tambien en el myquery en la parte de SQL tengo esta sentencia

Select numhistoria,nombre,Apellidos,direccion,telefono,localidad,historia,antecedentesmedicos,recetas from historia where Apellidos = :bsskinEdit7.text% or telefono like :bsskinEdit8.text order by Apellidos, nombre

pero no se donde estara el fallo

raulmm26 04-10-2008 12:29:37

Perdon
Select numhistoria,nombre,Apellidos,direccion,telefono,localidad,historia,antecedentesmedicos,recetas from historia where Apellidos like :bsskinEdit7.text% or telefono = :bsskinEdit8.text order by Apellidos, nombre

pero no hace nada

coso 04-10-2008 12:34:31

a ver...esta sentencia tal cual esta escrita...copy&paste

Select numhistoria,nombre,Apellidos,direccion,telefono,localidad,historia,antecedentesmedicos,recetas from historia where Apellidos like ' + QuotedStr(bsskinEdit7.text + '%') + ' or telefono = ' + bsskinEdit8.text + ' order by Apellidos, nombre'

saludos.

coso 04-10-2008 12:35:49

Como te digo...si esto no te funciona...tienes un sql raro o no tienes datos correctos en la bd o bsskinedit8

coso 04-10-2008 12:36:32

¿que? ¿te va?


La franja horaria es GMT +2. Ahora son las 08:30:00.

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