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 09-07-2007
ronimaxh ronimaxh is offline
Miembro
 
Registrado: jun 2003
Ubicación: Rep. Dominicana
Posts: 307
Poder: 21
ronimaxh Va por buen camino
Question Como se asigna el index del checklistbox....

Hola amigos del club, aquí les planteo lo que pretendo hacer para que mes den una ayudita: Tengo una tabla con los tipos de nominas lleno el checklistbox y quiero asignarle el id_nomina de la tabla para cuando marque un tipo saber que id tiene mi codigo es el siguiente:
Código Delphi [-]
//Con esto lleno el CheckListBox1begin
  with CheckListBox1 do
       begin
          st.SQL.Text:='';
          st.SQL.Text:='select * from nf_cuentasnom order by descripcion';
          st.Open;
          st.First;
          while not st.Eof do
                begin
                   Items.Add(st.fieldbyname('descripcion').AsString);
                   Items.Index:=(st.FieldByName('nomina').AsInteger); //Este es el indice que quiero
                   st.Next;
                end;
       end;
end;
// con este código consigo cuales tienen cotejo;
var i:integer;
begin
   with CheckListBox1 do
   begin
     for i:=0 to Items.Count-1 do
         begin
           if Checked[i]then
              begin
                id_nom:=ItemIndex; //Este index no es el que esta en la tabla de nomina
              end;
         end;
   end;
end;

Nota: uso sql Server 2000, delphi 7 y ado
__________________
ronimaxh
Rep. Dominicana
Responder Con Cita
  #2  
Antiguo 09-07-2007
gabrielkc gabrielkc is offline
Miembro
 
Registrado: jun 2007
Ubicación: Chihuahua Mexico
Posts: 118
Poder: 17
gabrielkc Va por buen camino
Cita:
Empezado por ronimaxh
Código Delphi [-]
//Con esto lleno el CheckListBox1
begin
with CheckListBox1 do
begin
st.SQL.Text:='';
st.SQL.Text:='select * from nf_cuentasnom order by descripcion';
st.Open;
st.First;//Esto no es necesario, porque acabas de abrir el query
while not st.Eof do
begin
Items.Add(st.fieldbyname('descripcion').AsString);
Items.Index:=(st.FieldByName('nomina').AsInteger); //Este es el indice que quiero
st.Next;
end;
end;
end;

// con este código consigo cuales tienen cotejo;
var i:integer;
begin
with CheckListBox1 do
begin
for i:=0 to Items.Count-1 do
begin
if Checked[i]then
begin
id_nom:=ItemIndex; //Este index no es el que esta en la tabla de nomina
end;
end;
end;
end;

1.- st.SQL.Text:='';//esto no es necesario, porque en la siguiente linea le asignas un valor
2.-st.First;//Esto no es necesario, porque acabas de abrir el query.

2.- La propiedad ItemIndex del CheckListBox determina cual item está seleccionado, aunque en tu código
si entendí bien cambiarías dicho ItemIndex con cada registro, además la propiedad
Index no existe en los TStings
Items.Index:=(st.FieldByName('nomina').AsInteger); //Este es el indice que quiero

4.-
Código:
with CheckListBox1 do
   begin
     for i:=0 to Items.Count-1 do
         begin
           if Checked[i]then
              begin
                id_nom:=ItemIndex; //Este index no es el que esta en la tabla de nomina
              end;
         end;
En el anterior código haces un for y asignas al id_nom el ItemIndex del
item seleccionado, pero como es un for si hay más de 1 item seleccionado
solo obtendrías el último, me parece que estás conciderando que solo se seleccionaría 1,
por lo tanto yo creo que el CheckListBox no es el componente ideal para esa operación,
probablememte un ComboBox te funcionaría mejor (es incluso más estandar)

Última edición por gabrielkc fecha: 09-07-2007 a las 16:31:23.
Responder Con Cita
  #3  
Antiguo 09-07-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
Lo más cómodo cuando se trata de seleccionar un valor de la base de datos ( en este caso el tipo de nómina), es utilizar un DBLookupCombo. Solo haces una consulta, aplicas dos o tres propiedades y listo.
__________________

Responder Con Cita
  #4  
Antiguo 10-07-2007
ronimaxh ronimaxh is offline
Miembro
 
Registrado: jun 2003
Ubicación: Rep. Dominicana
Posts: 307
Poder: 21
ronimaxh Va por buen camino
Gracias por las correcciones, tomeré eso en cuenta;
hay más de 1 item seleccionado siempre
la situación es, si hay varios selecionados necesito el id_nomina de la tabla que lo llena para guardalo en otra tabla y el DBLookupCombo resuelve (si fuera uno, pero siempre seran varios), pero la lista ayudaría más al usuario que use el programa.

