Ver Mensaje Individual
  #6  
Antiguo 01-06-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por ElGatitoTapatio Ver Mensaje
pero creo que es una pista el que, si ejecuto los mismos procedimientos fuera del hilo corren perfectamente, solo cuando los meto al hilo es el problema.... alguna idea que se les ocurra para tomar camino por ese lado?
Realmente lamento no poder probar en este momento el resto del código. Si el problema no está en el hilo ni en los procedimientos que has probado por separado, no se...

Aunque no pareciera ser el causante del problema, y por las dudas, probá de este modo para asergurarte que WNetCancelConnection2 se ejecute:
Código Delphi [-]
procedure TEnviarTemporales.EnviarDocumentos;
var
   NetResource: TNetResource;
   vRuta,NuevaRuta : PChar;
   Error,Diagonal : String;
   ErrCode,i : integer;
   Listado,ListadoEliminar : TStrings;
begin
  with ServidorAlmacenamiento,frm_main do
  begin
    Listado:= TStringList.Create;
    ListadoEliminar:= TStringList.Create;
    if not Activo then Exit;
    // ++ Buscar si hay documentos temporales
    ArchivosdeRuta(AlmacenamientoTemporal,Listado);
    // Si esto ocurre, es decir, si no hubo archivos entonces se sale
    //y por ende termina el hilo y no ocurre el error, el problema es cuando continua
    if Listado.Count = 0 then Exit;
    StatusBar.Panels.Items[2].Text:= 'Transfiriendo documentos temporales...';
    vRuta:= PChar(Ruta);
    NetResource.dwType := RESOURCETYPE_DISK;
    NetResource.lpLocalName := nil;
    NetResource.lpRemoteName := vRuta;
    NetResource.lpProvider := nil;
    // ++ Si el almacenamiento no es el temporal
    if not Local and not Abierto then
    begin
      try // (1) Conectar el acceso
        if (Usuario = '') then
          ErrCode := WNetAddConnection2(NetResource, nil, nil, CONNECT_TEMPORARY)
        else
          ErrCode := WNetAddConnection2(NetResource, PChar(Pass), PChar(Usuario), CONNECT_TEMPORARY);

        case ErrCode of
             5 : Error:= 'ERROR_ACCESS_DENIED';
            85 : Error:= 'ERROR_ALREADY_ASSIGNED';
            67 : Error:= 'ERROR_BAD_NET_NAME';
            86 : Error:= 'ERROR_INVALID_PASSWORD';
          1203 : Error:= 'ERROR_NO_NET_OR_BAD_PATH';
          1222 : Error:= 'ERROR_NO_NETWORK';
          else Error:= IntToStr(ErrCode);
        end;

        if ErrCode <> 0 then
        begin
          Mensaje(3,-1,'','Error al conectar al servidor de almacenamiento. ('+Error+')');
          hLog('Error al conectar al servidor de almacenamiento. ('+Error+')');
        end;
//**********    end;  (Línea anulada)

        // ++ Intentar copiar los archivos
        try
          if AlmacenamientoTemporal[Length(AlmacenamientoTemporal)] <> '\' then
            Diagonal := ''      // Almacenamiento temporal contiene la ruta local de los archivos
          else
            Diagonal:= '\';
          for i := 0 to Listado.Count-1 do
          begin
            NuevaRuta:= PChar(vRuta+AnsiReplaceStr(Listado[i],frm_main.AlmacenamientoTemporal,Diagonal));;
            // ++ Verificar si existe el archivo y respaldar version actual
            if FileExists(NuevaRuta) then
            begin
              ErrCode:= CopiarDocumentos(NuevaRuta,AnsiReplaceStr(NuevaRuta,ExtractFileExt(NuevaRuta),
              FormatDateTime('_ddmmy  yyy_hhnnss',Now)+ExtractFileExt(NuevaRuta)));
              if ErrCode <> 0 then hLog('No se pudo respaldar la version del archivo. ('+NuevaRuta+
                ')('+IntToStr(ErrCode)+')');
            end;
            // ++ Copiar los documentos
            ErrCode:= CopiarDocumentos(PChar(Listado[i]),NuevaRuta);
            if ErrCode <> 0 then
              hLog('No se pudo transferir el archivo al servidor de almacenamiento. ('+NuevaRuta+
                ')('+IntToStr(ErrCode)+')')
            else
            begin
              if DBConectada then
                RegistrarActividad(26,-1,GetPCName,MidStr(ExtractFileName(NuevaRuta),1,30));
              ListadoEliminar.Add(Listado[i]);
            end;
          end;

          // ++ Eliminar archivos copiados
          XDel(Handle,ListadoEliminar);
          StatusBar.Panels.Items[2].Text:= '';
        except
          on E: Exception do
          begin
            StatusBar.Panels.Items[2].Text:= '';
            hLog('Error al transferir los documentos al servidor de almacenamiento.('+E.Message+')');
          end;
        end;

//*******      if not Local and not Abierto then (Linea anulada)
      // (*) Desconectar el acceso
      finally
        ErrCode := WNetCancelConnection2(vRuta, CONNECT_UPDATE_PROFILE, True);
        Listado.Free;
        ListadoEliminar.Free;
      end;
    end;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita