Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-03-2016
GUN10 GUN10 is offline
Miembro
 
Registrado: feb 2010
Posts: 37
Poder: 0
GUN10 Va por buen camino
Error en consulta mysql

Hola buenas noches!

Les comento que tengo el siguiente problema.
Estoy trabajando en Delphi 7 con mysql.

Realizo esta primera consulta, la cual me arroja resultados positivos, me devuelve todos los campos que necesito.

Código Delphi [-]
Datos.Qconsultas.Close;
      Datos.Qconsultas.SQL.Clear;
      Datos.Qconsultas.SQL.Add('SELECT orden_reparacion.cod_ordenreparacion ,orden_reparacion.fecha_ingreso, clientes.dni_cliente, clientes.nombre as nombre_cliente, clientes.apellido as apellido_cliente,usuarios.nombre, categoria_equipo.nombre, '+
                               'orden_reparacion.marca, orden_reparacion.modelo, detalle_ordenreparacion.dni_usuario, detalle_ordenreparacion.estado, detalle_ordenreparacion.fecha_terminado, detalle_ordenreparacion.precio '+
                               'FROM orden_reparacion, categoria_equipo, clientes, usuarios, detalle_ordenreparacion '+
                               'WHERE orden_reparacion.dni_usuario=usuarios.dni_usuario AND categoria_equipo.cod_categoria=orden_reparacion.cod_categoria and orden_reparacion.cod_ordenreparacion=detalle_ordenreparacion.cod_ordenreparacion '+
                               'AND orden_reparacion.dni_cliente=clientes.dni_cliente AND detalle_ordenreparacion.estado=''5'' AND orden_reparacion.cod_ordenreparacion='+Enumeroorden.text);

      Datos.Qconsultas.Open;

Luego en otro formulario realizo una consulta muy similar. Si se fija, en las ultimas dos condiciones del where solo cambio 2 campos. Que filtre por el 'dni_numero' y con respecto a la anterior quito que el 'estado' de la orden sea = 5.

Código Delphi [-]
Datos.Qconsultas.Close;
      Datos.Qconsultas.SQL.Clear;
      Datos.Qconsultas.SQL.Add('SELECT orden_reparacion.cod_ordenreparacion ,orden_reparacion.fecha_ingreso, clientes.dni_cliente, clientes.nombre as nombre_cliente, clientes.apellido as apellido_cliente,usuarios.nombre, categoria_equipo.nombre, '+
                               'orden_reparacion.marca, orden_reparacion.modelo, detalle_ordenreparacion.dni_usuario, detalle_ordenreparacion.estado, detalle_ordenreparacion.fecha_terminado, detalle_ordenreparacion.precio '+
                               'FROM orden_reparacion, categoria_equipo, clientes, usuarios, detalle_ordenreparacion '+
                               'WHERE orden_reparacion.dni_usuario=usuarios.dni_usuario AND categoria_equipo.cod_categoria=orden_reparacion.cod_categoria and orden_reparacion.cod_ordenreparacion=detalle_ordenreparacion.cod_ordenreparacion '+
                               'AND orden_reparacion.dni_cliente=clientes.dni_cliente AND clientes.dni_cliente='+Edni.Text);
      Datos.Qconsultas.Open;

El problema de esta segunda consulta es que en el Tedit. Tengo que colocar el "numero de dni" completo y sin equivocarme, sino me da el siguiente error.

"List index out of bounds (1)"

-------------------------------------------------------------

Aclaro que en los dos formularios, agrego el siguiente codigo para que no me agreguen espacios vacios ni letras ya que el campo es de tipo INT

Código Delphi [-]
  if (Enumeroorden.Text=' ') then

y tambien en ambos casos, antes de conectar el Query con el DBGrid, realizo la siguiente comprobacion

Código Delphi [-]
if (Datos.Qconsultas.RecordCount>0) then

En estas dos comprobaciones, emito un mensaje al no cumplirse la condicion.

