Logo Hardware.com.br
Salese
Salese Novo Membro Registrado
4 Mensagens 0 Curtidas

Runtime Error 131 no Pascal (Dev-Pasal)

#1 Por Salese 24/11/2006 - 17:49
Este foi um programa desenvolvido pelo usuario PajoneiS que tentei executar mas está dando Runtime Error 131 quand vou cadastrar o Codigo do Produto. Ele da o erro e sai do programa, não sa pra ve, só consegui identificar dando printscreen bem rapido, vejam:


program loja;
uses crt;
type registro=record
nome:string;
cod,quant:integer;
end;
mat=array[1..40] of registro;
var arq:file of registro;
reg:registro;
ch:char;
p:mat;
procedure cad(a:registro);
var codc:char;
regcod,axou:integer;
xcod:integer;
b:registro;
begin
axou:=0;
writeln('Deseja cadastrar o produto? (S/N):');
readln(codc);
if (codc='s') or (codc='S') then
begin
clrscr;
writeln('Digite o codigo do produto:');
readln(xcod);
while not eof(arq) do
begin
read(arq,b);
if b.cod = xcod then
axou:=1;
end;
if axou = 1 then
begin
writeln('Produto ja cadastrado!!!');
readkey;
end
else
begin
seek(arq,filepos(arq)-1);
reg.cod:=xcod;
writeln('Digite o nome do produto');
readln(reg.nome);
writeln('Digite a quantidade do produto');
readln(reg.quant);
write(arq,reg);
end;
end;
end;

procedure listar(a:registro);
var codl:integer;
begin
writeln('Escolha uma opcao para listagem:');
writeln('1 - Listar todos os produtos');
writeln('2 - listar produtos com mais de 10 unidades');
readln(codl);
if codl=1 then
begin
while not eof(arq) do
begin
read(arq,a);
writeln(a.cod,' ',a.nome,' ',a.quant);
end;
end;
if codl=2 then
begin
while not eof(arq) do
begin
read(arq,a);
if a.quant > 10 then
writeln(a.cod,' ',a.nome,' ',a.quant);
end;
end;
readkey;
end;
procedure procura(a:registro);
var codigo,cod2:integer;
xnome:string;
begin
writeln('Deseja pesquisar pelo (1) Codigo ou (2) Nome:');
readln(codigo);
if codigo=1 then
begin
writeln('Informe o codigo:');
readln(cod2);
while not eof(arq) do
begin
read(arq,a);
if a.cod=codigo then
writeln(a.cod,' ',a.nome,' ',a.quant)
end;
end;
if codigo=2 then
begin
writeln('Informe o nome:');
readln;
readln(xnome);
while not eof(arq) do
begin
read(arq,a);
if a.nome=xnome then
writeln(a.cod,' ',a.nome)
end;
end;
readkey;
end;
procedure alterar(a:registro);
var ynome:string;
begin
writeln('Digite o nome que deseja alterar:');
readln(ynome);
while not eof(arq) do
begin
read(arq,a);
if a.nome=ynome then
begin
writeln('Digite o novo nome:');
readln(a.nome);
seek(arq,filepos(arq)-1);
write(arq,a);
end;
end;
end;
procedure ordenar(b:mat);
var i,j,k:integer;
aux:registro;
begin
i:=1;
while not eof(arq) do
begin
read(arq,b[i]);
i:=i+1;
end;
for j:=1 to i-1 do
for k:=j+1 to i do
if b[j].nome > b[k].nome then
begin
aux:=b[j];
b[j]:=b[k];
b[k]:=aux;
end;
for j:=1 to i do
writeln(b[j].nome,' - ',b[j].cod);
readkey;
end;
begin
repeat
clrscr;
gotoxy(1,1);
writeln('Digite opcao:');
gotoxy(3,3);
writeln('1 - Cadastrar Produtos');
gotoxy(3,4);
writeln('2 - Listar Produtos');
gotoxy(3,5);
writeln('3 - Pesquisar Produtos');
gotoxy(3,6);
writeln('4 - Alterar Produtos');
gotoxy(3,7);
writeln('5 - Ordenar Produtos');
gotoxy(3,8);
writeln('0 - Sair');
assign(arq,'c:\temp\dbp.dat');
reset(arq);
if ioresult<>0 then
rewrite(arq);
gotoxy(14,1);
ch:=readkey;
case ch of
'1':cad(reg);
'2':listar(reg);
'3'rocura(reg);
'4':alterar(reg);
'5':ordenar(p);
end;
until ch='0';
end.


Estou compilando no Dev-Pascal, o que poderia estar acontecendo?

Abraço!
Responder
jqueiroz
jqueiroz Cyber Highlander Registrado
104K Mensagens 5.7K Curtidas
#2 Por jqueiroz
24/11/2006 - 17:57
https://www.hardware.com.br/comunidade/codigo-postar/229032/

EDIT/PS: Quando eu usava Turbo Pascal (ou seja, na era pré-cambriana), tinha um macete pra acesso a arquivos não dar "Runtime Error".

Colocava-se o trecho onde se faria o acesso ao arquivo (ou seja, as operações "open", "read", "write", "seek", etc) entre um par de comentários {$i-} e {$i+}.

Em seguida, logo após a operação, consultava-se a variável IOResult para saber se a operação tinha tido sucesso (0 = IOResult) ou não (0 <> IOResult). Daí, poderia se tomar alguma ação corretiva.
"chmod 777 nunca ajudou ninguém" (c) 2002-2021 JQueiroz/FGdH
Conheça o Blog do Zekke
GBastos
GBastos Super Participante Registrado
777 Mensagens 4 Curtidas
#3 Por GBastos
26/11/2006 - 00:27
jqueiroz disse:
https://www.hardware.com.br/comunidade/codigo-postar/229032/

EDIT/PS: Quando eu usava Turbo Pascal (ou seja, na era pré-cambriana), tinha um macete pra acesso a arquivos não dar "Runtime Error".

Colocava-se o trecho onde se faria o acesso ao arquivo (ou seja, as operações "open", "read", "write", "seek", etc) entre um par de comentários {$i-} e {$i+}.

Em seguida, logo após a operação, consultava-se a variável IOResult para saber se a operação tinha tido sucesso (0 = IOResult) ou não (0 <> IOResult). Daí, poderia se tomar alguma ação corretiva.


Esse macete é clássico.. big_green.png
Mas em que momento exatamente dá o erro? Isso ajuda a descobrir onde está o problema.
Ever tried. Ever failed. No matter. Try again. Fail again. Fail better.
Responder Tópico
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal