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 29-12-2011
y_a_p y_a_p is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 37
Poder: 0
y_a_p Va por buen camino
Pasar campos de la tabla localidad a un combobox de el form paciente...

Hola a todos, estoy haciendo un sistema para un consultorio pediatrico con delphi 7, BD SQL Manager 2008 y motor Firebird, en la parte de la consulta necesito pasar a un combobox el campo de una tabla ajena a paciente, va en realidad estan relacionadas, la tabla es localidad y lo logre, pero los campos se repiten por lo tantome han proporcionado aqui una ayuda, la cual agradezco q dice q tengo q agrupar los campos por el nombre de dicha localidad pero me tira un error de id, el cod. es el siguiente:
Código Delphi [-]
procedure TPacientes.ConsultaShow(Sender: TObject);
begin
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  // a lo que entiendo es mientras el query no haya llegado al ultimo registro
  begin
    loc_cons_pac.Items.Add(DM.Q_loc.Fields[2].Text); //le asigna a items del combo el texto que existe en el campo 2 (en ntro caso, nom_localidad esta en posicion 2, xq id_loc(0), cod_postal(1) fijate en BD)
    DM.Q_loc.Next; // pasa al siguiente registro
  end;
DMata_module.
Q_loc:es el query de la tabla localidad.

El error me tira cuando abro la consulta...

Agradezco su ayuda!!!, Gracias...
Responder Con Cita
  #2  
Antiguo 29-12-2011
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Código Delphi [-]
procedure TPacientes.ConsultaShow(Sender: TObject); begin
DM.Q_loc.Close;
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  // a lo que entiendo es mientras el query no haya llegado al ultimo registro
   begin     
loc_cons_pac.Items.Add(DM.Q_loc.Fields[2].Text); //le asigna a items del combo el texto que existe en el campo 2 (en ntro caso, nom_localidad esta en posicion 2, xq id_loc(0), cod_postal(1) fijate en BD)     DM.Q_loc.Next; // pasa al siguiente registro
   end;

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 29-12-2011
y_a_p y_a_p is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 37
Poder: 0
y_a_p Va por buen camino
Agradezco mucho tu ayuda, pero he probado el código q me mandaste y me sigue tirando el error del id en la linea en la q agrupo, me podrías proporcionar alguna otra solución, muchas gracias!!!
Responder Con Cita
  #4  
Antiguo 29-12-2011
Avatar de Cañones
Cañones Cañones is offline
Miembro
 
Registrado: ene 2007
Ubicación: La Paz Entre Ríos
Posts: 354
Poder: 18
Cañones Va por buen camino
Para mi el error está en
Fields[2] y según esa consulta sebería ser Fields[0]

Saludos.
Responder Con Cita
  #5  
Antiguo 29-12-2011
y_a_p y_a_p is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 37
Poder: 0
y_a_p Va por buen camino
Cool

No, disculpa te corrija, el 2 es para indicarle q campo de la BD se le asigna al combobox, se considera al primer campo de la DB=0, el primero=1 y asi sucesivamente, en mi caso quiero mostrar el nombre de la localidad q vendría a ser el campo nº 2, igual agradezco tu predisposición.
El error radica cuando agrupo, hago el seguimiento y me lo marca ahí...
Responder Con Cita
  #6  
Antiguo 29-12-2011
Avatar de Cañones
Cañones Cañones is offline
Miembro
 
Registrado: ene 2007
Ubicación: La Paz Entre Ríos
Posts: 354
Poder: 18
Cañones Va por buen camino
Esa es una consulta de ejemplo nomás?
Sin agrupar funciona?
Responder Con Cita
  #7  
Antiguo 29-12-2011
y_a_p y_a_p is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 37
Poder: 0
y_a_p Va por buen camino
Si, funciona... Es mas la consulta sin agrupar funciona bien si selecciono todos los campos de localidad y yo quiero buscar solo por el nombre para poder agruparlo por q sino me muestra los nombres pero repetidos...
Responder Con Cita
  #8  
Antiguo 30-12-2011
Avatar de Cañones
Cañones Cañones is offline
Miembro
 
Registrado: ene 2007
Ubicación: La Paz Entre Ríos
Posts: 354
Poder: 18
Cañones Va por buen camino
Con la consulta

Código Delphi [-]
DM.Q_loc.SQL.Add('select LOCALIDAD from LOCALIDADES GROUP BY LOCALIDAD');

y Fields[0] no funciona?
Responder Con Cita
  #9  
Antiguo 30-12-2011
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
A ver... aclaremos algunas cosas:
1) La consulta de ejemplo solamente está mostrando UN CAMPO por lo que en Fields[] sólo es posible el índice 0, cualquier otro debería arrojar una excepción porque no hay más campos que mostrar.

