Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Duda con un TCheckListBox (https://www.clubdelphi.com/foros/showthread.php?t=82805)

darkamerico 16-04-2013 00:06:34

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

darkamerico 16-04-2013 01:07:08

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;
...


La franja horaria es GMT +2. Ahora son las 22:15:21.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi