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-07-2014
Valee Valee is offline
Miembro
NULL
 
Registrado: jul 2014
Posts: 19
Poder: 0
Valee Va por buen camino
Delphi no me abre el archivo

Hola, estoy estudiando análisis en sistemas, y tengo que hacer un proyecto para programación en delphi. El tema es hacer un fixture, la primer parte consiste en que el usuario cargue los países que fueron clasificados. Una vez cargados se tienen que mostrar.
Resulta que la carga me la hace bien, abriendo y cerrando el método, pero a la hora de mostrar me salta con un error de asignación de archivos que no me permite abrir el método, por lo tanto se corta ahí.
Lo revise por completo, una y mil veces y no le encuentro el error. Si necesitan el código para revisarlo, me dicen y se los mando por privado, o en su defecto por acá. Muchas gracias. Espero que me puedan ayudar. Saludos =)
Responder Con Cita
  #2  
Antiguo 09-07-2014
Avatar de Ferrari
Ferrari Ferrari is offline
Miembro
 
Registrado: jun 2006
Ubicación: Torreón, México
Posts: 154
Poder: 18
Ferrari Va por buen camino
Cool

Pienso que es lo mas lógico....que pongas tu código y así la comunidad te pueda apoyar.

Saludos
Responder Con Cita
  #3  
Antiguo 09-07-2014
Valee Valee is offline
Miembro
NULL
 
Registrado: jul 2014
Posts: 19
Poder: 0
Valee Va por buen camino
El error me lo tira en el procedimiento de abrir método, pero solo cuando listo. Acá les dejo el código de la librería y del listado

La Libreria principal:

Código Delphi [-]
unit LibreriaArchivosEnlace;

interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls, Banderas_Imagen;
const
  _RutaArchivo= 'C:\Users\Valee\Desktop\TPO\';
  _ArchivoDatos= 'Paises.dat';
  _ArchivoControl= 'Paises.con';
  _ArchivoBanderas= 'Banderas.dat';
  _PosNula= -1;
  _ClaveNula= 'A00';
  _CantidadMaxima= 32;
  _Torneo= 2014;
  _Nulo= 0;

type
  TipoMensaje= 0..20;
  TipoBandera= 1..32;
  Cadena= string [15];
  TipoPosicion= longint;
  TipoCantidad= integer;
  TipoClave= string[3];
  TipoPuesto= 0..8;
  TipoGrupos= 'A'..'H';
  TipoRegDatos= record
                  Clave: TipoClave;
                  Pais: Cadena;
                  Puesto_Anterior: TipoPuesto;
                  Bandera: TImage;
                  Enlace: TipoPosicion;
                end;
  TipoArchivoDatos= file of TipoRegDatos;


  TipoRegControl= record
                    Primero: TipoPosicion;
                    Ultimo: TipoPosicion;
                    Cantidad: TipoCantidad;
                    Cantidad_Grupos: TipoGrupos;
                    Editable: Boolean;
                    Borrado: TipoPosicion;
                  end;
  TipoArchivoControl= file of TipoRegControl;

  TipoRegBandera = record
                    Nombre: Cadena;
                    Imagen: TImage;
                    Numero: TipoBandera;
                   end;

  TipoArchivoBandera = file of TipoRegBandera;


  TipoMe= record
            B: TipoArchivoBandera;
            D: TipoArchivoDatos;
            C: TipoArchivoControl;
          end;
var
  Me:TipoMe;

Procedure CrearMe (var Me: TipoMe);
Procedure AbrirMe (var Me: TipoMe);
Procedure CerrarMe (var Me: TipoMe);
Procedure CapturarMe (var Me: TipoMe; pos:TipoPosicion; var RD: TipoRegDatos);
Procedure ModificarMe (var Me: TipoMe; pos: TipoPosicion; RD: TipoRegDatos);
Procedure Insertar (var Me:TipoMe; RD: TipoRegDatos; posicion: TipoPosicion);
Procedure Eliminar (var Me: TipoME; posicion: TipoPosicion);
function Buscar(Var Me:TipoMe; Clave:TipoClave; Var PosAnterior:TipoPosicion):Boolean;
Function MeVacio (var Me: TipoMe):boolean;
Function Primero (var Me: TipoMe):TipoPosicion;
Function Ultimo (var Me: TipoMe):TipoPosicion;
Function Proximo (var Me: TipoMe; pos: TipoPosicion): TipoPosicion;
Function Cant_elem (var Me: TipoMe): TipoCantidad;
//Function BuscarBandera (var Me:TipoMe; Pais: cadena): TImage;

