Newsgroup: it.comp.appl.access
Titolo: Gestione Biblioteca

Salve a tutti,
sto sviluppando un database in access per la gestione, tramite semplici
maschere, di una piccola biblioteca parrocchiale. Purtroppo però non ho
molta esperienza con Access (e soprattutto con VBA) quindi mi rivolgo a voi.
Il database, per come l'ho progettato, è composto da 3 tabelle:
  Libri (Autore, Titolo, Volume, Genere, _Scaffale_, _Numerazione_,
NumeroCopie, DisponibilitaPrestito, IDLettoreAttuale)
  Iscritti (_ID_, Cognome, Nome, Indirizzo, CAP, Telefono)
  Prestiti (IDLettore, DataPrestito, _ScaffaleLibro_, _NumerazioneLibro_)
(i campi sottolineati sono chiavi)
La mia intenzione era quella di creare una maschera, il Pannello comandi
(sullo stile del database Northwind), che potesse raccogliere tutte le
funzioni principali (in modo che normalmente agli utenti non sia richiesto
alcun accesso diretto al database). Le funzioni che avevo previsto sono:
- Visualizza tutti i libri
- Ricerca Libro
- Modifica libri
- Inserimento libri
- Visualizza prestiti attuali
- Prestito
- Restituzione
Le prime 5 le ho implementate con semplici maschere in creazione guidata
(tranne per la ricerca, in cui sono servite alcune righe di codice per
visualizzare una maschera filtrata). Le ultime due invece non so come farle
in quanto conosco molto poco VBA per Access...
La loro funzione sarebbe questa:
Prestito: l'utente digita Scaffale e Numerazione (i due campi che
identificano univocamente un libro) e il suo IDLettore. Il programma deve 1)
verificare dalla tabella Iscritti che l'utente esista; 2) trovare il libro
nella tabella Libri, modificare il campo DisponibilitaPrestito a False e
riempire IDLettoreAttuale; 3) aggiungere un record con il prestito corrente
nella tabella Prestiti.
Restituzione: l'utente digita Scaffale e Numerazione e il suo IDLettore. Il
programma deve 1) verificare dalla tabella Iscritti che l'utente esista; 2)
trovare il libro nella tabella Libri, modificare il campo
DisponibilitaPrestito a True e svuotare IDLettoreAttuale; 3) eliminare il
record con il prestito corrente dalla tabella Prestiti.
Sapete darmi qualche hint per sviluppare queste funzioni? In particolare non
ho idea di come, all'interno di codice VBA, aprire i database, cercare
determinati record, e apportare loro modifiche...
Grazie anticipatamente.
-- 
SigiTM
Togli 'NOSPAMMM' per rispondermi.
Visita il sito dei Metal Detector: 
http://listen.to/metaldetector

 ha scritto nel messaggio
news:O%23c.487$_F....@tornado.fastwebnet.it...

