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-04-2012
donpedro donpedro is offline
Miembro
 
Registrado: nov 2009
Posts: 102
Poder: 0
donpedro cantidad desconocida en este momento
hola de nuevo, estoy mejorando la pantalla y estoy frenado en algo: en la nueva pantalla estoy utilizando un dbgrid y un listbox (con base de datos mysql). estoy pasando registros de un dbgrid al listbox como se muestra en la siguiente figura.


lo que quiero es que cuando mueva una materia del dbgrid al listbox dicha materia se quite del dbgrid. me explico,, si por ejemplo muevo la materia matematica que se compare si algun registro del dbgrid es igual a los del listbox y si es asi que lo quite del dbgrid para asi poder ver las materias que no he agregado... espero que hallan entendido. trate con el siguiente codigo el cual esta en el mismo boton donde muevo los items.
Código Delphi [-]
procedure TFASIGPORGRADOS.BitBtn11Click(Sender: TObject);
  VAR A:INTEGER;
begin



LISTBOX1.Items.Add(DMDATOS.AQMATERIASDESCRIPCION.AsString);//con este linea muevo del dbgrid al listbox

//aqui quiero comparar los registros del dbgrid con los del listbox
for A := 0 to ListBOX1.ITEMS.Count - 1 do
  BEGIN
    WITH DMDATOS DO
    BEGIN
      AQMATERIAS.Active:=FALSE;
      AQMATERIAS.Close;
      AQMATERIAS.SQL.Clear;
      AQMATERIAS.SQL.Add('SELECT * FROM MATERIA WHERE DESCRIPCION NOT LIKE'+''''+'%'+LISTBOX1.Items.Strings[A]+'%'+'''');
      AQMATERIAS.ExecSQL;
      AQMATERIAS.ACTIVE:=TRUE;

    END;

  END;

         end;

cuando ejecuto ese codigo y selecciono por ejemplo matematica y lo paso al listbox dicha materia se quita del dbgrid, pero si elijo otra por ejemplo lengua española se me agrega al listbox se me borra del dbgrid pero matematica vuelve y aparece en el dbgrid..

espero que me hallan entendido,, espero respuesta y muchas gracias de antemano...
Responder Con Cita
  #2  
Antiguo 10-04-2012
MartinS MartinS is offline
Miembro
NULL
 
Registrado: nov 2011
Ubicación: Villa Cacique - Argentina
Posts: 283
Poder: 13
MartinS Va por buen camino
Hola donpedro: creo que te entendi sobre lo que apuntas pero vas a tener varios inconvenientes a la hora de hacer el pase de materias.-

En primer lugar la consulta pareciera que funcionara pero para que pueda ir quitando las materias del dbgrid debes ir agregando condiciones al where del sql y ciertamente se puede volver bastante engorroso. Calcula que si hace... (Como se dice en Argentina "A la criolla")

1 listar todas las materias
Seleccionaste despues matematica, entonces
2 listar todas las materias, salvo matematicas (anda joya)
despues seleccionas geografia, entonces
3 listar todas las materias, salvo matematicas y salvo geografia y asi sucesivamente vas a tener una consulta bastante grande y que no seria de gran utilidad; mas aun si el cliente decide eliminar una de ellas de las ya asignadas entonces deberias "ubicar" cual es la condicion afectada en el SQL

Creo que debes volcar todas las materias a un listbox y no a un dbgrid y de ahi hacer el pase para el otro listbox como ya has expuesto
en mensajes anteriores

Otra idea podria ser que al momento de dar de alta nuevas materias primero pongas las materias del curso en el listbox2 que ya habias guardado y despues a hace una consulta de las materias generales e incorporalas al listbox1 pero solo las que no aparecen en el listbox2 asi:

Código Delphi [-]
Consulta.First;
  While Not Consulta.Eof do
  Begin
     If ListBox2.Items.IndexOf(ConsultaValor) = -1 then  // Si es -1 el items es porque no esta en las materias ya cargadas al curso
            ListBox1.Items.Add(ConsultaValor)
     Consulta.Next;
  End;

El mismo tipo de comprobacion lo puedes hacer cuando pasas las materias de un lado al otro si no borras el origen, si no, primero has el pase
Código Delphi [-]
Listbox2.Items.Add(ListBox1.Items[ListBox1.ItemIndex])

y despues borras el origen

Código Delphi [-]
 ListBox1.Items.Delete(ListBox1.ItemIndex)

Dicho esto creo que es la mejor manera de manejar el pase de materias (Puede no ser la unica forma).-

Ah!! Usa para otra pregunta (como la que hiciste) un nuevo hilo así no confundimos las respuestas y tus dudas saltan al primer lugar de la lista de post aumentando las posibilidades de que alguien que la tenga mas clara (que por cierto hay muchos) conteste y te de una mano.

Saludos.-
Responder Con Cita
  #3  
Antiguo 10-04-2012
donpedro donpedro is offline
Miembro
 
Registrado: nov 2009
Posts: 102
Poder: 0
donpedro cantidad desconocida en este momento
pense, que si voy a tratar del mismo tema, no podria crear un nuevo hilo......gracias de todos modos voy a cambiar el dbgrid por un listbox......
Responder Con Cita
  #4  
Antiguo 10-04-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.055
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por donpedro Ver Mensaje
pense, que si voy a tratar del mismo tema, no podria crear un nuevo hilo......gracias de todos modos voy a cambiar el dbgrid por un listbox......
Si es el mismo tema, el mismo asunto, que todavía no lo has solucionado, entonces sigue en este hilo.
Si es algo diferente, distinto, entonces hilo nuevo.
Responder Con Cita
  #5  
Antiguo 13-04-2012
donpedro donpedro is offline
Miembro
 
Registrado: nov 2009
Posts: 102
Poder: 0
donpedro cantidad desconocida en este momento
hola a todos, volviendo al tema... agregue los listbox1 y listbox2 donde en el listbox2 cargo todas las materias y en el listbox1 asigno las materias que va a utilizar un grado o un curso. anteriormente como materia asignada estaba guardando en la tabla el nombre de la materia, pero se daba el caso como comento martinS, que si se cambiaba o modificaba una materia esta no se iba a modificar en la tabla de materias asignadas. por tal motivo decidi en vez de guardar el nombre de la materia, guardar el id de la materia.


antes cuando grababa el nombre de la materia podia utilizar este codigo para comparar las materias de la tabla materias que no estan en la tabla materias asignadas y asi cuando le de a grabar solo me guarde la materia que no esta.
Código Delphi [-]
with dmdatos do
begin
if not aqmaterias.locate('descripcion',listbox1.items.strings[x],[]) then
...
...
end;

pero ahora al guardar el id de la materia tengo que hacer consultas para saber que materia es,y luego cuando incluya otra materia saber que id tiene para comparar ese id y ver si no se encuentra en materias asignadas para poder grabarla lo que pido es que me ayuden a realizar esas consultas,, he intentado pero no me ha dado resultado.... espero haberme explicado.....

muchos preguntaran porque grabar el id,,, bueno si hago algun cambio en una de las materias en la otra tabla cuando seleccione la materia por medio del id va a salir actualizada............

gracias de antemano
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 campos de la tabla en un listbox sancarlos SQL 4 03-07-2008 19:10:59
agregar y/o eliminar items de un listbox a partir de otro listbox Goyo PHP 2 27-09-2007 16:46:30
ListBox Tala OOP 3 21-06-2006 16:31:46
Copiar los campos de una tabla a un ListBox JuanErasmo C++ Builder 1 22-09-2005 02:13:18
ListBox neon OOP 2 09-08-2004 11:15:27


La franja horaria es GMT +2. Ahora son las 13:20:32.


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