implementation

Procedure CrearMe (var Me: TipoMe);
var
  RC: TipoRegControl;
  RB: TipoRegBandera;
begin
  assign (Me.B,_RutaArchivo+_ArchivoBanderas);
  assign (Me.D,_RutaArchivo+_ArchivoDatos);
  assign (Me.C,_RutaArchivo+_ArchivoControl);
  {$I-}
  reset (Me.D);
  If (IORESULT <> 0)
  then
    rewrite (Me.D);
  reset (Me.C);
  If (IORESULT <> 0)
  then
    begin
      rewrite (Me.C);
      RC.Primero:= _PosNula;
      RC.Ultimo:= _PosNula;
      RC.Borrado:= _PosNula;
      RC.Cantidad:= _Nulo;
      write (Me.C,RC);
    end;
  reset (Me.B);
  If (IORESULT <> 0)
  then
    begin
      rewrite (Me.B);
      while RB.Numero <= _CantidadMaxima do
        begin
          case RB.Numero of
            1: begin
                RB.Nombre:= 'Japon';
                RB.Imagen:= Form4.Image1;
               end;
            2: begin
                RB.Nombre:= 'Italia';
                RB.Imagen:= Form4.Image2;
               end;
            3: begin
                RB.Nombre:= 'Iran';
                RB.Imagen:= Form4.Image3;
               end;
            4: begin
                RB.Nombre:= 'Inglaterra';
                RB.Imagen:= Form4.Image4;
               end;
            5: begin
                RB.Nombre:= 'Honduras';
                RB.Imagen:= Form4.Image5;
               end;
            6: begin
                RB.Nombre:= 'Grecia';
                RB.Imagen:= Form4.Image6;
               end;
            7: begin
                RB.Nombre:= 'Ghana';
                RB.Imagen:= Form4.Image7;
               end;
            8: begin
                RB.Nombre:= 'Francia';
                RB.Imagen:= Form4.Image8;
               end;
            9: begin
                RB.Nombre:= 'España';
                RB.Imagen:= Form4.Image9;
               end;
            10: begin
                RB.Nombre:= 'EEUU';
                RB.Imagen:= Form4.Image10;
               end;
            11: begin
                RB.Nombre:= 'Chile';
                RB.Imagen:= Form4.Image11;
               end;
            12: begin
                RB.Nombre:= 'Argelia';
                RB.Imagen:= Form4.Image12;
               end;
            13: begin
                RB.Nombre:= 'Colombia';
                RB.Imagen:= Form4.Image13;
               end;
            14: begin
                RB.Nombre:= 'Argentina';
                RB.Imagen:= Form4.Image14;
               end;
            15: begin
                RB.Nombre:= 'Corea del Sur';
                RB.Imagen:= Form4.Image15;
               end;
            16: begin
                RB.Nombre:= 'Australia';
                RB.Imagen:= Form4.Image16;
               end;
            17: begin
                RB.Nombre:= 'Costa de Marfil';
                RB.Imagen:= Form4.Image17;
               end;
            18: begin
                RB.Nombre:= 'Belgica';
                RB.Imagen:= Form4.Image18;
               end;
            19: begin
                RB.Nombre:= 'Costa Rica';
                RB.Imagen:= Form4.Image19;
               end;
            20: begin
                RB.Nombre:= 'Bosnia';
                RB.Imagen:= Form4.Image20;
               end;
            21: begin
                RB.Nombre:= 'Alemania';
                RB.Imagen:= Form4.Image21;
               end;
            22: begin
                RB.Nombre:= 'Croacia';
                RB.Imagen:= Form4.Image22;
               end;
            23: begin
                RB.Nombre:= 'Brasil';
                RB.Imagen:= Form4.Image23;
               end;
            24: begin
                RB.Nombre:= 'Camerun';
                RB.Imagen:= Form4.Image24;
               end;
            25: begin
                RB.Nombre:= 'Ecuador';
                RB.Imagen:= Form4.Image25;
               end;
            26: begin
                RB.Nombre:= 'Holanda';
                RB.Imagen:= Form4.Image26;
               end;
            27: begin
                RB.Nombre:= 'Mexico';
                RB.Imagen:= Form4.Image27;
               end;
            28: begin
                RB.Nombre:= 'Uruguay';
                RB.Imagen:= Form4.Image28;
               end;
            29: begin
                RB.Nombre:= 'Suiza';
                RB.Imagen:= Form4.Image29;
               end;
            30: begin
                RB.Nombre:= 'Rusia';
                RB.Imagen:= Form4.Image30;
               end;
            31: begin
                RB.Nombre:= 'Portugal';
                RB.Imagen:= Form4.Image31;
               end;
            32: begin
                RB.Nombre:= 'Nigeria';
                RB.Imagen:= Form4.Image32;
               end;
          end;
          write (Me.B);
          RB.Numero:= RB.Numero+1;
        end;
    end;
  close (Me.B);
  close (Me.D);
  close (Me.C);
  {$I+}