Per come hai strutturato il tuo database (ci sarebbe qualcosa da migliorare
creando una tabella Autori da mettere in relazione molti-a-molti con la
tabella Libri: d'altra parte un libro può avere più autori e un autore può
aver scritto più libri) ritengo che la tabella Prestiti sia del tutto
inutile: è sufficiente aggiungere alla tabella Libri un campo DataPrestito.
La tabella Prestiti avrebbe avuto significato solo se tu avessi voluto
mantenere una storia dei prestiti, ma visto che hai deciso che al momento
della restituzione il record della tabella prestiti va cancellato, non
capisco poprio a cosa serve quella tabella: essa contiene alcuni campi della
tabella Libri, e, come dicevo sopra, per eliminarla è sufficiente inserire
il campo DataPrestito nella tabella Libri; questo ti semplificherà di molto
la gestione dei prestiti.
Poi la situazione dei prestiti puoi tranquillamente ricavarla dalla tabella
Libri, visto che i libri che risultano prestati hanno il campo
IDLettoreAttuale significativo al contrario dei libri disponibili; a tale
scopo eliminerei anche il campo DisponibilitaPrestito dalla tabella libri:
per sapere se un libro è disponibile, come dicevo sopra, è sufficiente
analizzare il campo IDLettoreAttuale (l'eliminazione di questo campo ti
semplificherà ulteriormente la procedura dei prestiti).
Ciò premesso e dando per scontato che il campo Numerazione identifichi in
maniera univoca un libro all'interno della biblioteca, io creerei un'unica
maschera a visualizzazione Maschera singola con cui gestirei sia il prestito
che la restituzione del libro. La maschera dovrà avere la tabella Libri come
Origine record; nell'intestazione della maschera inserirei una casella di
testo non associata nella quale digiterei la Numerazione del libro
restituito o da prestare: a fronte dell'evento dopo aggiornamento della
casella di testo Numerazione filtrerei la maschera così che il record
corrente della maschera risulti quello relativo alla transazione (non sto a
dirti come devi fare a flitrare la maschera visto che lo hai già fatto nel
realizzare la funzione Ricerca Libro).
Nel corpo della maschera, a fianco della casella di testo associata al campo
IDLettoreAttuale, inserisci una casella di testo non associata chiamata
NomeLettore; nell'origine controllo di tale casella di testo scrivi:
= DLookup("Cognome & ' ' & Nome"; "Iscritti"; "IDLettoreAttuale =" &
IDLettoreAttuale)
Così facendo in quella casella di testo non associata verrà visualizzato il
cognome ed il nome relativo a IDLettoreAttuale.
Per evitare che inavveritamente l'operatore intervenga su caselle di testo
solamente documentative (autore, titolo, volum ecc.) imposterei a No la
proprietà Abilitato ed a Si la proprietà Bloccato di tutti le caselle di
testo del Corpo della maschera ad eccezione per quelle relative
IDLettoreAttuale.
Inseirei nell'intestazione della maschera anche due pulsanti di comando
chiamati rispettivamente Prestito e Restituzione.
A fronte dell'evento "Su clic" del pulsante di comando Restituzione forzerei
a Null IDLettoreAttuale e DataPrestito, poi salverei il record; quindi al
momento della restituzione digiterei nella casella di testo inserita
nell'intestazione della maschera la numerazione del libro che si ta per
restituire; quando nel corpo della maschera compariranno i dati di quel
libro verificare visivamente che il libro risulti in prestito al lettore che
sta per restituirlo; ciò fatto pigerai il tasto Restituzione.
Invece a fronte dell'evento "Su clic" del pulsante di comando Prestito
verificherai che nella casella di testo sia stato digitato
l'IDLettoreAttuale,  e se OK forzerai nella casella di testo DataPrestito la
data odierna e salverai il record corrente;  quindi al momento di prestare
un libro digiterai la sua numerazione nella casella di testo non associata
inserita nell'intestazione della maschera; quando nel corpo della maschera
compariranno i dati del libro verificare a vista che siano quelli del libro
desiderato e che esso non risulti già in prestito; se tutto è OK digiti
l'IDLettoreAttuale e verifichi che il cognome ed il nome che comparirà nella
casella di testo NomeLettore siano quelli del lettore che sta per ricevere
il libro in prestito (se non comparirà nulla significa che non esiste un
lettore con quell'IDLettoreAttuale); ciò fatto pigi il pulsante di comando
Prestito.
Spero che questo era ciò che volevi.
-- 
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 DataPrestito la data odierna e salverai il record corrente;
Non è che, per quanto riguarda il codice VBA per i comandi associati al clic
di Prestito e Restituzione, sapresti darmi una mano? Almeno uno spunto...
Ciao e grazie





Roberto da casa wrote:
[cut]
Ancora grazie. Funziona tutto.
Un'ultima cosa poi non ti rompo più (almeno per un po' ;) )
Hai presente la casella di testo, all'interno della maschera Prestiti,
contenente nome e cognome del lettore?
Quella in cui mi hai detto di metterci il comando
= DLookup("Cognome & ' ' & Nome"; "Iscritti"; "IDLettoreAttuale =" &
IDLettoreAttuale)
Ecco... quando il campo IDLettoreAttuale è pieno (cioè il libro è prestato a
qualcuno), mi compare correttamente nome e cognome.
Invece, quando il campo IDLettoreAttuale è Null (cioè il libro è
disponibile), nella casella compare la scritta "#Errore".
E' possibile evitare che scriva ciò?
ciao


 SigiTM