Y remarco nuevamente, que en el primer caso, en la pimer consulta, cuando no cumplo la condicion, me emite los mensajes correctamente o me filtra correctamente.

La duda que me queda, es que será lo que esta pasando con la segunda consulta.
--------------------------------------------------------

Hice una prueba por medio de phpmyadmin, utilizando la misma consulta y con valores variados para el campo "dni_cliente" y me filtra correctamente.


Gracias por su tiempo. Saludos !!
Responder Con Cita
  #2  
Antiguo 18-03-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Ese mensaje, en teoría, no tiene nada que ver con la consulta, sigue el código paso a paso (debug) y encontrarás exactamente la línea del problema.
Responder Con Cita
  #3  
Antiguo 18-03-2016
GUN10 GUN10 is offline
Miembro
 
Registrado: feb 2010
Posts: 37
Poder: 0
GUN10 Va por buen camino
Hola Casimiro Notevi!

El error surge en la segunda consulta cuando ésta no me devuelve nada, es decir cuando las condiciones que pongo en el where no se cumplen.

Lo raro es que cuando en la primera consulta, las condiciones no se cumplen, ese error lo "filtro" por asi decirlo con la pregunta


Código Delphi [-]
if (Datos.Qconsultas.RecordCount>0) then


Y esto es lo que está pasando en la segunda consulta, donde utilizo el mismo procedimiento.

Por eso hasta al momento no encuentro otro error mas que ese.

Como podria verificar si esa consulta esta vacia o para filtrar y evitar ese error cuando la consulta no me devuelve nada?

Saludos !!
Responder Con Cita
  #4  
Antiguo 18-03-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Te entiendo, pero si no pones el código fuente ¿cómo ayudamos?
Responder Con Cita
  #5  
Antiguo 18-03-2016
GUN10 GUN10 is offline
Miembro
 
Registrado: feb 2010
Posts: 37
Poder: 0
GUN10 Va por buen camino
Perdon! Aqui esta el codigo !

El error me lo da cuando pongo un dni que no esta en la tabla. Si pongo uno que sea exactamente igual, me devuelve la consulta sin ningun problema.

El error que me da es ""List index out of bounds (1)"

Obviamente la consulta viene vacia cuando pongo un numero de dni que no existe en la tabla, pero no entiendo porque no pasa por la condicion "Datos.Qconsultas.RecordCount>0"

