Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-04-2013
darkamerico darkamerico is offline
Miembro
 
Registrado: dic 2010
Posts: 250
Poder: 14
darkamerico Va por buen camino
Red face Duda con un TCheckListBox

Hola amigos, estoy realizando un sistema de Registro y Seguimiento de Reclamos, este sistema basicamente comienza cuando se ingresa el codigo del cliente, todos nuestros clientes tienen su codigo en una BD.

El aspecto de la pantalla principal es la siguiente:

VER

-------

Bien, estoy trabajando con un TChecklistbox (que aparece en la parte superior derecha de la pantalla, el cual es llenado en el evento OnActivate del formulario, de la siguiente forma:

Código Delphi [-]
procedure TForm1.FormActivate(Sender: TObject);
begin
   lstDocsCliente.Items.Clear;
  while not DmMysql.q_DocsCliente.Eof do
  begin
    lstDocsCliente.Items.Add(DmMysql.q_DocsCliente.FieldByName('id_Doc').AsString + '.' + DmMysql.q_DocsCliente.FieldByName('documento').AsString);
    DmMysql.q_DocsCliente.Next;
  end;
end;

El personal encargado, marca los documentos que el cliente esta presentando y presiona el boton Grabar, que realiza el siguiente codigo:


Código Delphi [-]
procedure TForm1.btnGrabaDocsClick(Sender: TObject);
var
  i,idDoc, posPunto, idDocXCliente:integer;
begin
  DmMysql.q_DELDocs.Close;
  DmMysql.q_DELDocs.Params[0].AsInteger:=StrToInt(lblIDReclamo.Caption);
  DmMysql.q_DELDocs.ExecSQL;

  for i := 0 to lstDocsCliente.Count-1 do
  begin
    if(lstDocsCliente.Checked[i])then
    begin
      posPunto:=pos('.',lstDocsCliente.Items.Strings[i]);
      idDoc:=StrToInt(copy(lstDocsCliente.Items.Strings[i],0,posPunto-1));

      DmMysql.q_CalcIDDocXCliente.Close;
      DmMysql.q_CalcIDDocXCliente.Open;

      if(length(DmMysql.q_CalcIDDocXCliente.FieldbyName('idDocXCliente').AsString)=0)then
        idDocXCliente:=1
      else
        idDocXCliente:=DmMysql.q_CalcIDDocXCliente.FieldbyName('idDocXCliente').AsInteger;

      DmMysql.q_INSDocXRec.Close;
      DmMysql.q_INSDocXRec.Params[0].AsInteger:=idDocXCliente;
      DmMysql.q_INSDocXRec.Params[1].AsInteger:=StrtoInt(lblIDReclamo.Caption);
      DmMysql.q_INSDocXRec.Params[2].AsInteger:=idDoc;
      DmMysql.q_INSDocXRec.Params[3].AsString:=DateToStr(cboFechaPres.Date);
      DmMysql.q_INSDocXRec.Params[4].AsString:=txtGlosaReclamo.Text;
      DmMysql.q_INSDocXRec.execSQL;
    end;
  end;
  showMessage('Documentos Registrados!');
end;

Ok Hasta aqui el trabajo se realiza correctamente, la parte que me falta es que cuando el personal digite el codigo de un cliente con un proceso de reclamo ABIERTO, deben marcarse los checks de los documentos que fueron previamente grabados. Ello se realiza en el evento KeyPress del TEdit (1) donde se coloca el Codigo del Cliente, llamado txtRC, alguien que me de una mano en este procedimiento, este fragmento de codigo realiza parte del trabajo, pero no he podido solucionarlo, solamente marca el primer documento...

Código Delphi [-]
procedure TForm1.txtRCKeyPress(Sender: TObject; var Key: Char);
begin
  if (Key=#13) and (length(txtRC.Text)>0) then
  begin
      DMMySQL.q_DocsClienteXReclamo.Close;
      DMMySQL.q_DocsClienteXReclamo.Params[0].AsInteger:=StrToInt(lblIDReclamo.Caption);
      DMMySQL.q_DocsClienteXReclamo.Open;

      for i := 0 to lstDocsCliente.Count-1 do
      begin
        posPunto:=pos('.', lstDocsCliente.Items[i]);
        while not DMMySQL.q_DocsClienteXReclamo.Eof do
        begin
          if(StrToInt(copy(lstDocsCliente.Items[i],0,PosPunto-1))=DMMySQL.q_DocsClienteXReclamo.FieldByName('iddocCliente_fk').AsInteger)then
            lstDocsCliente.Checked[i]:=true;
          DMMySQL.q_DocsClienteXReclamo.Next;
        end;
      end;
end;
end;

Gracias compañeros.

Americo
Responder Con Cita
  #2  
Antiguo 16-04-2013
darkamerico darkamerico is offline
Miembro
 
Registrado: dic 2010
Posts: 250
Poder: 14
darkamerico Va por buen camino
Thumbs up Solucion

Hola, finalmente pude dar con la solucion, la coloco aqui para todos ustedes:


Código Delphi [-]
...
      DMMySQL.q_DocsClienteXReclamo.Close;
      DMMySQL.q_DocsClienteXReclamo.Params[0].AsInteger:=StrToInt(lblIDReclamo.Caption);
      DMMySQL.q_DocsClienteXReclamo.Open;
      DMMySQL.q_DocsClienteXReclamo.First;

      while not DMMySQL.q_DocsClienteXReclamo.Eof do
      begin
          for i := 0 to lstDocsCliente.Count-1 do
          begin
            posPunto:=pos('.', lstDocsCliente.Items[i]);
            num:=StrToInt(copy(lstDocsCliente.Items[i],0,PosPunto-1));
            if(num=DMMySQL.q_DocsClienteXReclamo.FieldByName('iddocCliente_fk').AsInteger)then
              lstDocsCliente.Checked[i]:=true;
          end;
          DMMySQL.q_DocsClienteXReclamo.Next;
      end;
...
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
TCheckListBox inquietud andressanchez Varios 2 14-06-2012 22:21:33
Sugerencia con TCheckListBox adls65 Varios 3 29-08-2011 17:48:40
tchecklistbox argel Varios 5 27-05-2006 00:08:06
carga de un TCheckListBox!! kye_z Varios 4 26-10-2004 11:48:15
Ayuda con TCheckListBox astur_racing Varios 4 04-09-2004 19:30:34


La franja horaria es GMT +2. Ahora son las 04:28:50.


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