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 01-03-2012
Avatar de alej.villa
alej.villa alej.villa is offline
Miembro
NULL
 
Registrado: may 2011
Ubicación: Caracas, Venezuela
Posts: 76
Poder: 13
alej.villa Va por buen camino
Exclamation Ayuda con TStringList

Buenos días comunidad

de nuevo recorro a ustedes para buscar una solución, este es el problema:

en un ListBox tengo todas las cédulas asignadas según el turno correspondiente que realizó en una consulta SQL en el evento OnShow del formulario, éste es el código:

Código Delphi [-]
  begin
    ListBox1.Clear;
//asigno al ComboBox el turno de manera automática dependiendo de la hora del día
    if ((Time >= StrToTime('07:30:00 a.m.')) and (time <= StrToTime('03:29:59 p.m.'))) or
       ((Time >= StrToTime('07:30:00'))      and (time <= StrToTime('15:29:59')))      then
      ComboBox1.Text:= 'NOCTURNO';
    if ((Time >= StrToTime('03:30:00 p.m.')) and (time <= StrToTime('10:29:59 p.m.'))) or
       ((Time >= StrToTime('15:30:00'))      and (time <= StrToTime('22:29:59')))      then
      ComboBox1.Text:= 'MEGATURNO';
    if ((Time >= StrToTime('10:30:00 p.m.')) and (time <= StrToTime('07:29:50 a.m.'))) or
       ((Time >= StrToTime('22:30:00'))      and (time <= StrToTime('07:29:59')))      then
      ComboBox1.Text:= 'DIURNO';
    habilitar;
// Realizo la consulta SQL y filtro el campo cedula de las dos tablas según el turno de trabajo 
    dm.Query.Close;
    dm.Query.SQL.Clear;
    dm.Query.SQL.Add('SELECT cedula FROM empleados WHERE turno = :xfiltro and cargo = :cargo');
    dm.Query.SQL.Add('UNION ALL');
    dm.Query.SQL.Add('SELECT cedula FROM Turno_Temporal WHERE turno_temp = :yfiltro AND estado = :type');
    DM.Query.Parameters.ParamByName('xfiltro').DataType:=ftString;
    dm.Query.Parameters.ParamByName('xfiltro').Value:=ComboBox1.Text;
    dm.Query.Parameters.ParamByName('cargo').DataType:=ftString;
    dm.Query.Parameters.ParamByName('cargo').Value:='OPERARIO';
    DM.Query.Parameters.ParamByName('yfiltro').DataType:=ftString;
    dm.Query.Parameters.ParamByName('yfiltro').Value:=ComboBox1.Text;
    DM.Query.Parameters.ParamByName('type').DataType:=ftString;
    dm.Query.Parameters.ParamByName('type').Value:='activo';
    dm.Query.Open;
    while not dm.Query.Eof do
      Begin
// Agrego todas las cedulas filtradas en el ListBox
        ListBox1.Items.Add(dm.Query.fieldbyname('cedula').AsString);
        dm.Query.Next;
      end;
      magico.Click;
  end;

Veran que al finalizar el procedimiento ejecuto otro procedimiento que me separa las cédulas disponibles de las que no lo estan, las cédulas disponibles son agregadas en el objeto TStringList este el código del botón magico

Código Delphi [-]
procedure TformListadearranque.magicoClick(Sender: TObject);
var
cont : integer;
begin
//aqui creo la variable
  empleados := TStringList.Create;
// aqui recorro el ListBox para separar las cédulas disponibles de las que no lo estan, si las cédulas no estan disponibles
// las borro de esa posición 
  for cont := 0 to ListBox1.Items.Count-1 do
    begin

//procedimiento para saber si un empleado se cambio de turno de trabajo 
// si es encontrado significa que si se cambio y se borra del ListBox
// en caso contrario pasa a otro procedimiento

      buscar_turnoTemp(ListBox1.Items.Strings[cont],'activo',ComboBox1.Text,encontrado);
        if encontrado then
          ListBox1.Items.Strings[cont]:=''
        else

// procedimiento para saber si el empleado se cambio de cargo de trabajo de modo temporal
// si es encontrado es borrado del ListBox en caso contrario pasa a otro procedimiento

          buscar_aux(ListBox1.Items.Strings[cont],'activo',encontrado);
            if encontrado then
              ListBox1.Items.Strings[cont]:=''
            else