Código Delphi [-]
procedure TFEquiposporcliente.BfiltrarpordniClick(Sender: TObject);
begin
  if (Edni.Text='') then
    begin
      messagedlg('Debe ingresar un N° de DNI', mtinformation, [mbok], 0);
      Edni.SetFocus;
    end
  else
    begin
      Datos.Qconsultas.Close;
      Datos.Qconsultas.SQL.Clear;
      Datos.Qconsultas.SQL.Add('SELECT orden_reparacion.cod_ordenreparacion ,orden_reparacion.fecha_ingreso, clientes.dni_cliente, clientes.nombre as nombre_cliente, clientes.apellido as apellido_cliente,usuarios.nombre, categoria_equipo.nombre, '+
                               'orden_reparacion.marca, orden_reparacion.modelo, detalle_ordenreparacion.dni_usuario, detalle_ordenreparacion.estado, detalle_ordenreparacion.fecha_terminado, detalle_ordenreparacion.precio '+
                               'FROM orden_reparacion, categoria_equipo, clientes, usuarios, detalle_ordenreparacion '+
                               'WHERE orden_reparacion.dni_usuario=usuarios.dni_usuario AND categoria_equipo.cod_categoria=orden_reparacion.cod_categoria and orden_reparacion.cod_ordenreparacion=detalle_ordenreparacion.cod_ordenreparacion '+
                               'AND orden_reparacion.dni_cliente=clientes.dni_cliente AND clientes.dni_cliente='+Edni.Text);
      Datos.Qconsultas.Open;   

      if (Datos.Qconsultas.RecordCount>0) then
        begin
          DBGordenesporcliente.DataSource:= Datos.DSconsultas;

          DBGordenesporcliente.Columns[0].Title.Caption:= 'N° Orden';
          DBGordenesporcliente.Columns[0].Width:= 60;
          DBGordenesporcliente.Columns[1].Title.Caption:= 'Fecha Ingreso';
          DBGordenesporcliente.Columns[2].Title.Caption:= 'Dni Cliente';
          DBGordenesporcliente.Columns[3].Title.Caption:= 'Nombre Cliente';
          DBGordenesporcliente.Columns[3].Width:= 100;
          DBGordenesporcliente.Columns[4].Title.Caption:= 'Apellido Cliente';
          DBGordenesporcliente.Columns[4].Width:= 100;
          DBGordenesporcliente.Columns[5].Title.Caption:= 'Recepcionista';
          DBGordenesporcliente.Columns[5].Width:= 100;
          DBGordenesporcliente.Columns[6].Title.Caption:= 'Categoria';
          DBGordenesporcliente.Columns[6].Width:= 80;
          DBGordenesporcliente.Columns[7].Title.Caption:= 'Marca';
          DBGordenesporcliente.Columns[7].Width:= 80;
          DBGordenesporcliente.Columns[8].Title.Caption:= 'Modelo';
          DBGordenesporcliente.Columns[8].Width:= 120;
          DBGordenesporcliente.Columns[9].Title.Caption:= 'Técnico';
          DBGordenesporcliente.Columns[9].Width:= 100;
          DBGordenesporcliente.Columns[10].Title.Caption:= 'Estado';
          DBGordenesporcliente.Columns[10].Width:= 50;
          DBGordenesporcliente.Columns[11].Title.Caption:= 'Fecha Terminado';
          DBGordenesporcliente.Columns[12].Title.Caption:= 'Precio';
          DBGordenesporcliente.Columns[12].Width:= 80;

          CBclientes.KeyValue:= unassigned;
        end
      else
        begin
          DBGordenesporcliente.Columns[0].Title.Caption:= 'N° Orden';
          DBGordenesporcliente.Columns[0].Width:= 60;
          DBGordenesporcliente.Columns[1].Title.Caption:= 'Fecha Ingreso';
          DBGordenesporcliente.Columns[2].Title.Caption:= 'Dni Cliente';
          DBGordenesporcliente.Columns[3].Title.Caption:= 'Nombre Cliente';
          DBGordenesporcliente.Columns[3].Width:= 100;
          DBGordenesporcliente.Columns[4].Title.Caption:= 'Apellido Cliente';
          DBGordenesporcliente.Columns[4].Width:= 100;
          DBGordenesporcliente.Columns[5].Title.Caption:= 'Recepcionista';
          DBGordenesporcliente.Columns[5].Width:= 100;
          DBGordenesporcliente.Columns[6].Title.Caption:= 'Categoria';
          DBGordenesporcliente.Columns[6].Width:= 80;
          DBGordenesporcliente.Columns[7].Title.Caption:= 'Marca';
          DBGordenesporcliente.Columns[7].Width:= 80;
          DBGordenesporcliente.Columns[8].Title.Caption:= 'Modelo';
          DBGordenesporcliente.Columns[8].Width:= 120;
          DBGordenesporcliente.Columns[9].Title.Caption:= 'Técnico';
          DBGordenesporcliente.Columns[9].Width:= 100;
          DBGordenesporcliente.Columns[10].Title.Caption:= 'Estado';
          DBGordenesporcliente.Columns[10].Width:= 50;
          DBGordenesporcliente.Columns[11].Title.Caption:= 'Fecha Terminado';
          DBGordenesporcliente.Columns[12].Title.Caption:= 'Precio';
          DBGordenesporcliente.Columns[12].Width:= 80;

          messagedlg('El cliente seleccionado no tiene Equipos en el sistema', mtinformation, [mbok], 0);

          Edni.setfocus;
        end;
    end;


  Lcantidad.Caption:= inttostr(Datos.Qconsultas.recordcount);
