Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-01-2012
Vales08 Vales08 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 133
Poder: 14
Vales08 Va por buen camino
Problemas con el codigo SQL

Tengo el siguiente código SQL
Código SQL [-]
DM.Q_loc.SQL.Clear;
DM.Q_loc.SQL.Add('select LOCALIDAD from LOCALIDADES GROUP BY LOCALIDAD');
DM.Q_loc.Open;
while not DM.Q_loc.Eof do
  begin
    loc_cons_inst.Items.Add(DM.Q_loc.FieldByName('LOCALIDAD').AsString);
    DM.Q_loc.Next;
  end;

La cuestion es que me salta error, y es porque siempre me solicita los otros campos que faltan de la tabla, como el ID_LOC, CODIGO_POSTAL, PROVINCIA..
Entonces no me queda otra que poner
Código SQL [-]
...
DM.Q_loc.SQL.Add('select * from LOCALIDADES');
...

Pero yo necesito solamente LOCALIDAD para poder agrupar por ese mismo campo, entonces en el combobox no se me repiten los datos..

Uso Delphi7, sql manager y motor de base de datos firebird..
Espero puedan ayudarme.. Desde ya muchas gracias..
Responder Con Cita
  #2  
Antiguo 12-01-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
A ver asi:
Código Delphi [-]
DM.Q_loc.SQL.Clear;
DM.Q_loc.SQL.Add('select LOCALIDAD from LOCALIDADES ORDER BY LOCALIDAD');
DM.Q_loc.Open;
while not DM.Q_loc.Eof do
  begin
    loc_cons_inst.Items.Add(DM.Q_loc.FieldByName('LOCALIDAD').AsString);
    DM.Q_loc.Next;
  end;
o asi:
Código Delphi [-]
DM.Q_loc.SQL.Clear;
// todos los campos en el group By
DM.Q_loc.SQL.Add('select LOCALIDAD from LOCALIDADES GROUP BY ID_LOC, CODIGO_POSTAL, PROVINCIA, LOCALIDAD');
DM.Q_loc.Open;
while not DM.Q_loc.Eof do
  begin
    loc_cons_inst.Items.Add(DM.Q_loc.FieldByName('LOCALIDAD').AsString);
    DM.Q_loc.Next;
  end;
Saludos
__________________
Siempre Novato
Responder Con Cita
  #3  
Antiguo 12-01-2012
Vales08 Vales08 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 133
Poder: 14
Vales08 Va por buen camino
Muchas gracias por contestar, pero sigue sin funcionar.. Te pongo el error que me da..

Cita:
---------------------------
Debugger Exception Notification
---------------------------
Project Project_tesis.exe raised exception class EDatabaseError with message 'Q_loc: Field 'ID_LOC' not found'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
Y este error salta con cada Campo de la tabla.. Por eso no me queda otra que seleccionar todos (select *).
Responder Con Cita
  #4  
Antiguo 12-01-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Segura que no va este ?:
Código Delphi [-]
DM.Q_loc.SQL.Clear;
DM.Q_loc.SQL.Add('select LOCALIDAD from LOCALIDADES ORDER BY LOCALIDAD');
DM.Q_loc.Open;
while not DM.Q_loc.Eof do
  begin
    loc_cons_inst.Items.Add(DM.Q_loc.FieldByName('LOCALIDAD').AsString);
    DM.Q_loc.Next;
  end;
Prueba este:
Código Delphi [-]
DM.Q_loc.SQL.Clear;
DM.Q_loc.SQL.Add('select LOCALIDAD from LOCALIDADES');
DM.Q_loc.Open;
while not DM.Q_loc.Eof do
  begin
    loc_cons_inst.Items.Add(DM.Q_loc.FieldByName('LOCALIDAD').AsString);
    DM.Q_loc.Next;
  end;
Saludos
__________________
Siempre Novato
Responder Con Cita
  #5  
Antiguo 12-01-2012
Vales08 Vales08 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 133
Poder: 14
Vales08 Va por buen camino
Me sigue dando el mismo error, lo que sucede es que yo no necesito ordenar, necesito si o si agrupar para que no me repita los campos sino me los muestra 2 veces...
Y realizandolo de esta forma tampoco me funciona

Código Delphi [-]
DM.Q_loc.SQL.Clear;
DM.Q_loc.SQL.Add('select LOCALIDAD from LOCALIDADES');
DM.Q_loc.Open;
while not DM.Q_loc.Eof do
  begin
    loc_cons_inst.Items.Add(DM.Q_loc.FieldByName('LOCALIDAD').AsString);
    DM.Q_loc.Next;
  end;

