Gestione di una biblioteca

Materie:Appunti
Categoria:Ricerche
Download:398
Data:19.02.2001
Numero di pagine:14
Formato di file:.doc (Microsoft Word)
Download   Anteprima
gestione-biblioteca_1.zip (Dimensione: 453.7 Kb)
trucheck.it_gestione-di-una-biblioteca.doc     559 Kb
readme.txt     59 Bytes


Testo

REALIZZATA DA: Alessandro Pastro & Michele Poloni
CLASSE 5B/ABACUS
INDICE:
1. Introduzione
1.1 Obiettivi del progetto
1.2 Descrizione generale del progetto
2. Hardware utilizzato
2.1 Penna ottica
2.2 Personal Computer
2.3 Altro: rete locale tutto il materiale relativo
3. Software utilizzato
3.1 Sistema Operativo: Windows NT Versione 4.0
3.2 Borland Delphi Versione 3.2
3.2.1 DataBase Desktop Versione 7.0
4. Gestione rete locale
5. Gestione della base di dati
5.1 Struttura database
5.2 SQL
6. Manuale utente
6.1 Utilizzo del programma principale
6.2 Utilizzo del programma in rete
7. Conclusioni
8. Glossario/Bibliografia
9. APPENDICE
9.1 Penna ottica
9.2 Listati del programma
1. INTRODUZIONE
1.1 OBBIETTIVI DEL PROGETTO
Si vuole automatizzare la gestione di una biblioteca utilizzando un PC in cui è presente un database che contiene tutti i dati relativi ai testi ed ai lettori. Si ipotizza quindi una futura rete locale relativa all’edificio da cui sarà possibile gestire la prenotazione e i prestiti dei testi.
1.2 DESCRIZIONE GENERALE DEL PROGETTO
Il progetto si propone di automatizzare la gestione di una biblioteca.
Si tratta di gestire la catalogazione dei testi, i prestiti, le prenotazioni, l’elenco dei lettori e la disponibilità o meno dei testi in possesso della biblioteca.
A causa del limitato tempo a nostra disposizione questa parte del progetto da noi realizzata non è in grado di gestire l’elenco dei testi, si suppone quindi che la lista di questi sia già presente in archivio, attraverso l’utilizzo di software per la gestione di tabelle, quale DataBase Desktop.
Per facilitare l’immissione dei dati riguardanti libri e riviste si è pensato di far uso della penna ottica, andando a leggere dei codici a barre. I dati introdotti al momento del prestito sono il numero d’inventario del testo, prestampato e quindi applicato sul volume, ed il codice personale del lettore, acquisito da una tessera dove sono indicati i dati del lettore ed il suddetto codice numerico, espresso in forma decimale e quindi sotto forma di codice a barre.
La catalogazione avviene sul PC che contiene l’archivio completo dei dati, mentre la prenotazione può avvenire sia su PC collegati in rete sia sul PC della biblioteca, quest’operazione non permette l’utilizzo della penna ottica, si richiedono quindi il titolo del libro ed alcuni dati riguardanti il lettore. La gestione del prestito può avvenire solo con il PC della biblioteca.
Complessivamente per la realizzazione di questo progetto abbiamo avuto a nostra disposizione circa 45 ore. Il nostro lavoro si è suddiviso in due parti: una prima parte per lo studio teorico delle funzioni che in linea di massima avrebbe dovuto poter eseguire, ed un elenco dei problemi da risolvere prima di iniziare il lavoro pratico di realizzazione. Questa parte del lavoro si è rivelata più complessa delle nostre previsioni; gli sono quindi state dedicate circa 15 ore. La seconda parte, che comprende la realizzazione pratica e la soluzione di ulteriori problemi quali l’effettuazione di alcuni controlli, la gestione in rete di DataBase e l’utilizzo della penna ottica, argomento e periferica da noi mai trattati, sono state dedicate circa 20 ore. Il rimante tempo è stato dedicato alla stesura della relativa documentazione, per poter seguire i nostri progressi e per facilitare le modifiche effettuate dopo i vari test effettuati per verificare la funzionalità del progetto, e per permettere un futuro completamento delle parti non realizzate.
Ecco uno schema della gestione della biblioteca
2. HARDWARE UTILIZZATO
- PENNA OTTICA
- PERSONAL COMPUTER
- RETE LOCALE
2.1 PENNA OTTICA
La penna ottica da noi utilizzata è il modello HEPS-1500 della Hewlett Packard e va collegata assieme alla tastiera direttamente alla porta seriale attraverso un cavo in dotazione con l’acquisto della penna ottica.
Come già detto permette di velocizzare l’operazione di prestito dei testi in quanto è in grado di leggere dei codice a barre, corrispondenti al numero di inventario del testo ed al codice personale ed univoco del lettore, appositamente stampati ed applicati sul volume e sulla tessera personale.
Per fare ciò è sufficiente “passare” il lettore sopra il codice, il verso di scorrimento è indifferente, una o più volte fino a quando viene emesso il suono acustico indicante l’avvenuta lettura del codice.
(*) Per ulteriori informazioni e dettagli tecnici si rimanda agli allegati in APPENDICE.
2.2 PERSONAL COMPUTER
Per la realizzazione di questo progetto abbiamo utilizzato un personal computer PENTIUM 166 con una RAM di 64 MB e con Windows NT come sistema operativo.
Questo computer fa parte di una rete locale di tipo ETHERNET .
Per l’esecuzione del programma si richiede l’utilizzo di macchine con prestazioni di questo tipo o superiori con un minimo di 16 MByte di memoria primaria, se ne consigliano comunque 32.
2.3 RETE LOCALE
Il lavoro è stato svolto utilizzando due diversi laboratori, entrambi forniti di una rete a bus di tipo ETHERNET con cablaggio UTP 5, che permette trasferimenti di dati ad una velocità di 100 Mbit/sec, sfruttata per la progettazione delle funzioni per la gestione delle prenotazioni.
Per poter effettuare le prenotazioni da una stazione remota, abbiamo pensato di mantenere il database e i due file eseguibili (con estensione EXE), il programma generale per la completa gestione della biblioteca ed il programma per le prenotazioni in rete, nel computer supposto in biblioteca in una cartella condivisa da tutti gli utenti.
L’organizzazione della rete provvederà a controllare i casi di accesso contemporaneo ad uno stesso record segnalando adeguatamente l’errore.
3. SOFTWARE UTILIZZATO