end;


Saludos !!
Responder Con Cita
  #6  
Antiguo 18-03-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Está ese código muy raro

Haces un Datos.Qconsultas.Open y luego asignas un datasource que no se sabe de dónde viene y trabajas con lo que parece ser el datasource asignado a algún tipo de grid
¿Para qué sirve entonces el Qconsultas si no lo usas para nada?
Responder Con Cita
  #7  
Antiguo 18-03-2016
GUN10 GUN10 is offline
Miembro
 
Registrado: feb 2010
Posts: 37
Poder: 0
GUN10 Va por buen camino
El datasource que le asino al DBGrid, esta conectado con el Query y a la base de datos!

Es por eso que primero hago la consulta y dependiendo si es que me arroja o no resultados, se lo asigno al dbgrid.

Qconsultas, mi dataset
DSconsultas, mi datasource

y Datos, donde tengo todos los dataset y datasource!

Espero que me hayas entendido!
Responder Con Cita
  #8  
Antiguo 18-03-2016
Avatar de fredo
fredo fredo is offline
Miembro
 
Registrado: oct 2003
Ubicación: Chile, Valparaiso
Posts: 318
Poder: 21
fredo Va por buen camino
sera que dni_cliente es un string y no le estas ponindo als comillas?????
__________________
^_^

http://stna.cl
Responder Con Cita
  #9  
Antiguo 18-03-2016
GUN10 GUN10 is offline
Miembro
 
Registrado: feb 2010
Posts: 37
Poder: 0
GUN10 Va por buen camino
Hola fredo!

El campo "dni" es tipo INT, aun no logro encontrar la solucion!
Responder Con Cita
  #10  
Antiguo 18-03-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pero sigue el código paso a paso con el depurador, ahí encontrarás el problema.

Casi seguro que está en

Código Delphi [-]
else
begin
  DBGordenesporcliente.Columns[0].Title.Caption:= 'N° Orden';
pero es difícil de entender ese código tan extraño que usas sin tener una visión más amplia del mismo.


Responder Con Cita
  #11  
Antiguo 19-03-2016
Avatar de fredo
fredo fredo is offline
Miembro
 
Registrado: oct 2003
Ubicación: Chile, Valparaiso
Posts: 318
Poder: 21
fredo Va por buen camino
coloca un try copn un except y postea el mensaje de error... aca te ayudamos!
__________________
^_^

http://stna.cl
Responder Con Cita
  #12  
Antiguo 21-03-2016
GUN10 GUN10 is offline
Miembro
 
Registrado: feb 2010
Posts: 37
Poder: 0
GUN10 Va por buen camino
Hola buen dia !

Les comento que solucione el problema de la siguiente manera.

Cuando hago la comparacion

Código Delphi [-]
if (Datos.Qconsultas.RecordCount>0) then

Yo antes tenia que en cualquiera de las dos opciones, que se cumpla o no la condicion, me dibuje el DBGrid, mas que todo que le ponga los titulos a las columnas, para que quede mas vistoso cuando la consulta no arroja resultados.
Bueno lo que hice fue que solo me lo dibuje cuando se cumpla la condicion y funciona correctamente.

Ya no me tira el error
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
Consulta en MySQL lgarcia MySQL 0 11-02-2015 23:58:50
Error al ejecutar consulta a MySQL con Zeos DSK25 Lazarus, FreePascal, Kylix, etc. 3 31-12-2014 10:13:55
consulta mysql con error.. Theluar MySQL 2 27-12-2013 20:16:38
Consulta de MySQL noob MySQL 8 20-10-2008 19:13:00
consulta a mysql jfontane PHP 2 10-06-2003 19:11:57


La franja horaria es GMT +2. Ahora son las 11:25:45.


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