end;

Procedure AbrirMe (var Me: TipoMe);
begin
  reset (Me.B);
  reset (Me.D);
  reset (Me.C);
end;

Procedure CerrarMe (var Me: TipoMe);
begin
  close (Me.B);
  close (Me.D);
  close (Me.C);
end;

Procedure CapturarMe (var Me: TipoMe; pos:TipoPosicion; var RD: TipoRegDatos);
begin
  seek (Me.D, pos);
  read (Me.D, RD);
  //seek (Me.D, RD.Enlace);
  //read (Me.D, RD);
end;

Procedure ModificarMe (var Me: TipoMe; pos: TipoPosicion; RD: TipoRegDatos);
var
 RDAux: TipoRegDatos;
begin
  seek (Me.D, pos);
  read (Me.D, RDAux);
  seek (Me.D, RDAux.Enlace);
  read (Me.D, RDAux); //VER, CREO QUE ES RD
  RD.Enlace:= RDAux.Enlace;
  seek (Me.D, RDAux.Enlace);
  write (Me.D, RD);
end;

Procedure Insertar (var Me:TipoMe; RD: TipoRegDatos; posicion: TipoPosicion);
var
  RC: TipoRegControl;
  RX, RDAnterior: TipoRegDatos;
  PosNueva: TipoPosicion;
begin
  seek (Me.C, _Nulo); //Lee Archivo Control
  read (Me.C, RC);
  if RC.Borrado= _PosNula //Descolgamos el campo Borrado
  then
    PosNueva:= filesize (Me.D)
  else
    begin
      PosNueva:= RC.Borrado;
      seek (Me.D, PosNueva);
      read (Me.D, RX);
      RC.Borrado:= RX.Enlace;
    end;
  if RC.Primero= _PosNula //Inserto en Me vacio
  then
    begin
      RC.Primero:= PosNueva;
      RC.Ultimo:= PosNueva;
      RD.Enlace:= _PosNula; //Al estar vacio, el enlace queda en -1
    end
  else
    if posicion= _PosNula // Insertar al principio
    then
      begin
        RD.Enlace:= RC.Primero;
        RC.Primero:= PosNueva;
      end
    else
      if posicion= RC.Ultimo //Incertar al final
      then
        begin
          RD.Enlace:= _PosNula;
          seek (Me.D, Posicion);
          read (Me.D, RDAnterior);
          RDAnterior.Enlace:= PosNueva;
          RC.Ultimo:= PosNueva;
        end
      else // Insertar al medio
        begin
          seek (Me.D, posicion);
          read (Me.D, RDAnterior);
          RD.Enlace:= RDAnterior.Enlace;
          RDAnterior.Enlace:= PosNueva;
        end;
  RC.Cantidad:= RC.Cantidad+1;
  seek (Me.C, _Nulo);
  write (Me.C, RC);
  seek (Me.D, PosNueva);
  write (Me.D, RD);
end;

Procedure Eliminar (var Me: TipoME; posicion: TipoPosicion);
var
  RC: TipoRegControl;
  RX,RD: TipoRegDatos;
  PosBorrado: TipoPosicion;