// Procedimiento para verificar si el empleado va a ausentarse ese día en el trabajo
// si es encontrado es borrado del ListBox

              buscar_encasos(ListBox1.Items.Strings[cont],'activo',encontrado);
                if encontrado then
                  ListBox1.Items.Strings[cont]:=''
    end;

// Hasta aquí recorre todas las posiciones asignadas en la consulta y me separa las cédulas disponibles de las que no lo 
// estan, (Funciona sin problemas)

// Aqui vuelvo a recorrer el ListBox para separar los campos vacios de los que no lo estan
// y agregar las cedulas en el objeto TStringList anteriormente llamado "empleados"

  for cont := 0 to ListBox1.Items.Count-1 do
    begin
      if ListBox1.Items.Strings[cont] <> '' then
        empleados.Add(ListBox1.Items.Strings[cont]);
    end;
    Label3.Font.Color := clGreen;
    Label3.Caption := 'Cantidad de Operarios disponibles '+ IntToStr(empleados.Count);
end;

// hasta aquí todo de maravilla, no da ningún error

El procedimiento que se encuentra en este botón lo uso para registrar lo necesario en la Base de Datos, cabe destacar que este procedimiento funciona, el problema esta cuando trato en insertar en la Base de Datos, ya hice la prueba que solo me muestre un mensaje del dato que lleva el TStringList y lo muestra, pero cuando quiero agregar ese dato en la Base de Datos sale un error "Acces violation at address 00404514 in modulo 'application.exename' Write of Address 00000000" de verdad no se porque sale eso, no se si estoy usando la variable como no es. si pudieran inducirme por el buen camino a solventarlo les agradezco.

Código Delphi [-]
procedure TformListadearranque.Button2Click(Sender: TObject);
var
x, j, i:integer;
begin
  for x:=0 to CheckListBox1.Items.Count-1 do
    try
      if CheckListBox1.Checked[x]=true then
        begin
          buscar_Linea_tempo(CheckListBox1.Items.Strings[x],encontrado);
            if not encontrado then
              Begin
                i:=Sumar(StrToInt(txtCodigo.Text),CheckListBox1.Items.Strings[x]);
                  begin
                    j:=0;
                      while j <= i-1 do
                        begin
                          Application.ProcessMessages;
                          arreglopos[j]:=Posiciones(txtCodigo.Text,CheckListBox1.Items.Strings[x]);
                          if empleados.Strings[j] <> '' then
                            begin
                              with dm.Temporal do
                                begin
                                  insert;
                                  FieldByName('cedula').AsString:=empleados.Strings[j];
                                  FieldByName('codigo_linea').AsString:=CheckListBox1.Items.Strings[x];
                                  FieldByName('posicion').AsString:=arreglopos[j];
                                  FieldByName('grupo').AsString:=ComboBox1.Text;
                                  FieldByName('fecha').AsDateTime:=Now;
                                  Post;
                                  buscar_cedula(empleados.Strings[j],encontrado);
                                    if encontrado then
                                      begin
                                        Edit;
                                        FieldByName('nombres').AsString:=dm.qLista.fieldbyname('nombres').AsString;
                                        FieldByName('sexo').AsString:=dm.qLista.fieldbyname('sexo').AsString;
                                        Post;
                                      end;
                                  Close;
                                  Open;
                                end;
                            end
                          else
                            Inc(i);
                          Inc(j);
                        end;
                  end;
              end;
        end;
    except
      ShowMessage('error');
    end;
end;

PD: uso Delphi 7 y MS SQL Server 2005
Responder Con Cita
  #2  
Antiguo 01-03-2012
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
Hola,

¿has probado a ejecutar tu código paso a paso en la parte de guardar que es la que te falla?, para saber si falla en cuanto haces el insert, si es al hacer el post, al asignar los datos a los campos de la tabla, etc. Así tendríamos el problema más localizado y no se darían palos de ciego.

Saludos.
__________________
Confórmate con lo que tienes pero anhela lo que te falta.
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
Problema Con TstringList angelp4492 Varios 2 29-12-2007 15:46:00
tstringlist y nulos edgusano Varios 4 17-11-2005 22:06:54
Ayuda con Tstringlist ronimaxh Varios 5 02-03-2005 23:29:59
Ayuda con Tstringlist ronimaxh Varios 2 12-10-2004 21:40:02
TStringList esquerda21 Varios 10 19-01-2004 11:15:21


La franja horaria es GMT +2. Ahora son las 20:06:25.


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