La verdad que no se porque me hace eso, porque me tendria que permitir seleccionar de a un campo solo, sin necesidad de seleccionar todo..
Responder Con Cita
  #6  
Antiguo 12-01-2012
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 Vales.

Te hago una consulta: ¿ Agregaste campos persistentes ? Es decir, ¿ Tenés DBEdits, etc., relacionados con un 'SELECT * FROM LOCALIDADES' realizado sobre el TIBQuery ?

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 12-01-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
a la brava
Código Delphi [-]
DM.Q_loc.SQL.Clear;
DM.Q_loc.SQL.Add('select DISTINCT LOCALIDAD from LOCALIDADES');
DM.Q_loc.Open;
while not DM.Q_loc.Eof do
  begin
    loc_cons_inst.Items.Add(DM.Q_loc.FieldByName('LOCALIDAD').AsString);
    DM.Q_loc.Next;
  end;
Saludos
__________________
Siempre Novato
Responder Con Cita
  #8  
Antiguo 12-01-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Casi me la juego :

Código Delphi [-]
DM.Q_loc.SQL.text:= 'select DISTINCT LOCALIDAD from LOCALIDADES';
DM.Q_loc.Open;
while not DM.Q_loc.Eof do
  begin
    loc_cons_inst.Items.Add(DM.Q_loc.FieldByName('LOCALIDAD').AsString);
    DM.Q_loc.Next;
  end;
Saludos
__________________
Siempre Novato
Responder Con Cita
  #9  
Antiguo 12-01-2012
Vales08 Vales08 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 133
Poder: 14
Vales08 Va por buen camino
Tengo DBLookupComboBox pero están conectados directamente a un DataSet, el cual en el select SQL, tiene seleccionado todos los campos de Localidad.
Sera por eso??
Responder Con Cita
  #10  
Antiguo 12-01-2012
Vales08 Vales08 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 133
Poder: 14
Vales08 Va por buen camino
Caral lo probe al codigo pero sigue sin funcionar, lo mismo me gustria saber que funcion cumple el DISTINCT..
Responder Con Cita
  #11  
Antiguo 12-01-2012
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 Vales.
Cita:
Tengo DBLookupComboBox pero están conectados directamente a un DataSet, el cual en el select SQL, tiene seleccionado todos los campos de Localidad.
Sera por eso??
Si, creo que es eso.

Probá algo como:
Código Delphi [-]
procedure TForm1.btnCargarClick(Sender: TObject);
begin
  with TIBQuery.Create(nil) do
  try
    Database:= DM.IBDatabase1;
    Transaction:= DM.IBTransaction1;
    Close;
    SQL.Text:= 'SELECT LOCALIDAD FROM LOCALIDADES ORDER BY LOCALIDAD';
    Open;
    while not Eof do
    begin
      ComboBox1.Items.Add(FieldByName('LOCALIDAD').AsString);
      Next
    end;
    Close
  finally
    Free
  end;
end;
Lógicamente tendrías que cambiar los nombres de IBDatabase1, IBTransaction1, ComboBox1, etc. por los que correspondan.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #12  
Antiguo 12-01-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Estoy seguro que tiene campos persistentes segun el error:
Cita:
Project Project_tesis.exe raised exception class EDatabaseError with message 'Q_loc: Field 'ID_LOC' not found'. Process stopped. Use Step or Run to continue.
Dale doble click al Query y quita todos los campos que estan en esa pantalla.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #13  
Antiguo 12-01-2012
Vales08 Vales08 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 133
Poder: 14
Vales08 Va por buen camino
Ecfisa me salta el siguiente mensaje

Cita:
---------------------------
Debugger Exception Notification
---------------------------
Project Project_tesis.exe raised exception class EIBClientError with message 'Dataset open'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
Responder Con Cita
  #14  
Antiguo 12-01-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Abres el query antes de darle la sentencia sql o hay otro abierto cuando no debe estarlo.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #15  
Antiguo 12-01-2012
Vales08 Vales08 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 133
Poder: 14
Vales08 Va por buen camino
El unico Query que esta abierto es el que tengo en el DataModule y a lo que entiendo, tengo que cerrar ese query para poder trabajar con el que estoy creando, pero si lo cierro antes de esto
Código Delphi [-]
with TIBQuery.Create(nil) do
  try
    Database:= DM.IBDatabase1;
    Transaction:= DM.IBTransaction1;
    Close;
    SQL.Text:= 'SELECT LOCALIDAD FROM LOCALIDADES ORDER BY LOCALIDAD';
    Open;
    while not Eof do
    begin
      ComboBox1.Items.Add(FieldByName('LOCALIDAD').AsString);
      Next
    end;
    Close
  finally
    Free
  end;

Me salta el siguiente error:
Cita:
---------------------------
Debugger Exception Notification
---------------------------
Project Project_tesis.exe raised exception class EAccessViolation with message 'Access violation at address 004A6312 in module 'Project_tesis.exe'. Read of address 00000000'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
Responder Con Cita
  #16  
Antiguo 13-01-2012
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 Vales.

Vamos a simplificar... poné un TIBQuery desde la pestaña Interbase, relacionalo con el TIBDatabase y hacé de este modo:

Código Delphi [-]
procedure TForm1.btnCargarClick(Sender: TObject);
begin
  with IBQuery2 do
  try
    Close;
    SQL.Text:= 'SELECT LOCALIDAD FROM LOCALIDADES ORDER BY LOCALIDAD';
    Open;
    while not Eof do
    begin
      ComboBox1.Items.Add(FieldByName('LOCALIDAD').AsString);
      Next
    end;
    Close
  finally
    Free
  end;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #17  
Antiguo 13-01-2012
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
Perdón Vales, me confundí al copiar/pegar código.

Debería ser:
Código Delphi [-]
procedure TForm1.btnCargarClick(Sender: TObject);
begin
  with IBQuery2 do
  begin
    Close;
    SQL.Text:= 'SELECT LOCALIDAD FROM CIUDADES ORDER BY LOCALIDAD';
    Open;
    while not Eof do
    begin
      ComboBox1.Items.Add(FieldByName('LOCALIDAD').AsString);
      Next
    end;
    Close
  end;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #18  
Antiguo 13-01-2012
Vales08 Vales08 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 133
Poder: 14
Vales08 Va por buen camino
El error no salta mas, lo único es que me muestra los registros repetidos 2 veces... y agrupando tampoco lo hace.. pero por lo menos no salta el error..
Responder Con Cita
  #19  
Antiguo 13-01-2012
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 Vales08 Ver Mensaje
El error no salta mas, lo único es que me muestra los registros repetidos 2 veces... y agrupando tampoco lo hace.. pero por lo menos no salta el error..
Hola Vales.

La única forma de que suceda eso con el código anterior es que, o estén duplicadas las localidades en la tabla o que no estés vaciando el TComboBox y se realice la carga dos veces...

Probá de este modo:
Código Delphi [-]
...
  with IBQuery2 do
  begin
    Close;
    SQL.Text:= 'SELECT LOCALIDAD FROM CIUDADES ORDER BY LOCALIDAD';
    Open;
    ComboBox1.Clear;  // <-
    while not Eof do
    begin
      ComboBox1.Items.Add(FieldByName('LOCALIDAD').AsString);
      Next
    end;
    Close
  end;
...
Si aún así siguen apareciendo los registros repetidos utilizá el IBExpert (o el que uses) y ejecutá la sentencia
Código SQL [-]
SELECT LOCALIDAD FROM CIUDADES ORDER BY LOCALIDAD
para verificar que el campo LOCALIDAD no esté repetido.


Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #20  
Antiguo 13-01-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
o:

Código Delphi [-]
with IBQuery2 do
  begin
    Close;
    SQL.Text:= 'SELECT DISTINCT LOCALIDAD FROM CIUDADES ORDER BY LOCALIDAD';
    Open;
    ComboBox1.Clear;  // <-
    while not Eof do
    begin
      ComboBox1.Items.Add(FieldByName('LOCALIDAD').AsString);
      Next
    end;
    Close
  end;

Me niego a creer que entre un Maestro y este novato no podamos solucionarlo......
Saludos
__________________
Siempre Novato
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Problemas con codigo en delphi Nelly Varios 3 07-11-2005 22:08:09
Problemas de impresión de código de barras burasu Impresión 5 14-09-2005 09:11:38
Problemas con el Lector de Codigo de Barra FM73 Varios 2 03-06-2005 19:44:39
Problemas con un codigo fled SQL 2 15-02-2004 10:50:05
problemas al pasar un código SQL al selectSQL Giniromero Conexión con bases de datos 11 28-10-2003 19:36:19


La franja horaria es GMT +2. Ahora son las 23:55:59.


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