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 29-04-2011
elturu15 elturu15 is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 37
Poder: 0
elturu15 Va por buen camino
PRoblemas con Between

Hola a todos...tengo una problema....tengo que hacer un listado entre dos claves ingresadas por el usuario, las cuales se muestran en un ComboBox...y en la consulta uso between..esta bien usar eso?..y el problema que tengo es que cuando ejecute el progam y preciono LIstar para quenerar el listado me salta un error que dice "Clave1 no tiene un valor predeterminado" no se cual es el error porque en el codigo que esta mas abajo, yo le asigno un valor....CUAL ES EL PROBLEMA?? AYUDAAAA
GRACIAS


Este es el Codigo parte del codigo donde me tira el error:

Código Delphi [-]
 Clave:=integer(ComboBox1.Items.Objects[ComboBox1.ItemIndex]);
 Clave1:=integer(ComboBox2.Items.Objects[ComboBox2.ItemIndex]);
 ADOQuery1.Close;
 ADOQuery1.SQL.Clear;
 ADOQuery1.SQL.Text:='SELECT Provincias.Clave,  Provincias.Nombre,Ciudades.Codigo_Postal, Ciudades.Nombre_Ciudad  '+
'FROM Provincias LEFT JOIN Ciudades ON Provincias.Clave = Ciudades.Clave_Provincia '+
'WHERE clave between clave and clave1 order by Clave';
 ADOQuery1.Open;
 ADOQuery1.Active:=true;

Última edición por Caro fecha: 29-04-2011 a las 16:27:32.
Responder Con Cita
  #2  
Antiguo 29-04-2011
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola elturu15 y bienvenido a clubdelphi, te da el error porque le estas dando como valor clave y clave1 y no así lo que tienes en tus variables.

Código Delphi [-]
  Clave:=integer(ComboBox1.Items.Objects[ComboBox1.ItemIndex]);
  Clave1:=integer(ComboBox2.Items.Objects[ComboBox2.ItemIndex]);

  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Text:='SELECT P.Clave, P.Nombre, C.Codigo_Postal, C.Nombre_Ciudad '+
                      'FROM Provincias P LEFT JOIN Ciudades C ON P.Clave = C.Clave_Provincia '+
                      'WHERE P.clave between '+IntToStr(clave)+' and '+IntToStr(clave1)+' order by Clave';
  ADOQuery1.Open;

Solo debes utilizar uno de los dos para ejecutar la consulta (Open o Active=True). Tambien puedes pasar valores a tu consulta utilizando parámetros.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #3  
Antiguo 29-04-2011
elturu15 elturu15 is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 37
Poder: 0
elturu15 Va por buen camino
Between

Mucjas gracias solucione el error, pero el problema que tengo ahora es que siempre me lista el Primero nada mas..
Código Delphi [-]
Clave:=integer(ComboBox1.Items.Objects[ComboBox1.ItemIndex]);
Clave1:=integer(ComboBox2.Items.Objects[ComboBox2.ItemIndex]);
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:='SELECT Provincias.Clave,  Provincias.Nombre,Ciudades.Codigo_Postal, Ciudades.Nombre_Ciudad  FROM Provincias LEFT JOIN Ciudades ON Provincias.Clave = Ciudades.Clave_Provincia WHERE clave between '+IntToStr(clave)+' and '+IntToStr(clave1)+' order by Clave';
 ADOQuery1.Open;
 ListBox1.Clear;
    While not ADOQuery1.EOF do
     Begin
      Clave2:=ADOQuery1.Fields[0].AsInteger;
      Nombre:=ADOQuery1.Fields[1].AsString;
      CP:=ADOQuery1.Fields[2].AsString;
      NombreCiudad:=ADOQuery1.Fields[3].AsString;
      ListBox1.Items.Add('Clave :' +  inttostr(Clave2));
      ListBox1.Items.Add('Nombre :' + Nombre);
      ListBox1.Items.Add('codigo_postal : '+  CP);
      ListBox1.Items.Add('Nombre_Ciudad :' + NombreCiudad);
      ListBox1.Items.Add('----------------------------');
      ADOQuery1.Next;
      ADOQuery1.ExecSQL;
     End

Esta bien el While?

Última edición por ecfisa fecha: 29-04-2011 a las 16:51:52. Razón: Etiquetas [DELPHI] y [/DELPHI]
Responder Con Cita
  #4  
Antiguo 29-04-2011
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola de nuevo, esta linea esta demas dentro del While.

Código Delphi [-]
 ADOQuery1.ExecSQL;

te quedaría así:

Código Delphi [-]
    ............................................. 
    ListBox1.Clear;
    AdoQuery1.First; // nos posicionamos en el primer registro
    While not ADOQuery1.EOF do
     Begin
      Clave2:=ADOQuery1.Fields[0].AsInteger;
      Nombre:=ADOQuery1.Fields[1].AsString;
      CP:=ADOQuery1.Fields[2].AsString;
      NombreCiudad:=ADOQuery1.Fields[3].AsString;
      ListBox1.Items.Add('Clave :' +  inttostr(Clave2));
      ListBox1.Items.Add('Nombre :' + Nombre);
      ListBox1.Items.Add('codigo_postal : '+  CP);
      ListBox1.Items.Add('Nombre_Ciudad :' + NombreCiudad);
      ListBox1.Items.Add('----------------------------');
      ADOQuery1.Next;
     End

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #5  
Antiguo 29-04-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