- SISTEMA OPERATIVO: WINDOWS NT Versione 4.0
- LINGUAGGIO DI PROGRAMMAZIONE: BORLAND DELPHI Versione 3.2
- DATABASE DESKTOP Versione 7.0
3.1 SISTEMA OPERATIVO: WINDOWS NT Versione 4.0
In ogni Personal Computer della nostra rete è installato il sistema operativo a 32 bit MICROSOFT WINDOWS NT CLIENT, appositamente studiato per la gestione di reti, ad eccezione del server di rete che utilizza MICROSOFT WINDOWS NT SERVER.
3.2 BORLAND DELPHI Versione 3.2
E’ un linguaggio di programmazione ad alto livello di tipo visuale a 32 bit, quindi studiato per sviluppare programmi che possano essere eseguiti con sistema operativo Windows 95 o NT. Questo linguaggio utilizza la struttura e l’organizzazione di base del linguaggio ad alto livello Pascal.
Il Delphi è un linguaggio orientato alla programmazione ad oggetti, dando con ciò la possibilità di gestire aree di memoria con strutture dati complesse. Queste strutture possono infatti essere private oppure pubbliche a discrezione del programmatore.
Ad esempio dichiarando una struttura privata si ha la sicurezza che la stessa non verrà modificata dagli utenti più esperti. Avendo invece una struttura dichiarata come pubblica i dati sono condivisibili da più utenti.
Questo linguaggio di programmazione si è inoltre rivelato molto efficace anche nella gestione della condivisione in rete di database. Maggiori dettagli saranno forniti nel paragrafo riguardante la gestione della rete.
3.2.1 DATABASE DESKTOP Versione 7.0
E’ un sottoprogramma presente all’interno del pacchetto Delphi che permette la creazione di tabelle di tipo paradox (tabelle da noi usate) o altro.
Con questo software si ha la possibilità di creare le tabelle non da programma, in maniera run-time con istruzioni SQL, ma attraverso l’uso di un’interfaccia che guida il programmatore nella creazione di un database in maniera rapida e ottimale.
Utilizzando questo programma si ha anche la possibilità di lavorare su tabelle già esistenti inserendo, modificando ed eliminando record all’interno delle tabelle senza scrivere nessuna riga di codice.
Utilizzando questo software, oltre che per creare le tabelle del database, inseriamo l’elenco dei testi a disposizione dei lettori, parte, come già detto, non gestibile con l’uso di questa parte di progetto da noi sviluppato.
4. GESTIONE RETE LOCALE
Per testare il risultato del nostro lavoro per prima cosa abbiamo, come già detto, copiato i due eseguibili ed il DataBase in una cartella nella memoria di massa del server.
Questa cartella è stata quindi resa condivisibile da tutti gli utenti della rete, dandogli così la possibilità di lavorare sullo stesso database per evitare quindi saranno problemi di perdita, aggiornamento e ridondanza di dati, dovuti ad accessi contemporanei ad una stessa parte del DataBase.
Il linguaggio di programmazione da noi usato ( BORLAND DELPHI Ver. 3.2) gestirà, infatti, automaticamente l’accesso alle varie tabelle, garantendo una certa sicurezza sull’aggiornamento dei record, in modo tale da non avere collisioni in scrittura. Questo sarà possibile attraverso un’operazione di “lock” sul record aperto da parte della stazione che per prima vorrà effettuare un’operazione di prenotazione (l’unica possibile da stazioni remote), riguardante il testo registrato su tale record.
5. GESTIONE DELLA BASE DATI
- STRUTTURA DATABASE
- ISTRUZIONI SQL
5.1 STRUTTURA DATABASE
E’ qui riportato lo schema che riporta come è stato organizzato il DataBase attraverso l’utilizzo di tabelle.
Sono quindi evidenziati il nome delle tabelle, dei vari campi e delle chiavi primarie.
Inoltre le frecce indicano i collegamenti che mettono in relazione i dati contenuti nell’archivio.
5.2 SQL
E’ un linguaggio strutturato, non procedurale di interrogazione delle basi dati, cioè non pretende la descrizione dettagliata (con un algoritmo) dei passi necessari per lo svolgimento delle operazioni di costruzione o estrazione delle informazioni.
A grandi linee le istruzioni SQL si possono dividere in:
Istruzioni per la definizione o la modifica dello schema relazionale.
Istruzioni di interrogazione della base di dati.
Istruzioni per la modifica della base di dati.
Altri comandi (sicurezza, concorrenza…).
Nella terminologia SQL le relazioni si chiamano tabelle, le tuple righe e gli attributi si chiamano colonne.
Questo linguaggio è stato da noi utilizzato per poter visualizzare l’elenco dei titoli dei testi che sono stati prestati o prenotati.

