Oppure

Loading
28/06/10 12:20
Ranger12
Come posso creare dei database in pascal?? Una sorta di Record che però non "dimentichino" ciò che è stato memorizzato... Ho trovato che si possono usare dei File Record ma sinceramente non riesco ad usarli...

Ho fatto il programma-database cosi:

program data;
type libri=record
          titolo: string;
          numero: integer;
     end;

var libro:libri;

begin

libro.titolo:='Ciao';
libro.numero:=123;

end.


E il programma principale cosi:
program prova;
var libro:libri;
    file_libri: file of libri;

begin
assign(file_libri, 'C:\Users\Matteo\Documents\data.pas');
reset(file_libri);

while not eof(file_libri) do
begin

read(file_libri,libro);

writeln('titolo: ',libro.titolo);
writeln('titolo: ',libro.numero);

end;

close(file_libri);

readln
end.


In pratica il programma principale non riesce a leggere il record contenuto nell'altro programma, non lo trova nonostante il percorso indicato nell'assign sia giusto.
Ultima modifica effettuata da Ranger12 28/06/10 12:22
aaa
28/06/10 15:15
Saladino
unit ULibri;
//Metterlo in una unit rafforza il concetto di portabilità
interface

type
  Libri = record
           Titolo : String[50];
           Numero : Integer;
         end;

  FLibri =  file of Libri;

function Crea(NomeFile : String) : boolean;

function Aggiungi(var F : FLibri; var Rec : Libri) : boolean;

procedure LeggieStampa(var F : FLibri);

//Qui puoi mettere altre funzioni e procedure per gestire i tuoi record

implementation

uses
   SysUtils;

function Crea(NomeFile : String) : boolean;
Var
 NewF : FLibri;
begin
 if FileExists(NomeFile) then //Vede se il file esiste
  begin
   Crea := False;
   Exit; //Se togli Exit allora puoi usare un else
  end;
 Assign(NewF ,NomeFile);
 Rewrite(NewF);
 Close(NewF);
 Crea := True;
end;

//Quando vieni ad aggiungere sarebbe meglio usare un buon
//algoritmo di ordinamento
function Aggiungi(var F : FLibri; var Rec : Libri) : boolean;
Var
 OldPos : Integer;
begin
 (* {$-I}
 Reset(F);
 {$+I} *)

 if IoResult <> 0 then
  begin
   Aggiungi := False;
   Exit;
  end;
 Seek(F ,FileSize(F)); //Seek(F ,P) va alla posizione P del file F
 write(F ,Rec);
 Aggiungi := True;
end;

procedure LeggieStampa(var F : FLibri);
Var
 Rec : Libri;
begin
 (* {$-I}
 Reset(F);
 {$+I} *)
 Seek(F ,0);
 while not Eof(F) do
  begin
   read(F ,Rec);
   with Rec do
    begin
     writeln(Titolo);
     writeln(Numero);
    end;
  end;
end;

end.


program prova;
uses
 ULibri ,SysUtils;

Var
 Libro    : Libri;
 F        : FLibri;
 Continua : Char;
 Tit      : String[50];
 Num      : Integer;
begin
 if not Crea('Prova.dat') then
  writeln('Errore!')
   else
    writeln('File creato!');

 Assign(F ,'Prova.dat');
 {$-I}
 Reset(F);
 {$+I}
 if IoResult <> 0 then
  begin
   writeln('Errore di lettura!');
   readln;
   Halt(0);
  end;

 repeat
   //Non faccio il controllo delle variabili
   writeln('Inserire il nome del libro');
   Readln(Tit);
   Libro.Titolo := Tit;
   writeln('Inserire il numero del libro');
   {$-I}
   Readln(Num);
   {$+I}
   //if Ioresult <> 0 then ...
   Libro.Numero := Num;

   if not Aggiungi(F ,Libro) then
   begin
    writeln('Errore nella scrittura del file!');
   end
    else
     writeln('Aggiunto il nuovo record!');

   writeln('Vuoi ancora continuare?');
   Readln(Continua);

 until (Continua = 'N') or ((Continua = 'n'));

 writeln('Lettura del file...');
 LeggieStampa(F);
 Close(F);
 readln;
end.


aaa
28/06/10 20:33
Poggi Marco
Il pascal, permette la gestione dei file.
Ecco una guida con alcune funzioni: marinsalta.net/pascal/…
aaa