PDA

Ver la Versión Completa : duda con un programita


maxi915
25-08-2012, 07:31:36
HOla, no sabia bien en que lugar colocar mi mensaje, y decidi este lugar, si no es el correcto pido disculpas..

les comento que soy estudiante de analista de sistemas 2do año, tengo que hacer un programa importante (para mi nivel).
Es un programa utilizando listas enlazadas con archivos obiamente.
el problema que me surge es: yo creo el archivo con un procedimiento asi:

"Me" se refiere a metodo estructural.
----------
procedure crearMeDatos(var meDatos:tipomeDatos);
var
rc:tiporegcontroldatos;

begin
assignFILE(medatos.datos,_ruta+_archdatos);
assignFILE(medatos.control,_ruta+_archcontrol);
{$I-} //debilito el control de errores

reset(medatos.control);
if ioresult <>0
then
begin
rewrite(medatos.control);
rc.primero:=_posNula;
rc.ultimo:=_posNula;
rc.borrados:=_posNula;
rc.total:=0;
write(medatos.control,rc);
end;
reset(medatos.datos);
if ioresult <>0
then
rewrite(medatos.datos);

close(medatos.control);
close(medatos.datos);
{$I+}
end;

y luego ya en la aplicacion, al hacer clik en un "boton de altas" debo ingresar los datos ingresados en los edit correspondientes, hasta ahi joya, ahora el problema me surge en el procedimiento "abrirMe"

el boton "dar altas" lo que hace es esto:

procedure TForm2.Button1Click(Sender: TObject);
var
reg:tipoRegDatos;
pos:tipoPos;
begin
reg.clave1:=strtoint(edit1.Text);
reg.clave2:=edit2.Text;
reg.nombre:=edit3.Text;
abrirMeDatos(meDatos); <------------------------cuando entra aqui surge el problema-----------------


insertarDatos(meDatos,reg,pos);
showmessage('fue ingresado');
cerrarMeDatos(meDatos);
end;
-------------------------------
procedure abrirMeDatos( var MeDatos:tipoMeDatos);
begin
reset(medatos.datos);
reset(medatos.control);
end;


espero haberme explicado, el error que me salta es: (I/O error102).
Soy nuevo en esto de listas y me cuesta bastante y el tiempo me corre,gracias por haberlo leido y si alguien iene alguna idea es bienvenida, gracias!!!

Casimiro Notevi
25-08-2012, 10:52:00
Hola, bienvenido a clubdelphi, por favor, lee nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php), gracias por tu colaboración.

Este mensaje no puede ir en "Debates" porque no es ningún debate, ¿verdad?, así que lo pasaré a "Varios"

Procura poner títulos descriptivos a tus preguntas, sirve luego para hacer búsquedas y tener todo bien organizado, ya que "duda con un programita" no dice nada de lo que trata en el hilo.

También recuerda usar las etiquetas/tags cuando pongas código fuente, ejemplo:

http://neftali.clubdelphi.com/images/UtilizarTAGs.png


Y de momento, nada más, todas estas cosas les ocurre a los nuevos cuando todavía no han leído nuestra guía de estilo. (http://www.clubdelphi.com/foros/guiaestilo.php)

Por cierto, ¿has seguido paso a paso el programa con el depurador?.

roman
25-08-2012, 16:01:49
Bueno, si se revisa la ayuda de delphi (Runtime errors) el error es bastante claro:


102 File not assigned

Reported by Reset, Rewrite, Append, Rename, or Erase if the file variable has not
been assigned a name through a call to Assign or AssignFile.


Posiblemente no llamas a tu procedimiento crearMeDatos antes de llamar a abrirMeDatos.

// Saludos

ecfisa
25-08-2012, 20:33:31
Hola maxi915.

Opino del mismo modo que que roman.

También aprovecho para desaconsejarte el antiguo uso de {$IOCHECKS ON}/{$IOCHECKS OFF} en favor de [try/except (http://edn.embarcadero.com/article/25665)].

procedure crearMeDatos(var meDatos:tipomeDatos);
var
rc: tiporegcontroldatos;
begin
AssignFile(medatos.control,_ruta + _archcontrol);
try
Reset(medatos.control);
except
Rewrite(metadatos.control);
rc.primero := _posNula;
rc.ultimo := _posNula;
rc.borrados := _posNula;
rc.total := 0;
Write(medatos.control,rc);
end;
Close(medatos.control);

AssignFfile(medatos.datos,_ruta+_archdatos);
try
Reset(medatos.datos);
except
Rewrite(medatos.datos);
end;
Close(medatos.datos);
end;


Saludos.

maxi915
02-09-2012, 01:54:31
Hola, soy estudiante de programacion, y tengo que hacer un trabajo obligatorio, el tema es que me salta error en el procedimiento abrirMeDatos:

procedure abrirMeDatos( var MeDatos:tipoMeDatos);
begin
reset(medatos.datos);
reset(medatos.control);
end;

ya tengo creado el procedimiento crearMe en el momento de crear el formulario, pero me salta error 102 en el proc abrirMedatos.
alguna sugerencia?

maxi915
02-09-2012, 02:07:04
Muchas gracias por las sugerencias, ya cambie la forma del crearMeDatos que me sugirieron.
Igualmente sigo con el mismo problema, error 102.

El procedimiento CrearMeDatos lo llamo en el TForm1.FormCreate(Sender: TObject); para que lo cree en el momento de iniciar el formulario.

no puedo solucionar el problema,igualmente gracias por los aportes

ecfisa
02-09-2012, 02:29:51
Hola maxi915.

Combiné tus mensajes observando el punto 6 de la guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php):

Nadie me contesta

Si te encuentras en esta situación, te aconsejaría que en vez de abrir otro tema, con lo que podría perderse información previa sobre el tema que expusiste en un principio, siguieses el tema que tu mismo iniciaste en su día, escribiendo una nueva contestación. De esta manera el tema se actualizará y pasará a la cabecera del foro, y se marcará como no leido para el resto de usuarios. Así evitamos duplicar información innecesariamente.

Otro motivo por el que es posible que no te hayan contestado es porque puedes haberte explicado mal. Sería conveniente en este caso que trataras de ampliar la información que has escrito en el primer mensaje de tu tema. Así podrías ayudar al resto de usuarios a que respondan más claramente.


En cuanto al problema sería interesante poder ver la parte del código donde haces la declaración de tipos. No es necesario que sea muy detallado, solo la declaración de los tipos como para poder hacer algunas pruebas.

Saludos.:)

maxi915
03-09-2012, 01:27:16
gracias por los aportes y disculpen mi ignorancia (mezclada con apuro) al expresar mis dudas.
les cuento que solucione el problema y estaba en que no debia declarar la variable ME_d:tipoMeDatos, al poner en uses las units que voi a utilizar parece q no es necesario declarar variables.

prometo ponerme a leer la guia de uso del foro. gracias!!

Casimiro Notevi
03-09-2012, 01:33:05
prometo ponerme a leer la guia de uso del foro. gracias!!
Estsá escrito, ya no puedes decir que no lo sabías :D