6. MANUALE UTENTE
Introduzione:
Il programma permette di gestire automaticamente una biblioteca con accesso remoto.
Per gestire i prestiti dei libri e la loro restituzione utilizziamo una penna ottica che permette di velocizzare l'acquisizione dei dati in quanto sui libri e sui libretti dei lettori sono presenti dei codici a barre prestampati con Microsoft Word. Il prestito di un libro potrà quindi avvenire soltanto tramite il PC presente in biblioteca per ovvi motivi di acquisizione dei dati tramite penna ottica. Dai terminali remoti invece sarà possibile richiedere un testo tramite prenotazione introducendo il proprio nome, cognome e codice, ed il titolo del libro da prenotare. Se il libro non è disponibile allora il programma lo segnalerà con un messaggio inerente.
Per quanto riguarda invece il prestito, una volta raccolti i dati il programma provvederà a tutti i controlli del caso e se ci saranno errori li segnalerà all’utente.
In caso di impossibilità di uso della penna ottica c’è la possibilità di introdurre i dati manualmente anche nella sede della biblioteca.
Quando il programma viene avviato controllerà le date delle prenotazioni e dopo un mese provvederà ad eliminare la prenotazione.
Naturalmente se un libro è stato prenotato da un lettore soltanto quel dato lettore potrà richiederlo in prestito. Ogni lettore potrà avere in prestito un massimo di libri. Questo valore potrà essere definito dall’utente.
6.1 UTILIZZO DEL PROGRAMMA PRINCIPALE
All’avvio del programma presente in biblioteca, dopo la visualizzazione di una foto durante il caricamento ,appare la Form principale