2) Confundes los conceptos CAMPOS con REGISTROS. Repasa la teoría de base de datos. Tu dices que la consulta te arroja muchos campos... ¡Wrong! querrás decir que te arroja varios registros. ¿Repasemos, dale? registros = filas de la tabla, campos = columnas de la tabla.

3) Dices que te arroja un error. ¿Porqué no te tomas la molestias de decirnos el error textual? ¿O pretendes que adivinemos? Navidad ya pasó por lo que no le puedo pedir a Papá Noel que me traiga de regalo una bola de cristal nueva... Lástima, tendrás que esperar a Reyes Magos

3) ¿Group by? ¿Localidades duplicadas? ¡WTF! Si a cada Localidad le corresponde un PK ¿Que sentido tiene agrupar? Digo no... Una tabla Localidad debería ser muy simple, algo como esto seguramente:

PK - Nombre
1 - Localidad1
2 - Localidad2
...
N - Localidadn

Por tanto no debería haber localidad duplicada (no al menos en el valor PK), el contexto está sugiriendo que no debería haberla. Si la idea es tener en una tabla la lista de localidades...

Agrupar por algo que no admite repetidos, es redundante. Debería bastar con un

Código SQL [-]
SELECT LOCALIDAD FROM LOCALIDADES ORDER BY 1 ASC

Para tener dicho listado.

Si nos explicas mejor en que consiste esa tabla quizá podríamos pillar al toro. ¿Digo no?

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #10  
Antiguo 30-12-2011
Avatar de Cañones
Cañones Cañones is offline
Miembro
 
Registrado: ene 2007
Ubicación: La Paz Entre Ríos
Posts: 354
Poder: 18
Cañones Va por buen camino
Cita:
Empezado por y_a_p Ver Mensaje
Si, funciona... Es mas la consulta sin agrupar funciona bien si selecciono todos los campos de localidad y yo quiero buscar solo por el nombre para poder agruparlo por q sino me muestra los nombres pero repetidos...
Ahora que estoy en casa y con más tiempo....
Creo entender que estás confundido en la parte de los campos de la tabla y los campos del dataset.
La tabla de la db puede tener varios campos. IDLOCALIDAD, NOMBRE_LOCALIDAD, IDPROVINCIA, NRO_CODIGOPOSTAL .....
Pero la consulta del dataset solo trae un campo, LOCALIDAD por lo que Fields[] solo puede ser 0.
La prueba que haces y que funciona, es porque el dataset trae al menos 3 o mas campos, entonces Fields[2] te muestra lo que está en la tercer columna.
Creo que antes de decir que Fields[0] no funciona, tenías que probar y si de hecho no funciona ahí si repreguntar.
Tampoco es tan grave, el tiempo te va a forjar la paciencia que hace falta para programar, y por otro lado si en el club no se encuentra una solución a algo, es porque no existe.
Si estás trabajando con FireBird y dbx o ibx te puedo pasar unos apuntes que te van a ayudar.

Por otro lado y fuera del tema del tema principal, las localidades no se deberían repetir a menos que se llamen igual pero pertenezcan a distintas provincias/estado ... y si así lo fuese no se deberían agrupar tampoco.
No se si tu idea es programar todo a mano por el tipo de consulta, pero hay componentes que si le indicas el dataset, cargan los datos automativamente, pero también es otro tema.

Saludos.
Responder Con Cita
  #11  
Antiguo 30-12-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 y_a_p Ver Mensaje
No, disculpa te corrija, el 2 es para indicarle q campo de la BD se le asigna al combobox, se considera al primer campo de la DB=0, el primero=1 y asi sucesivamente, en mi caso quiero mostrar el nombre de la localidad q vendría a ser el campo nº 2, igual agradezco tu predisposición.
El error radica cuando agrupo, hago el seguimiento y me lo marca ahí...
Hola.

Me parece más claro utilizar la función FieldByName en lugar de la propiedad vectorial Fields. No existe lugar a dudas de que campo estamos hablando si la instrucción se escribe:
Código Delphi [-]
  loc_cons_pac.Items.Add(DM.Q_loc.FieldByName('LOCALIDAD').AsString);
Como ya te han explicado, hay que usar con cuidado la propiedad Fields, ya que si alteras el órden o el número de los campos en una consulta sin tomarlo en cuenta, puede devolverte un valor inesperado.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #12  
Antiguo 31-12-2011
Avatar de Cañones
Cañones Cañones is offline
Miembro
 
Registrado: ene 2007
Ubicación: La Paz Entre Ríos
Posts: 354
Poder: 18
Cañones Va por buen camino
Usar FieldByName sería lo correcto, pero no creo que estén declarados los campos.
Responder Con Cita
  #13  