begin
  seek (Me.C, _Nulo); // Leo cabecera
  read (Me.C, RC);
  if posicion= _PosNula
  then
    begin
      if RC.Primero = RC.Ultimo //Elimino y queda Pos vacio
      then
        begin
          PosBorrado:= RC.Primero;
          RC.Primero:= _PosNula;
          RC.Ultimo:= _PosNula;
        end
      else
        begin //Elimino al principio
          PosBorrado:= RC.Primero;
          seek (Me.D, PosBorrado);
          read (Me.D, RX);
          RC.Primero:= RX.Enlace;
        end;
    end
  else
    begin //Elimino al medio o al final
      seek (Me.D, posicion);
      read (Me.D, RD);
      PosBorrado:= RD.Enlace;
      if RD.Enlace= RC.Ultimo //Elimino ultimo elemento
      then
        begin
          RD.Enlace:= _PosNula;
          RC.Ultimo:= posicion;
          seek (Me.D, posicion);
          write (Me.D, RD);
        end
      else
        begin //Elimino al medio
          seek (Me.D, RD.Enlace);
          read (ME.D, RX);
          RD.Enlace:= RX.Enlace;
          seek (Me.D, posicion);
          write (Me.D, RD);
        end;
    end;
  seek (Me.D, PosBorrado); // Insertar al registro en la pila de borrados
  read (Me.D, RD);
  RD.Enlace:= RC.Borrado;
  RC.Borrado:= posicion;
  RC.Cantidad:= RC.Cantidad-1;
  seek (Me.D,_Nulo);
  write (Me.D, RD);
  seek (Me.C,_Nulo);
  write (Me.C, RC);
end;

function Buscar(Var Me:TipoMe;Clave:TipoClave;Var PosAnterior:TipoPosicion):Boolean;
Var
   Enc,Corte:Boolean;
   RC:TipoRegControl;
   RD:TipoRegDatos;
   Primero:Tipoposicion;
Begin
     Seek(Me.C,_Nulo);
     Read(Me.C,RC);
     Enc:=False;
     Corte:=False;
     PosAnterior:=_PosNula;
     Primero:=RC.Primero;
     While (Not Enc) and (Not Corte) and (Primero<>_PosNula) do
     Begin
          Seek(Me.D,Primero);
          Read(Me.D,RD);
          If RD.Clave=Clave Then
                 Enc:=True
              else
                 If RD.Clave > Clave then
                      Corte:=True
                   else
                    Begin
                         PosAnterior:=Primero;
                         Primero:=RD.Enlace;
                    End;
     End;
     Buscar:=Enc;
End;

Function MeVacio (var Me: TipoMe):boolean;
var
  RC: TipoRegControl;
begin
  seek (Me.C, _Nulo);
  read (Me.C, RC);
  if RC.Primero= _PosNula
  then
    MeVacio:= true
  else
    MeVacio:= false;
end;

Function Primero (var Me: TipoMe):TipoPosicion;
var
  RC: TipoRegControl;
begin
  seek (Me.C, _Nulo);
  read (Me.C, RC);
  Primero:= RC.Primero;
end;

Function Ultimo (var Me: TipoMe):TipoPosicion;
var
  RC: TipoRegControl;
begin
  seek (Me.C, _Nulo);
  read (Me.C, RC);
  Ultimo:= RC.Ultimo;
end;

Function Proximo (var Me: TipoMe; pos: TipoPosicion): TipoPosicion;
var
  RD: TipoRegDatos;
begin
  seek (Me.D, pos);
  read (Me.D, RD);
  Proximo:= RD.Enlace;
end;

Function Cant_elem (var Me: TipoMe): TipoCantidad;
var
  RC: TipoRegControl;
begin
  Cant_elem:= RC.Cantidad;
end;

{Function BuscarBandera (var Me:TipoMe; Pais: cadena): TImage;
var
  enc: boolean;
  RB: TipoRegBandera;
  Nro: TipoBandera;
begin
  enc:= false;
  Nro:= 1;
  seek (Me.B, Nro);
  read (Me.B, RB);
  while (not enc) or (Nro= _CantidadMaxima) do
    begin
      seek (Me.B, Nro);
      read (Me.B,RB);
      if RB.Nombre = Pais
      then
          enc:= true
      else
        Nro:= Nro+1;
    end;
  BuscarBandera:= RB.Imagen;
end;  }