Da qui si ha accesso a tutte le funzioni del programma.
Dal menu File si può scegliere:
- Configura: per impostare il numero massimo di libri che un lettore può avere in prestito, o prenotare.
- Annulla prenotazione: per cancella una prenotazione dovuta ad un errato inserimento dei dati.
- Resetta DataBase: opzione aggiuntiva per cancellare tutti i prestiti e le prenotazioni.
- Esci: per uscire dal programma.
Dal menu Altro si può scegliere:
- Info…: per visualizzare una Form riportante alcune informazioni riguardanti i due programmatori.
Sono poi selezionabili dei bottoni per compiere le varie operazioni:
- Inizio Prestito: visualizza la Form per l’immissione del numero d’inventario del testo da avere in prestito ed il codice del lettore. Si ricorda che questi codici sono inseribili anche attraverso l’utilizzo della penna ottica. Il prestito ha una durata massima di un mese.
- Fine Prestito: visualizza la Form per l’immissione del numero d’inventario del testo da restituire ed il codice del lettore. Anche questi codici sono inseribili attraverso l’utilizzo della penna ottica.
- Prenotazione Libri: visualizza la Form che permette di prenotare un testo per un periodo massimo di un mese. Per fare ciò bisogna inserire il titolo del libro desiderato ed i seguenti dati: cognome, nome, classe e codice personale (per maggior sicurezza).
- (Gestione Elenco Libri): opzione non disponibile perché non realizzata.
- Gestione Elenco Lettori: permette la gestione (quindi inserimento, modifica, eliminazione) dell’elenco dei lettori di una classe.
- Libri Non Disponibili: permette la visualizzazione dell’elenco dei testi non presenti in biblioteca o solamente consultabili a causa della loro prenotazione.
- Esci: per uscire dal programma.
Si sottolinea che ad ogni avvio del programma vengono controllate tutte le prenotazioni per eliminare quelle scadute.
6.2 UTILIZZO DEL PROGRAMMA PER LA PRENOTAZIONE DA STAZIONE REMOTA
All’avvio del programma per prenotare dei testi da stazioni remote collegate tramite rete locale al PC presente in biblioteca appare la Form che richiede i dati relativi, quindi: titolo del testo, cognome, nome, classe e codice del lettore.
Dal menu File è inoltre possibile cancellare la prenotazione, mentre dal menu Altro si possono visualizzare le informazioni sui programmatori.
7. CONCLUSIONI
Abbiamo iniziato a lavorare sul progetto il 19 Marzo e lo abbiamo ultimato il 28 Maggio.
Questo progetto lavora a cavallo delle materie di sistemi (lavoro in rete) e informatica (linguaggio di programmazione).
Il programma consente di prenotare dei libri da una stazione remota e di ottenerli in prestito dalla biblioteca. Per necessità di tempo non abbiamo gestito l’introduzione dei libri nell’archivio (gli abbiamo inseriti con il DataBase Desktop).
8. BIBLIOGRAFIA
Nel realizzare questo progetto abbiamo utilizzato i seguenti supporti:
- Manuale in linea di Borland Delphi3.2
- Titolo: Sistemi 3
Autore: Manicone-Mazzetti
Casa Editrice: Tramontana
- Titolo: Nuovo Corso di Informatica 3
Autore: Giuseppe Callegarin
Casa Editrice: CEDAM
9. APPENDICE
9.1 PENNA OTTICA
Da notare nella creazione dei codici a barre è la particolare sequenza di caratteri da utilizzare.
È qui di seguito riportata una tabella con degli esempi di codici numerici tradotti con un carattere True Type, denominato 39251, (codice 39) in modo da renderli leggibili attraverso l’uso della penna ottica.
Per fare ciò bisogna utilizzare il carattere di controllo ‘e’ da porre in testa ed in coda al codice da tradurre.
Codice da codificare
Come viene codificato
Codice a barre corrispondente
0000
e0000e
e0000e
0001
e0001e
e0001e
0002
e0002e
e0002e
0003
e0003e
e0003e
0004
e0004e
e0004e
0005
e0005e
e0005e
0006
e0006e
e0006e
0007
e0007e
e0007e
0008
e0008e
e0008e
0009
e0009e
e0009e
0010
e0010e
e0010e
Per quanto riguarda l’installazione, invece, bisogna seguire questo schema:
1) Penna ottica (lettore codici a barre)
2) decodificatore dei codici
3) connettore tastiera
4) connettore porta seriale
9.2 LISTATI DELLE PARTI DEL PROGRAMMA
Questo programma consente la gestione in maniera automatica di una biblioteca.
L’utilizzo del Delphi consente una grande chiarezza nelle possibilità di lavoro offerte dal programma.
Ecco ora interfaccia per interfaccia le varie parti del programma:
Programma principale
- FORM PRINCIPALE
- NOME FILE: Biblio.pas-Biblio.dfm
- DIMENSIONE FILES: 10 KB
- SCOPO: E’ la finestra iniziale che appare all’avvio del programma principale e dà accesso a tutte le altre funzioni disponibili.
- UTILIZZO: Cliccando sul bottone corrispondente all’operazione da eseguire si passa al servizio desiderato per gestire i prestiti, le prenotazioni e gli elenchi dei lettori.
- LISTATO:
unit Biblio;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, ComCtrls, Menus, Buttons, Grids, Calendar, StdCtrls, unit4, Db,
DBTables;
type
TForm1 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Timer1: TTimer;
MainMenu1: TMainMenu;
File1: TMenuItem;
Altro1: TMenuItem;
Esci1: TMenuItem;
Calendar1: TCalendar;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
SpeedButton4: TSpeedButton;
SpeedButton5: TSpeedButton;
Edit1: TEdit;
SpeedButton7: TSpeedButton;
Panel3: TPanel;
SpeedButton6: TSpeedButton;
C1: TMenuItem;
Info1: TMenuItem;
inventario: TTable;
prenotazioni: TTable;
prenotazioniCodicelettore: TIntegerField;
prenotazioniCodiceLibroPrenotato: TIntegerField;
prenotazioniDatarestituzione: TStringField;
N1: TMenuItem;
Resettadatabase1: TMenuItem;
Lettori: TTable;
prestiti: TTable;
procedure FormShow(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure SpeedButton6Click(Sender: TObject);
procedure Esci1Click(Sender: TObject);
procedure SpeedButton7Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure C1Click(Sender: TObject);
procedure SpeedButton5Click(Sender: TObject);
procedure SpeedButton4Click(Sender: TObject);
procedure Info1Click(Sender: TObject);
procedure Resettadatabase1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
miosplash:Tsplashform;
percorso:string;
end;
var
Form1: TForm1;
implementation
uses Gestionelettori, Iniprest, Fineprest, Conf, Scadoggi,
prenotaz, Info;
{$R *.DFM}
procedure TForm1.FormShow(Sender: TObject);
begin
if miosplash.Showing then
begin
miosplash.Hide;
miosplash.Free;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Panel2.caption:=timetostr(time);
edit1.text:=datetostr(date);
end;
procedure TForm1.SpeedButton6Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.Esci1Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.SpeedButton7Click(Sender: TObject);
begin
form3.show;
form3.table1.active:=true;
form3.table2.active:=true;
form3.table1.refresh;
form3.table2.refresh;
end;
procedure TForm1.FormCreate(Sender: TObject);
var data,datao,dir,cip:string;pol:integer;
data1,data2,app,data1o,data2o,appo,zip,opp:integer;
begin
GetDir(0,dir);
Form1.percorso:=dir;
dir:='\tabelle';
Form1.percorso:=Form1.percorso+dir;
prenotazioni.databasename:=Form1.percorso;
prenotazioni.tablename:='prenotazioni.db';
inventario.databasename:=Form1.percorso;
inventario.tablename:='inventario.db';
speedbutton3.enabled:=false;
inventario.active:=true;
prenotazioni.active:=true;
inventario.refresh;
prenotazioni.refresh;
data:=datetostr(date);
data1:=strtoint(copy(data,1,2));
data2:=strtoint(copy(data,7,4));
app:=strtoint(copy(data,4,2));
opp:=app;
if opp=12 then begin opp:=01;app:=opp;zip:=data2;
zip:=zip+1;data2:=zip;end
else opp:=opp+1;
if opp=02 then begin data1:=28;end;
prenotazioni.first;
while not prenotazioni.eof do begin
datao:=(prenotazioni['datarestituzione']);
data1o:=strtoint(copy(datao,1,2));
data2o:=strtoint(copy(datao,7,4));
cip:=copy(datao,5,1);
if cip='/' then appo:=strtoint(copy(datao,4,1))
else appo:=strtoint(copy(datao,4,2));
if (data1=data1o) and(data2o=data2) and (app=appo) then begin
pol:=prenotazioni['codicelibroprenotato'];
inventario.locate('numeroinventario',pol,[lopartialKey,locaseinsensitive]);
inventario.edit;
inventario['disponibile']:='Si';
inventario.post; prenotazioni.next;end
else prenotazioni.Next;
end;
inventario.active:=false;
prenotazioni.active:=false;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
form5.prenotazioni.active:=true;
form5.Configurazione.Active:=true;
form5.inventario.active:=true;
form5.lettori.active:=true;
form5.prestiti.active:=true;
form5.configurazione.refresh;
form5.inventario.refresh;
form5.lettori.Refresh;
form5.prestiti.refresh;
form5.prenotazioni.refresh;
Form5.Show;
end;
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
form6.show;
form6.inventario.active:=true;
form6.lettori.active:=true;
form6.prestiti.active:=true;
form6.inventario.refresh;
form6.lettori.Refresh;
form6.prestiti.refresh;
end;
procedure TForm1.C1Click(Sender: TObject);
begin
form7.show;
end;
procedure TForm1.SpeedButton5Click(Sender: TObject);
begin
form8.show;
end;
procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
form9.prenotazioni.active:=true;
form9.configurazione.active:=true;
form9.Lettori.Active:=true;
form9.titolo.active:=true;
form9.libri.active:=true;
form9.Inventario.active:=true;
form9.inventario.refresh;
form9.configurazione.refresh;
form9.libri.refresh;
form9.lettori.Refresh;
form9.titolo.refresh;
form9.prenotazioni.refresh;
form9.edit1.text:='';
form9.edit2.text:='';
form9.edit3.text:='';
Form9.Show;
end;
procedure TForm1.Info1Click(Sender: TObject);
begin
form10.show;
end;
procedure TForm1.Resettadatabase1Click(Sender: TObject);
var dir:string;
begin
if messagedlg('Sei sicuro di voler resettare la base dati?',mtconfirmation, [mbYes,mbNo],0)=mrYes then
if messagedlg('SEI VERAMENTE SICURO? Tutti i prestiti e prenotazioni in memoria andranno persi!',mtconfirmation, [mbYes,mbNo],0)=mrYes then begin
GetDir(0,dir);
Form1.percorso:=dir;
dir:='\tabelle';
Form1.percorso:=Form1.percorso+dir;
prenotazioni.databasename:=Form1.percorso;
prenotazioni.tablename:='prenotazioni.db';
inventario.databasename:=Form1.percorso;
inventario.tablename:='inventario.db';
lettori.DatabaseName:=form1.percorso;
lettori.tablename:='lettori.db';
prestiti.DatabaseName:=form1.percorso;
prestiti.tablename:='prestiti.db';
inventario.active:=true;
inventario.first;
while not inventario.eof do
begin
inventario.edit;
inventario['disponibile']:='Si';
inventario.post;
inventario.next;
end;
inventario.refresh;
inventario.active:=false;
prenotazioni.emptytable;
prestiti.emptytable;
lettori.active:=true;
lettori.First;
while not lettori.eof do
begin
lettori.edit;
lettori['numlibri']:=0;
lettori['numpren']:=0;
lettori.post;
lettori.next;
end;
lettori.refresh;
lettori.active:=false;
Showmessage('Operazione completata!');
end;
end;
end.
1
1

Esempio