Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-11-2008
loadminds loadminds is offline
Miembro
 
Registrado: nov 2008
Posts: 13
Poder: 0
loadminds Va por buen camino
Cargar combobox con datos de tabla

Hola, soy nuevo por aca y estoy empezando con delphi y bases de datos, tengo una tabla y necesito cargar un combobox con un campo de la tabla, he leido por ahi del DBLookupComboBox pero este necesita que la tabla tenga una primary key definida no?, es decir tengo un campo categoria, y necesitaria agregar de la tabla las categorias sin que se repitan, alguien podria darme una mano? muchas gracias!!
Responder Con Cita
  #2  
Antiguo 18-11-2008
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Wink

Cita:
Empezado por loadminds Ver Mensaje
Hola, soy nuevo por aca y estoy empezando con delphi y bases de datos, tengo una tabla y necesito cargar un combobox con un campo de la tabla, he leido por ahi del DBLookupComboBox pero este necesita que la tabla tenga una primary key definida no?, es decir tengo un campo categoria, y necesitaria agregar de la tabla las categorias sin que se repitan, alguien podria darme una mano? muchas gracias!!

Hola loadminds..

Bienvenido a este Club....

con respecto a lo que preguntas, te puedo dar un ejemplo de un ComboBox...usando delphi 7

Código Delphi [-]

//la sgte es un Query de Interbase donde selecciona los datos de una tabla
     Datos.IBQ_Edit.Close;
     Datos.IBQ_Edit.SQL.Clear;
     Datos.IBQ_Edit.SQL.Add('Select * From "Medida"');
     Datos.IBQ_Edit.Open;
     Datos.IBQ_Edit.First;

     vUni.Clear; // Aquí limpo el ComboBox

     While Not Datos.IBQ_Edit.Eof Do  // Realizar mientras no sea fin de archivo
     Begin
          vUni.Items.Add(Datos.IBQ_Edit['Med_Detalle']);  // Agrego el dato al ComboBox
          Datos.IBQ_Edit.Next;  // Avanzo un registro en la Tabla
     End;

y con respecto al DBLookupComboBox no lo he usado, pero si he utilizado el DBLookupListBox, es muy sencillo de utilizar, pero lo que debes tener en cuenta que no deben existir duplicados, si bien no es por que no lo permite... es por que cuando selecciones un Item no sabrás a que código corresponde realmente...

Salu2
__________________
BlueSteel
Responder Con Cita
  #3  
Antiguo 18-11-2008
loadminds loadminds is offline
Miembro
 
Registrado: nov 2008
Posts: 13
Poder: 0
loadminds Va por buen camino
Smile

gracias bluesteel x la pronta respuesta, acabo de hacerlo andar con un combobox desplazandome en la dbgrid y cargandolo de a uno, funciona bien, pero no logro evitar que muestre los repetidos, hay formas de preguntar si el item ya existe dentro del combobox?el codigo me quedo mas asi:
procedure TForm1.CcatChange(Sender: TObject);
begin
With dbgrid1.datasource.dataset do begin
First;
While not eof do begin
{aca seria posible preguntar si el codigo ya esta en el combobox?}
Ccat.Items.Add(FieldByName('Categoria').AsString);
Next;
end;
end;
end;

funcionar funciono, no se si sea la forma correcta de hacerlo xq estoy arrancando recien, pero el problema es solo mostrar 1 vez cada categoria, es decir no ver repetidos, se me ocurrio preguntar x cada valor que agrego a items, pero no se como hacer la comparacion, Gracias!!
Responder Con Cita
  #4  
Antiguo 18-11-2008
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 loadminds, puedes utilizar la función IndexOf de tu ComBoBox,

Código Delphi [-]
 With dbgrid1.datasource.dataset do begin
  First;
  While not eof do begin
   if Ccat.Items.IndexOf(FieldByName('Categoria').AsString)=-1 then
    Ccat.Items.Add(FieldByName('Categoria').AsString);   
   Next;
  end;

Si recorres el DataSet que esta enlazado a tu DBGrid, también deberías utilizar EnableCOntrol y DisableControl, para que no veas como se mueve entre registros.

Otra cosita estas cargando en el evento OnChange del COmboBox, deberías hacerlo en otro lado, donde solo se ejecute una vez.

También podrías haber hecho otra consulta sobre esa tabla con distinct sobre el campo categoría.

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 18-11-2008
loadminds loadminds is offline
Miembro
 
