Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-05-2012
franroju franroju is offline
Miembro
NULL
 
Registrado: ene 2012
Posts: 55
Poder: 13
franroju Va por buen camino
Consulta SQL con Zeos

Hola gente. Tengo un problema que seguramente debe ser estupido pero estoy tan ciego que no veo la solucion.

Tengo una conexion zeos con mysql 5.1. Quiero hacer un simple select con 2 parametros y me arroja un error en la sintaxis de la consulta.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
     sql: string;
begin
  query.Close;
  query.SQL.Clear;
  sql := 'select * from usuarios where usuario = :usu  and contrasenia = :contra';
  query.SQL.Add(sql);
  query.ParamByName('usu').AsString:= edit1.Text;
  query.ParamByName('contra').AsString:= edit2.Text;
  query.Open;
end;

El error es "cerca" de 'usuarios' (nombre de la tabla) y me manda a revisar el manual, je (cosa que hice, pero no encuentro nada raro).

La conexion esta hecha de la siguiente manera: tengo un ZQuery con la propiedad Connection con el ZConnection, y un Datasource con la propiedad Dataset seteado con el ZQuery.

Espero puedan ayudarme, abrazo a todos
Responder Con Cita
  #2  
Antiguo 22-05-2012
Avatar de kapcomx
kapcomx kapcomx is offline
Miembro
 
Registrado: jun 2007
Ubicación: Puebla México
Posts: 350
Poder: 17
kapcomx Va por buen camino
tabla

mmmmmm no parece nada raro, estas seguro que tu tabla se llama "usuarios" . Los nombres de los campos son correctos???

en la propiedad SQL de tu query no le metiste alguna otra consulta.

Saludos....
__________________
un tipo al cual la sociedad no le tiene el mas mínimo respeto no puede ser presidente....
Responder Con Cita
  #3  
Antiguo 22-05-2012
Avatar de darkbits
darkbits darkbits is offline
Miembro
 
Registrado: may 2006
Posts: 280
Poder: 19
darkbits Va por buen camino
Hola Compare mira en vez de select tendria que ir INSERT
ojo el ID_Primario de tu tabla USUARIOS dendria que ser auntoincremento. tomaencuenta el detalle.

tengo este SQL que lo utilizo para lo mismo q vos y me funciona de maravilla MD5 utilizo para encriptar el password par mas seguridad.

Código SQL [-]
     query.close;
     query.SQL.Text:='INSERT INTO usuarios(usuario,contrasenia) values ('+QuotedStr(edit1.text)+','+QuotedStr(MD5DigestToStr(MD5String(edit2.text)))+')'; // MD5 si quieres encriptar las contraseña de lo contrario como coloco el edit1.text
     query.ExecSQL;
Responder Con Cita
  #4  
Antiguo 23-05-2012
franroju franroju is offline
Miembro
NULL
 
Registrado: ene 2012
Posts: 55
Poder: 13
franroju Va por buen camino
kapcomx los nombres están bien. No se, sigo sin encontrarle respuestas.

Amigo darkbits, yo no necesito un insert, los datos ya están en la base. Lo que quiero es corroborar si los datos ingresados en los edits son correctos chequeando la base. Por eso necesito el select.

Gracias a los 2 por responder, pero no he avanzado!
Responder Con Cita
  #5  
Antiguo 23-05-2012
Avatar de gmontes
gmontes gmontes is offline
Miembro
 
Registrado: jul 2004
Ubicación: Culiacán, Sinaloa, México
Posts: 668
Poder: 20
gmontes Va por buen camino
yo trabajo con zeos y firebird y esto hago

Código:
Close;

    DMSIU.cdsMedicos.Active:=false;
    SQL.Clear;
    SQL.Add('SELECT * FROM Medicos WHERE 1=1');
    case rdgBuscar.ItemIndex of
     0:SQL.Add(' AND nombre LIKE ''%'+txtNombreBusq.Text+'%''');
     1:SQL.Add(' AND rfc STARTING '''+txtRfcBusq.Text+'''');
    end;
    case rdgOrden.ItemIndex of
     0:SQL.Add(' ORDER By nombre');
     1:SQL.Add(' ORDER BY RFC');
    end;
    Open;
    DMSIU.cdsMedicos.Active:=true;
otro ejemplo es


Código:
Close;
     SQL.Clear;
     DMSIU.cdsFac.Active:=false;
     sql.add('select f.clavef, f.documento, f.remision, c.nombre, f.fechae, f.paciente, f.estatus, f.importet, f.condicion, f.sustitu, f.sdoc, fechacan');
     sql.add('from facturas f, clientes c where f.tipo =''F'' and SUBSTRING(f.documento from 1 for 1) = ''A'' and f.clavec = c.clavec and '+sCampo+' Like ''%'+Edit1.Text+'%'' ORDER BY f.documento DESC');
     Open;
algunos pasos de parametros estan muy a fuerzas, pero no me he tomado el timpo de corregir eso
__________________
Todos llevamos nuestros demonios a cuestas..
Responder Con Cita
  #6  
Antiguo 23-05-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Copia el mensaje de error aquí
Responder Con Cita
  #7  
Antiguo 23-05-2012
Avatar de kapcomx
kapcomx kapcomx is offline
Miembro
 
Registrado: jun 2007
Ubicación: Puebla México
Posts: 350
Poder: 17
kapcomx Va por buen camino
ke raro

franroju, he checado fisicamente la consulta como la pusiste y me funciona bien la prueba la hice en D7 y Mysql 5......
tal vez si seria bueno ver tu codigo o como bien dice Casimiro poner el mensaje tal cual te aparece.

Saludos
__________________
un tipo al cual la sociedad no le tiene el mas mínimo respeto no puede ser presidente....
Responder Con Cita
  #8  
Antiguo 24-05-2012
franroju franroju is offline
Miembro
NULL
 
Registrado: ene 2012
Posts: 55
Poder: 13
franroju Va por buen camino
Gente, copio error.

Primero me aparece lo siguiente:

"Source File not found: ZDbcMySqlUtils.pas"

Y si a ese error le pongo Cancelar o Ignorar me dice lo siguiente:

"Project Proyect1.exe raised exception class EZSQLException with message 'SQL error: You have an error in your sql syntax; check the manual that corresponds to your MySql server version for de right syntax to use near 'LIKE 'usuarios'' at line 1'. Process stopped... bla bla".

Será algún fallo de instalación de Zeos?

Repito el código para refrescar la memoria:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
     sql: string;
begin
  query.Close;
  query.SQL.Clear;
  sql := 'select * from usuarios where usuario = :usu  and contrasenia = :contra';
  query.SQL.Add(sql);
  query.ParamByName('usu').AsString:= edit1.Text;
  query.ParamByName('contra').AsString:= edit2.Text;
  query.Open;
end;

Gracias por responder, y espero solucionarlo (o que me ayuden a hacerlo, je)!
Responder Con Cita
  #9  
Antiguo 24-05-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por franroju Ver Mensaje
"Source File not found: ZDbcMySqlUtils.pas"
Pero ¿lo tienes?.
Responder Con Cita
  #10  
Antiguo 24-05-2012
jpgonzalez jpgonzalez is offline
Miembro
 
Registrado: feb 2010
Posts: 121
Poder: 15
jpgonzalez Va por buen camino
Cita:
Empezado por franroju Ver Mensaje
Gente, copio error.

Primero me aparece lo siguiente:

"Source File not found: ZDbcMySqlUtils.pas"

Y si a ese error le pongo Cancelar o Ignorar me dice lo siguiente:

"Project Proyect1.exe raised exception class EZSQLException with message 'SQL error: You have an error in your sql syntax; check the manual that corresponds to your MySql server version for de right syntax to use near 'LIKE 'usuarios'' at line 1'. Process stopped... bla bla".

Será algún fallo de instalación de Zeos?

Repito el código para refrescar la memoria:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
     sql: string;
begin
  query.Close;
  query.SQL.Clear;
  sql := 'select * from usuarios where usuario = :usu  and contrasenia = :contra';
  query.SQL.Add(sql);
  query.ParamByName('usu').AsString:= edit1.Text;
  query.ParamByName('contra').AsString:= edit2.Text;
  query.Open;
end;

Gracias por responder, y espero solucionarlo (o que me ayuden a hacerlo, je)!

Hola franroju...
Yo te diría lo siguiente, copia la consulta y metela en el cliente MySQL que tengas (SQLYog, Workbench, etc)...
Si la consulta ahi funciona bien, es que el problema esta con el componente Zeos en algun lado... De esta manera descartas que el error sea de la sentencia MySQL...
Abrite el cliente MySQL y pone: select * from usuarios where usuario = 'usuario' and contrasenia = 'contraseña'.
Si eso te arroja resultados, revisa el componente Zeos.

Respecto de Zeos, cuando yo lo comence a usar me tiraba un error por no tener la libreria libmysql.dll. Fijate de tener esta libreria en C:\Windows\System.
Luego Revisa que este apuntando a la base correcta, y que tenga el root, password y procotol correcto.

Espero te sirva, Abrazo!!!!
Responder Con Cita
  #11  
Antiguo 24-05-2012
jpgonzalez jpgonzalez is offline
Miembro
 
Registrado: feb 2010
Posts: 121
Poder: 15
jpgonzalez Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Pero ¿lo tienes?.
Respecto a lo que te comenta Casimiro, fijate de tener las carpetas de Zeos en el LibraryPath.
Por lo que dice ahi, no encuentra el punto pas, y eso puede ser porque no tener las carpetas agregadas en el libraryPath y/o no tenes agregada la variable de entorno de windows.
Te dejo un link que explica como instalar Zeos... Revisa si hiciste todos los pasos al instalar Zeos en tu Delphi.

http://www.youtube.com/watch?v=1jfhvkCFI4I

Espero te sirva, abrazo!!!
Responder Con Cita
  #12  
Antiguo 24-05-2012
franroju franroju is offline
Miembro
NULL
 
Registrado: ene 2012
Posts: 55
Poder: 13
franroju Va por buen camino
Gente, lo solucione cambiando el query.Open por query.ExecSQL.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);

begin
  query.Close;
  query.SQL.Clear;
  query.SQL.Add('select * from usuarios where usuario = :usu and contrasenia = :contra');
  query.ParamByName('usu').AsString:= edit1.Text;
  query.ParamByName('contra').AsString:= edit2.Text;
  query.ExecSQL;
end;

El tema ahora es que no me "levanta" el registro, pero al menos no tira error je. Tienen idea que puede ser? Hago un fetchRow del query y me da 0. Error de tipeo no hay jeje.

Y ya que estoy hago otra consulta. Para acceder a los datos que me devuelve la consulta, debo hacerle un Open al query?? Porque es la función que me arroja el error.

jpgonzalez muy bueno el video... de dónde bajaron uds. las librerías Zeos? Yo tengo la versión 6.6.6 estable y tiene los paquetes hasta delphi 9, y el del video tiene hasta el 15!

Gracias, espero no molestarlos mas jaja. Un abrazo
Responder Con Cita
  #13  
Antiguo 25-05-2012
franroju franroju is offline
Miembro
NULL
 
Registrado: ene 2012
Posts: 55
Poder: 13
franroju Va por buen camino
Gente, borre todo, y volvi a instalar todo, esta vez como dice el video. Pero sigo sin poder hacer un Open de un query o una tabla. Me sigue arrojando el mismo error de sintaxtis en la consulta. Me frena mucho este inconveniente, no puedo acceder a los datos que consulto!!

Por favor si pueden seguir ayudandome se los agradezco!
Responder Con Cita
  #14  
Antiguo 25-05-2012
Avatar de kapcomx
kapcomx kapcomx is offline
Miembro
 
Registrado: jun 2007
Ubicación: Puebla México
Posts: 350
Poder: 17
kapcomx Va por buen camino
intentar...

ke tal amigo franroju que tal si intentas hacer tu consulta de esta forma:

Código Delphi [-]
 
begin
  query.Close;
  query.SQL.Clear;
  query.SQL.Add('select * from usuarios where usuario = '+'"'+edit1.text + '"'+' and contrasenia ='+ '"' + edit2.text +'"');
  query.ExecSql;
  query.Open;
end;

Saludos...
__________________
un tipo al cual la sociedad no le tiene el mas mínimo respeto no puede ser presidente....
Responder Con Cita
  #15  
Antiguo 26-05-2012
franroju franroju is offline
Miembro
NULL
 
Registrado: ene 2012
Posts: 55
Poder: 13
franroju Va por buen camino
No, tampoco funciona. El problema es solo con las query. Ni active ni open funcionan. Las tablas andan bien.
Responder Con Cita
  #16  
Antiguo 26-05-2012
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
A reserva de que como casi siempre me caigan a palos por regañón (y otras cosas...):

En primer lugar si prestamos atención (un poquito) al mensaje de la excepción
Cita:
SQL error: You have an error in your sql syntax; check the manual that corresponds to your MySql server version for de right syntax to use near 'LIKE 'usuarios'' at line 1'
Vemos que la excepción NO es generada por Zeos sino por el motor de bd (MySQL en este caso), Zeos lo único que hace es mostrar el error que el motor le devolvió.

Segundo:
El mensaje:
Cita:
"Source File not found: ZDbcMySqlUtils.pas"
Es debido a que el consultante está depurando dentro del IDE por lo que éste trata de encontrar la instrucción que generó el error, pero dado que no se indicó un PATH para el código fuente de Zeos entonces no hay forma de mostrarlo. Recordemos que no es necesario contar con los fuentes para hacer que un paquete funcione. Si fuera un problema de Zeos, simplemente nuestro amigo no hubiera podido instalar los componentes.

Tercero:
Regresando a la excepción arrojada por el programa notamos que el motor se está quejando de una consulta que incluye un "LIKE":
Cita:
'LIKE 'usuarios''
La consulta de que sospecha nuestro amigo no contiene ningun LIKE, ergo, la consulta que provoca el error se encuentra en algún otro lado de su proyecto.

Solución:

Hay que buscar en todos los TZQuery para encontrar cual contiene la instrucción citada, posteriormente hay que verificar que no se haya dejado por error (casi a nadie le pasa [sarcasmo incluído]) con la propiedad "Active=TRUE" en tiempo de diseño ya que en esos casos Delphi abre la consulta de manera automática aunque no hagamos un "Open".

Finalmente, parece que en el query al que nuestro amigo hace un Open, tienen algunas instrucciones en su evento BeforeOpen o bien AfterOpen que abren otra consulta que es la que provoca el error. Por lo que pareciera que el error sucede al hacer "Open" en el query citado.



Finalmente, una aclaración respecto a ExeclSQL y Open:

ExecSQL por definició no devolverá datos ya que está diseñada para ejecutar consultas que no lo hacen como INSERT, DELETE o UPDATE sin que esto quiera decir que no podamos ejecutar un SELECT, salvo que los datos devueltos no son tomados en cuenta pues como ya mencioné, ExecSQL no espera que le devuelvan nada.
Open, por su parte SI es la que se debe utilizar para ejecutar un SELECT.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #17  
Antiguo 28-05-2012
franroju franroju is offline
Miembro
NULL
 
Registrado: ene 2012
Posts: 55
Poder: 13
franroju Va por buen camino
Estimado amigo AzidRain: Gracias por la explicación detallada, pero lamento informarte que toda la descripción no me solucionó el problema.

En lugar de revisar query por query, mirando si estaba la propiedad Active = true desde diseño, o si había alguna sentencia sql que se ejecute en algún lugar extraño, o si había algo en la propiedad BeforeOpen o AfterOpen, hice algo mas sencillo y menos laborioso, que fue crear un proyecto nuevo, una base de datos nueva con una sola tablita, agregué y configuré las componentes de Zeos como siempre y tomando las precauciones que me marcaste, use un ZQuery para insertar un registro (no hubo problema) y un ZReadOnlyQuery para hacer un select. Luego de ejecutar la consulta, le pongo active = true y no hubo dramas, pero al hacer un Open murió, otra vez el mismo error: 'LIKE 'nombredelatabla''. Pongo "nombredelatabla" porque ocurre con cualquier tabla que tenga, y con cualquier consulta. Le ponga apostrofe invertido, comillas simples, dobles o nada.

Así que no se, estoy a punto de rendirme, je. O dejar Zeos .

Si quieren seguir colaborando será bienvenido.

Saludos.
Responder Con Cita
  #18  
Antiguo 29-05-2012
franroju franroju is offline
Miembro
NULL
 
Registrado: ene 2012
Posts: 55
Poder: 13
franroju Va por buen camino
Y un día dios me ilumino, y gracias al MySql Command Line Client descubrí el error. Simplemente había que especificar en la consulta, el nombre de la base de datos! , de la siguiente manera:

Código SQL [-]
select * from nombredelabase.usuarios;

Gracias a todos igual, ya estaba colgando los botines, je.

Abrazo
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Zeos vs DAC??? damser Conexión con bases de datos 1 31-10-2011 17:35:04
Zeos + Ado kalisto Tablas planas 9 09-08-2010 19:29:11
Realizar una consulta sobre los registros que devuelve otra consulta Borjaserrano Firebird e Interbase 12 01-10-2007 23:19:44
consulta sobre zeos pipecato Varios 3 05-05-2006 01:35:53
zeos agora18 MySQL 0 10-02-2004 22:57:47


La franja horaria es GMT +2. Ahora son las 08:52:15.


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