end.

Listado que tira error de asignacion de archivo:

unit Listado_Total;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, LOAux, LibreriaArchivosEnlace;

type
  TForm3 = class(TForm)
    Panel1: TPanel;
    ListBox1: TListBox;
    Panel2: TPanel;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);
var
  X: TipoPosicion;
  Cant: TipoCantidad;
  RD: TipoRegDatos;
begin
ListBox1.Clear;
AbrirMe (Me);
Cant:= 1;
X:= Primero (Me);
if MeVacio (Me)
then
  MostrarMensaje (11)
else
  begin
    while Cant<= Cant_elem (Me) do
      begin
        CapturarMe (Me,X,RD);
        ListBox1.AddItem('CLAVE: '+ RD.Clave+' PAIS: '+RD.Pais+ inttostr (RD.Puesto_Anterior),ListBox1);
        Cant:= Cant+1;
        X:= Proximo(Me,X);
      end;
  end;
CerrarMe (Me);
end;

end.

Última edición por Neftali [Germán.Estévez] fecha: 09-07-2014 a las 14:28:31. Razón: Colocar Tags
Responder Con Cita
  #4  
Antiguo 09-07-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 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
Hola Valee.

Por favor, cuando incluyas código en tus mensajes usa los TAG's para hacer mas clara la lectura.

Uso:


En cuanto al error, sería muy bueno que hubieras puesto textualmente el mensaje que te arroja, eso circunscribe mucho la búsqueda del mismo.

Pero dado que mencionas que: "salta con un error de asignación de archivos", noto que que en el método TForm3.Button1Click llamas al procedimiento AbrirMe sin llamar previamente a CrearMe, que es donde son asignados los nombres de archivo a las variables de tipo file.

Por otro lado, en Delphi para realizar la asignación de nombres de archivo, no se usa el procedimiento Assign como en Pascal sino AssignFile.

En principio, eso es lo que alcanzo a percibir sobre la causa del error que mencionas. A menos que estes asígnando los archivos en otra parte (no publicada) del código.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 09-07-2014
Valee Valee is offline
Miembro
NULL
 
Registrado: jul 2014
Posts: 19
Poder: 0
Valee Va por buen camino
Hola Ecfisa, el crear método lo creo en el formulario principal, por eso no lo creo antes del abrir método, sino me reescribe y me borra los datos que fueron guardados. El error que me tira es EInOutError I/O error 102.
La carga de los países me lo hace perfecto, por eso no comprendo porque me tira error. Si puede abrir el método cuando se carga porque no se puede abrir cuando se muestra¿?

Última edición por Valee fecha: 26-08-2014 a las 18:29:01.
Responder Con Cita
  #6  
Antiguo 09-07-2014
Valee Valee is offline
Miembro
NULL
 
Registrado: jul 2014
Posts: 19
Poder: 0
Valee Va por buen camino
Question Error de Delphi

Hola a todos. Tengo que hacer un proyecto para programacion. Hay que hacer el fixture del mundial. La primer parte consiste en cargar los paises que fueron clasificados y ademas hay que mostrarlos.
Cuando cargo los datos lo hace perfecto, pero cuando quiero mostrar me tira un error de asignacion de archivo "I/O 102 error". El error me lo marca en el abrir metodo, pero la verdad es que nose porque. Si se pudo abrir cuando se cargo, porque no se puede cuando hay que mostrar¿?
Espero que me puedan ayudar. Aca les dejo adjunto los codigos mas una foto del error que me tira. Muchas gracias! Saludos

Última edición por Valee fecha: 26-08-2014 a las 18:29:01.
Responder Con Cita
  #7  
Antiguo 09-07-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Por favor, no crees nuevos hilos para un mismo tema. Síguelo en el que empezaste.
Además, no olvides pone títulos descriptivos a tus preguntas, gracias.
No olvides nuestra guía de estilo.
Responder Con Cita
  #8  