Antiguo 12-01-2012
y_a_p y_a_p is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 37
Poder: 0
y_a_p Va por buen camino
Agradezco mucho su colaboración a todos, y quiero comentarles q ya probe con todas las opciones q me dijeron, pero me sigue tirando el mismo error, para ser más clara el error me tira cuando en la linea:
Código Delphi [-]
DM.Q_loc.SQL.Add('select LOCALIDAD from LOCALIDADES');
De lo contrario si yo modifico esa linea de código a:
Código Delphi [-]
DM.Q_loc.SQL.Add('select * from LOCALIDADES');
No me lo tira más, pero me muestra las localidades agrupadas, para q se entienda mejor hago esto:
Código Delphi [-]
begin
DM.Q_loc.Close;
DM.Q_loc.SQL.Clear;
DM.Q_loc.SQL.Add('select * from LOCALIDADES');
DM.Q_loc.Open;
while not DM.Q_loc.Eof do  
begin
loc_cons_pac.Items.Add(DM.Q_loc.FieldByName('LOCALIDAD').AsString); 
DM.Q_loc.Next;
end;
Que debería hacer para q no me las muestre más repetidas... ya q no puedo agruparlas porq no puedo seleccionarlas por localidad, desde ya muchas gracias!!!...
Responder Con Cita
  #14  
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
Cita:
Empezado por y_a_p Ver Mensaje
Agradezco mucho su colaboración a todos, y quiero comentarles q ya probe con todas las opciones q me dijeron, pero me sigue tirando el mismo error
Hola y_a_p.

Ayudaría mucho que nos pusieses literalmente el mensaje de error que te arroja. (Ctr+C para copiarlo y Ctrl+V para pegarlo aquí en el mensaje)

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #15  
Antiguo 12-01-2012
y_a_p y_a_p is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 37
Poder: 0
y_a_p Va por buen camino
---------------------------
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
---------------------------
Responder Con Cita
  #16  
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
Cita:
Empezado por y_a_p Ver Mensaje
---------------------------
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
---------------------------
Hola y_a_p.

Revisá si te está pasando algo parecido a esto.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #17  
Antiguo 12-01-2012
y_a_p y_a_p is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 37
Poder: 0
y_a_p Va por buen camino
Si, estamos haciendo lo mismo porq somos compañeras de tesis...
Responder Con Cita
  #18  
Antiguo 12-01-2012
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Cita:
Empezado por y_a_p Ver Mensaje
---------------------------
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.
---------------------------
SUPONGO: El componente de conexión está buscando el campo ID_LOC, el cual no estás trayendo con la consulta:
Código Delphi [-]
DM.Q_loc.SQL.Add('select LOCALIDAD from LOCALIDADES');

Para solucionarlo tienes que traer el campo necesario desde la consulta con una sql como esta:
Código Delphi [-]
DM.Q_loc.SQL.Add('select ID_LOC, LOCALIDAD from LOCALIDADES');

Este tipo de problemas es común si tienes una relación maestro detalle.

Por otro lado, a cómo te ha apuntado ya antes el compañero Delphius, no puedes hacer una agrupación así por así. El código SQL que tenías (select LOCALIDAD from LOCALIDADES GROUP BY LOCALIDAD) -por lo menos en Firebird- no te funcionará. Necesitas un campo "agregador/agrupador" que no existe en la consulta citada.

Para obtener una única copia de un valor repetido o no repetido, utiliza la clausula "DISTINCT" de SQL. Ya que no has mencionado el motor de base de datos que estás utilizando, desconozco si está soportada esa clausula. Lo más probable es que sí porque es muy común. Entonces tu consulta debería quedar así:
Código Delphi [-]
DM.Q_loc.SQL.Add('select distinct ID_LOC, LOCALIDAD from LOCALIDADES');

Ya que estás utilizando el valor del campo ID_LOC para no sé que, ignoro las consecuencias que pueda tener la clausula DISTINCT en el comportamiento de tu aplicación.

Saludos,
Chris.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #19  
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
Cita:
Empezado por y_a_p Ver Mensaje
Si, estamos haciendo lo mismo porq somos compañeras de tesis...
Eso supuse y por eso es que te mencioné el enlace, allí se lo está tratando y ya hay varias sugerencias.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #20  
Antiguo 14-01-2012
y_a_p y_a_p is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 37
Poder: 0
y_a_p Va por buen camino
Bueno muchas gracias y ya con mi compañera lo estamos estudiando en conjunto, gracias!!!
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
Llenar un combobox con los campos de una tabla enecumene Conexión con bases de datos 6 07-03-2007 21:42:28
como pasar los datos de un combobox a una tabla Goyo OOP 0 24-01-2007 19:59:50
como pasar los datos de un combobox a una tabla Goyo OOP 2 08-01-2007 23:21:22
como pasar los datos de un combobox a una tabla Goyo OOP 0 21-12-2006 21:13:49
pasar datos de la tabla a un combobox todook Conexión con bases de datos 5 29-11-2006 11:44:26


La franja horaria es GMT +2. Ahora son las 00:49:31.


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