Nota: Si hay otro componente que se pueda usar para esto les agradeceré.
__________________
ronimaxh
Rep. Dominicana
Responder Con Cita
  #5  
Antiguo 10-07-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
¿que tal un TDBLookUpListBox?
__________________

Responder Con Cita
  #6  
Antiguo 10-07-2007
adfa adfa is offline
Miembro
 
Registrado: may 2003
Ubicación: Montevideo-Uruguay
Posts: 119
Poder: 21
adfa Va por buen camino
En realidad estas cerca usando el checklistbox...
En vez de hacer:
Código Delphi [-]
Items.Add(st.fieldbyname('descripcion').AsString);
Items.Index:=(st.FieldByName('nomina').AsInteger);
Podes hacer:
Código Delphi [-]
Items.AddObject(st.fieldbyname('descripcion').AsString,Pointer(st.FieldByName('nomina').AsInteger));

Luego para recuperarlo: (usando tu mismo código)
Código Delphi [-]
// con este código consigo cuales tienen cotejo;
var i, id_nom:integer;
begin
with CheckListBox1 do
begin
for i:=0 to Items.Count-1 do
begin
if Checked[i]then
begin
id_nom:= integer(Items.objects[i]);
end;
end;
end;
end;
Responder Con Cita
  #7  
Antiguo 10-07-2007
gabrielkc gabrielkc is offline
Miembro
 
Registrado: jun 2007
Ubicación: Chihuahua Mexico
Posts: 118
Poder: 17
gabrielkc Va por buen camino
Cita:
Empezado por adfa
Luego para recuperarlo: (usando tu mismo código)
Código Delphi [-]
// con este código consigo cuales tienen cotejo;
var i, id_nom:integer;
begin
with CheckListBox1 do
begin
for i:=0 to Items.Count-1 do
begin
if Checked[i]then
begin
id_nom:= integer(Items.objects[i]);
end;
end;
end;
end;
El problema que veo yo en ese código es que si hay varios seleccionados es que se sobreescribe el valor de la variable id_nom en cada paso del bucle en el cual esté checado el item en cuestion:

Item1 Valor 1 checked
Item2 Valor 2 checked
Item3 Valor 3 checked

el id_nom quedaría como 3, pero el 1 y el 2?? tambien están checked
Responder Con Cita
  #8  
Antiguo 10-07-2007
ronimaxh ronimaxh is offline
Miembro
 
Registrado: jun 2003
Ubicación: Rep. Dominicana
Posts: 307
Poder: 21
ronimaxh Va por buen camino
Gracias a todos por la ayuda, con eso está resuelto.

Nota: un comentario para grabrielkc, dentro del bucle for se lo paso a la varialbe id_nomina y luego llama a una rutina para insertarla, excusemen por no poner la llamada de la rutina.
__________________
ronimaxh
Rep. Dominicana

Última edición por ronimaxh fecha: 10-07-2007 a las 20:17:41.
Responder Con Cita
  #9  
Antiguo 10-07-2007
adfa adfa is offline
Miembro
 
Registrado: may 2003
Ubicación: Montevideo-Uruguay
Posts: 119
Poder: 21
adfa Va por buen camino
Cita:
Empezado por gabrielkc
El problema que veo yo en ese código es que si hay varios seleccionados es que se sobreescribe el valor de la variable id_nom en cada paso del bucle en el cual esté checado el item en cuestion:

Item1 Valor 1 checked
Item2 Valor 2 checked
Item3 Valor 3 checked

el id_nom quedaría como 3, pero el 1 y el 2?? tambien están checked
Si, supongo que faltara algo de código alli. Yo solo puse el código que habia posteado ronimaxh y le agregue como recuperar el valor del item, que era el problema en cuestión.
Creo que ronimaxh ya entendió el truco.

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
Index is out of date... index table torito Conexión con bases de datos 7 10-12-2016 13:21:31
IBDataSet no asigna valores a las variables de campo gendelphi Conexión con bases de datos 2 31-01-2006 02:23:11
Asigna Fecha y Hora Automatico al Insertar Maury Manosalva OOP 3 31-10-2005 20:36:29
Como saber si un procedimiento asigna bien una variable Antuan Varios 1 17-09-2005 14:15:27
¿Cómo se puede evitar que se seleccionen varios campos en un CheckListBox? nuri Varios 7 27-07-2005 17:36:11


La franja horaria es GMT +2. Ahora son las 21:34:20.


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