Registrado: nov 2008
Posts: 13
Poder: 0
loadminds Va por buen camino
mil gracias caro, anduvo joya, cargue en el OnActivate del Form y lo carga al ejecutar, lo unico no noto el movimiento entre registros quizas por que son pocos verdad?y no me quedo muy en claro a que hacias referencia con el distinct, gracias de nuevo!!!
Responder Con Cita
  #6  
Antiguo 18-11-2008
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 loadminds Ver Mensaje
cargue en el OnActivate del Form y lo carga al ejecutar, lo unico no noto el movimiento entre registros quizas por que son pocos verdad?y no me quedo muy en claro a que hacias referencia con el distinct, gracias de nuevo!!!
Yo lo haría en el OnShow del formulario, con el OnActivate, se llenara cada vez que tu formulario se active, no notas el movimiento entre registros porque supongo que lo estas cargando en el OnActivate o el OnShow, ademas como dices son pocos, pero fijate a que registro esta apuntando tu DBGrid seguro que es al ultimo.

Sobre el distinct me refería a hacer otra consulta, en otro Query. La consulta sería "Select distinct categoria from tabla".

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
  #7  
Antiguo 18-11-2008
loadminds loadminds is offline
Miembro
 
Registrado: nov 2008
Posts: 13
Poder: 0
loadminds Va por buen camino
claro claro me queda apuntando al ultimo, voy a probar en el Onshow, muchas gracias!!!,la verdad la mejor de las ondas aca, me veran seguido jej saludos!!
Responder Con Cita
  #8  
Antiguo 18-11-2008
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 loadminds Ver Mensaje
claro claro me queda apuntando al ultimo, voy a probar en el Onshow, muchas gracias!!!
El OnShow no te va a solucionar que no apunte al ultimo registro, es solo para que se ejecute una vez tu codigo. Para que no apunte al ultimo cuando recorres tu DataSet debes utilizar EnableControl y DisableControl.

Código Delphi [-]
  
  With dbgrid1.datasource.dataset do begin
  DisableControls; //Deshabilitamos los controles asociados a ese DataSet 
  First;
  While not eof do begin
   if Ccat.Items.IndexOf(FieldByName('Categoria').AsString)=-1 then
    Ccat.Items.Add(FieldByName('Categoria').AsString);   
   Next;
  end;
  EnableControls;//habilitamos nuevamente los controles

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 18-11-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Ya sé que el código es sólo un ejemplo, no siempre tenemos que seguirlo a pies juntillas, pero como tendemos a hacer copy & paste, mejor así:
Código Delphi [-]
  
  With dbgrid1.datasource.dataset do begin
  try 
    DisableControls; //Deshabilitamos los controles asociados a ese DataSet 
    First;
    While not eof do begin
     if Ccat.Items.IndexOf(FieldByName('Categoria').AsString)=-1 then
      Ccat.Items.Add(FieldByName('Categoria').AsString);   
     Next;
    end;
  finally
    EnableControls;//habilitamos nuevamente los controles
  end;
Si ocurre un fallo al recorrer todos los registros (una excepción) ya no volvería a mostrarse los registros en los controles DBAware. Con un try... finally se asegura el código.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #10  
Antiguo 18-11-2008
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 Lepe Ver Mensaje


Si ocurre un fallo al recorrer todos los registros (una excepción) ya no volvería a mostrarse los registros en los controles DBAware. Con un try... finally se asegura el código.
Yo lo hago con el Try Finally, como dices solo le estaba dando la idea, pero mejor ponerlo completo , ya que el amiguito esta empezado con delphi .

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
  #11  
Antiguo 18-11-2008
loadminds loadminds is offline
Miembro
 
Registrado: nov 2008
Posts: 13
Poder: 0
loadminds Va por buen camino
gracias x la data lepe, saludos!!
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
Cargar datos en una tabla Drake PHP 2 04-06-2007 15:05:35
llenar un combobox con datos de una tabla edelphi Conexión con bases de datos 4 28-02-2007 12:06:37
como pasar los datos de un combobox a una tabla Goyo OOP 0 24-01-2007 19:59:50
pasar datos de la tabla a un combobox todook Conexión con bases de datos 5 29-11-2006 11:44:26
cargar datos a una tabla en Interbase saul saldaña Conexión con bases de datos 2 29-06-2004 14:13:09


La franja horaria es GMT +2. Ahora son las 20:54:53.


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