Antiguo 10-07-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 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
Hola Valee.
Cita:
Empezado por Valee Ver Mensaje
Hola Ecfisa, el crear método lo creo en el formulario principal, por eso no lo creo antes del abrir método, sino me reescribe y me borra los datos que fueron guardados. El error que me tira es EInOutError I/O error 102.
Ahora viendo el código de error (que podes revisar aquí: Input-Output Errors), te puedo afirmar que los archivos no están asignados al momento de intentar abrirlos con el procedimiento AbrirMe.

Lamento no haber podido abrir el adjunto con el código pero te sugiero hacer un seguimiento poniendo un Break Point y usar Trace Into (F7) para verificar que se estén asignando los archivos al momento de ser abiertos.

Aunque sin dudas, ese error se eliminaría agregando sólo una línea:
Código Delphi [-]
...
begin
  ListBox1.Clear;
  CrearMe(Me); // <- ESTA LÍNEA
  AbrirMe(Me);
  ...
Sólo proba agregando esa línea y comentanos si el error 102 sigue apareciendo.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 12-07-2014
Valee Valee is offline
Miembro
NULL
 
Registrado: jul 2014
Posts: 19
Poder: 0
Valee Va por buen camino
Hola Ecfisa, no era eso. Era un problema de libreria. De todas formas gracias por la ayuda!!!
Saludos =)
Responder Con Cita
  #10  
Antiguo 13-07-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 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
Hola Valee.

Pude abrir tu archivo en este equipo, aunque tuve que quitar algunas referencias a unidades y archivos que no estaban en el comprimido para poder ejecutarlo. Y tál como te mencioné en el mensaje anterior, el error 102 desapareció al llamar al procedimiento CrearMe antes de AbrirMe.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #11  
Antiguo 13-07-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por ecfisa Ver Mensaje
el error 102 desapareció al llamar al procedimiento CrearMe antes de AbrirMe.
Es lógico
Responder Con Cita
  #12  
Antiguo 13-07-2014
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Mas allá de lo que mencionan con respecto a abrir y cerrar archivos con los métodos AssignFile/CloseFile, lo que yo veo es que el método AbrirMe confía en que el archivo está asignado y solo hace un Reset para poner el puntero al principio.
El método CrearMe asigna el archivo y al final lo cierra, por lo que cualquier operación posterior daría un error.

En este caso, si se llama primero a CrearMe y luego a Abrirme, el Reset se tratará de realizar sobre un archivo cerrado.

Código Delphi [-]
Procedure CrearMe (var Me: TipoMe);
var
  RC: TipoRegControl;
  RB: TipoRegBandera;
begin
  assign (Me.B,_RutaArchivo+_ArchivoBanderas);
  assign (Me.D,_RutaArchivo+_ArchivoDatos);
  assign (Me.C,_RutaArchivo+_ArchivoControl);
[...]
  // Luego de crear los archivos, se cierran
  close (Me.B);
  close (Me.D);
  close (Me.C);
  {$I+}
end;

Procedure AbrirMe (var Me: TipoMe);
begin
  // En este punto no podemos asegurar si se el archivo está abierto o no
  // Confiamos en que si
  reset (Me.B);
  reset (Me.D);
  reset (Me.C);
end;

procedure TForm3.Button1Click(Sender: TObject);
var
  X: TipoPosicion;
  Cant: TipoCantidad;
  RD: TipoRegDatos;
begin
  ListBox1.Clear;
  // En este punto no podemos asegurar si se el archivo está abierto o no
  // El método CrearMe lo habría cerrado si fue llamado anteriormente
  // Esto generará un error.
  AbrirMe (Me);
  [...]
  CerrarMe (Me);
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
Saber cuando se abre un archivo angelp4492 Varios 0 16-06-2014 17:45:15
se abre el cpu de delphi y se clava el programa ! gaston260 ASM y Microcontroladores 7 26-02-2009 02:56:25
Club Delphi abre una tienda Emilio La Taberna 62 26-08-2006 08:52:55
Delphi abre una hoja excel jgutti Servers 0 19-11-2004 14:00:33
Delphi vs XP ... No abre las tablas ingel Conexión con bases de datos 0 13-06-2003 18:05:44


La franja horaria es GMT +2. Ahora son las 14:19:33.


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