En principio quitá esta línea:
Código Delphi [-]
 ADOQuery1.ExecSQL;

Te debería quedar algo como:
Código Delphi [-]
 ADOQuery1.Close;
 ADOQuery1.SQL.Clear;
 ADOQuery1.SQL.Text:='SELECT Provincias.Clave,  Provincias.Nombre,Ciudades.Codigo_Postal, Ciudades.Nombre_Ciudad  FROM Provincias LEFT JOIN Ciudades ON Provincias.Clave = Ciudades.Clave_Provincia WHERE clave between '+IntToStr(clave)+' and '+IntToStr(clave1)+' order by Clave';
 ADOQuery1.Open;
 ListBox1.Clear;
 while not ADOQuery1.EOF do
 begin
   ListBox1.Items.Add('Clave :' +  inttostr(ADOQuery1.Fields[0].AsInteger));
   ListBox1.Items.Add('Nombre :' + ADOQuery1.Fields[1].AsString);
   ListBox1.Items.Add('codigo_postal : '+ ADOQuery1.Fields[2].AsString);
   ListBox1.Items.Add('Nombre_Ciudad :' + ADOQuery1.Fields[3].AsString);
   ListBox1.Items.Add('----------------------------');
   ADOQuery1.Next;
 end

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 29-04-2011
elturu15 elturu15 is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 37
Poder: 0
elturu15 Va por buen camino
Between

Hola otra vez..lamento informarte que sigue sin funcionar.. me lista siempre el primero,,, este es el codigo que tengo
Código Delphi [-]
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:='SELECT P.Clave, P.Nombre, C.Codigo_Postal,  C.Nombre_Ciudad '+
                     'FROM Provincias P LEFT JOIN Ciudades C ON P.Clave = C.Clave_Provincia '+
                     'WHERE P.clave between '+IntToStr(clave)+' and '+IntToStr(clave1)+' order by Clave';
ADOQuery1.Open;
ListBox1.Clear;
AdoQuery1.First; // nos posicionamos en el primer registro
ADOQuery1.Active:=true;
    While not ADOQuery1.EOF do
     Begin
      Clave2:=ADOQuery1.Fields[0].AsInteger;
      Nombre:=ADOQuery1.Fields[1].AsString;
      CP:=ADOQuery1.Fields[2].AsString;
      NombreCiudad:=ADOQuery1.Fields[3].AsString;
      ListBox1.Items.Add('Clave :' +  inttostr(Clave2));
      ListBox1.Items.Add('Nombre :' + Nombre);
      ListBox1.Items.Add('codigo_postal : '+  CP);
      ListBox1.Items.Add('Nombre_Ciudad :' + NombreCiudad);
      ListBox1.Items.Add('----------------------------');
      ADOQuery1.Next;
     End
esta bien esto? ADOQuery1.Active:=true;


Mil disculpas por molestarte

Última edición por ecfisa fecha: 29-04-2011 a las 17:20:38. Razón: Etiquetas [DELPHI] y [/DELPHI]
Responder Con Cita
  #7  
Antiguo 29-04-2011
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por elturu15 Ver Mensaje
esta bien esto? ADOQuery1.Active:=true;
No es necesario ejecutar la consulta dos veces, tanto el open como el active=true, ejecutan la consulta que esta dentro de tu DataSet (AdoQuery), solo debes escoger uno de ellos.

Puede ser que la consulta solo te este devolviendo un solo registro, prueba de enlazar tu consulta a un dbgrid para que veas el resultado.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #8  
Antiguo 29-04-2011
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
O también puedes probar esto:

Código Delphi [-]
...............................
'WHERE P.clave between '+IntToStr(clave)+' and '+IntToStr(clave1)+' order by Clave';
ADOQuery1.Open;
showmessage(IntToStr(AdoQuery1.RecordCount));
.........................

y nos dices el resultado que te salga. No te olvides de leer nuestra guia de estilo por favor y utiliza etiquetas en tu codigo para que se vea mejor, en este caso [ delphi]tu codigo[ /delphi] sin el espacio, también los puedes encontrar en editor.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #9  
Antiguo 29-04-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Y a modo de complemento de lo que ya te ha sugerido Caro sobre la lectura de la guia de estilo y las etiquetas, el amigo Casimiro,
ha echo un [ gráfico ] que explica cláramente el uso de estas últimas.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #10  
Antiguo 29-04-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por ecfisa Ver Mensaje
Hola. Y a modo de complemento de lo que ya te ha sugerido Caro sobre la lectura de la guia de estilo y las etiquetas, el amigo Casimiro, ha echo un [ gráfico ] que explica cláramente el uso de estas últimas.
Un saludo.
Bueno, ese gráfico se lo he "robado" a Neftalí




.
Responder Con Cita
  #11  
Antiguo 29-04-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Bueno, ese gráfico se lo he "robado" a Neftalí




.

Seria bueno colocar esta imagen en la guia de estilo
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #12  
Antiguo 29-04-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Bueno, ese gráfico se lo he "robado" a Neftalí
Bueno entonces arréglatelas con sus abogados...

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 29-04-2011 a las 18:36:39.
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


La franja horaria es GMT +2. Ahora son las 19:25:48.


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