Newsgroup: it.comp.appl.access
Titolo: DB libri: aiuto

In Access 2000 ho replicato, con alcune modifiche il DB LIBRI, per la
gestione della biblioteca, fornito come es. da Access97.
La tabella AUTORI si collega a quella AUTORILIBRO (uno-molti), collegata a
sua volta con la tabella LIBRI (molti-uno). In pratica, AUTORILIBRO serve da
ponte per spezzare una rel. che sarebbe molti-molti (uno stesso autore può
aver scritto molti libri, così come un libro può avere più di un autore).
Il problema è:
come riuscire a far sì che nella tab. AUTORI il nome di un autore  (campi
Cognome e Nome) non si ripeta ? Al momento, ogni autore inserito riceve un
ID assegnato dal campo chiave di tipo contatore; quindi, ad es. posso
imettere 100 volte Eco/Umberto ed ottenere 100 record diversi. Se assegno al
campo "Cognome" la proprietà "Duplicati non ammessi" (Indicizzato=sì),
impedisco la possibilità di inserire eventuali omonimi (e di distinguerli).
Forse sarebbe meglio identificare ogni autore con un codice  particolare,
formato ad esempio dalle prime due lettere del cognome e dalle prime due del
nome più un num. progressivo, ma come fare per avere un inserimento
automatico? (tenendo conto anche che un'opera, specie se in antica edizione,
potrebbe essere di autore ignoto).
Grazie in anticipo a chi vorrà aiutarmi. Vittorio Aprato.
P.S.: posso inviare l'immagine della mappa delle relazioni o maggiori
dettagli sul mio DB.

 ha scritto nel messaggio
news:9hi0qi$sk3$1...@serv1.albacom.net...

Per la tabella AUTORI devi crearti un indice composto dall'insieme dei due
campi Cognome e Nome ed impostare la sua Proprietà indice Univoco a Si; per
crearti un indice, apri la struttura della tabella AUTORI e quindi dal menu
Visualizza seleziona il comando Indici (se trovi altre difficoltà rifatti
vivo oppure, ancora meglio, prova ad aiutarti con l'help).
Così facendo Access ti blocca la possibilità di inserire due volte Paolo
Rossi, ma ti permetterà di inserire Paolo Rossi, Sergio Rossi e Paolo Verdi.
Naturalmente dovrà esistere un solo record che contiene l'autore Autore
Ignoto al quale faranno riferimento tutti i libri che non hanno autore.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 Roberto
OK. fatto e funzionante! Avrei, adesso, un altro problema (...e forse non
sarà l'ultimo...).
Ho pensato di snellire la tabella LIBRI, separando in un'altra tab.(EDITORE)
i dati riferiti all'editore (campi: IDEditore, Editore, Sede). Questa tab. è
collegata a LIBRI con rel. uno-molti tramite il campo IDEditore. Ora,
volendo inserire i dati tramite la maschera LIBRI, ho tentato, senza
successo, di creare due caselle combinate, una per il campo Editore ed una
per il campo Sede, in modo che cliccandoci una volta compaia una tendina con
i valori del campo collegato di EDITORI, oppure cliccandoci su due volte sia
possibile inserire valori nuovi, aggiornando automaticamente la tab.
EDITORI. Nelle proprietà delle caselle, in scheda "Evento", ho attivato la
"routine evento" per le voci "Su non in elenco" e "Su doppio clic", ma
invano: l'immissione resta condizionata dalla presenza di dati nei
rispettivi campi collegati e il doppio clic non funziona. Eppure ho
replicato quanto fatto per la casella collegata "Autori  del libro"
(collegata alla tab. AUTORI) presente nella sottomaschera AUTORILIBRI
inserita nella maschera LIBRI. Sbaglio forse i collegamenti... C'è forse
qualche altro modo più elegante?
Se non mi sono spiegato in modo chiaro, si potrebbe approfondire in forma
privata senza coinvolgere il NG. Decidi tu. Intanto, mille volte grazie.
Vitt.

 ha scritto nel messaggio
news:9hqphh$m9r$1...@serv1.albacom.net...

Dialogare di Access in forma privata è contro le regole di questo NG.
Verifica intanto che la proprietà "Solo in elenco" delle caselle combinate
sia impostata a Sì, in caso contrario l'evento "Su non in elenco" non verrà
attivato.
Posta poi i codici VBA che hai generato a fronte dei due eventi.


 ha scritto nel messaggio
news:xJm07.7337$hp3.3...@news.infostrada.it...

Dunque ecco la situazione:
La tab EDITORI ha tre campi: IDEditore, Editore, Sede; è correlata a LIBRI
tramite IDEditore (uno-molti)
Nella maschera di immissione (IMMISSIONE, riassume la tab. LIBRI e, tramite
una sottomaschera, la tab. AUTORI ) ho inserito una casella combinata
(tramite composizione guidata); i dati sono ricavati dalla tab. EDITORI e
riguardano i 2 campi Editore e Sede (l'autocomposizione aggiunge anche il
campo IDEditore e lo nasconde); assegno alla casella l'etichetta Editore.
Nelle Proprietà/Dati: Solo in elenco=si'; Colonne associate=2: Nelle
Proprietà/eventi: Su non in elenco=[Routine evento]; Su doppio clic=[Routine
evento]. Il codice VBA generato (mi pare per i due eventi) e' il seguente:
Private Sub CasellaCombinata65_DblClick(Cancel As Integer)
End Sub
Private Sub CasellaCombinata65_NotInList(NewData As String, Response As
Integer)
End Sub
Il risultato e' una casella nella quale non si riesce ad inserire dati
nuovi, ma solo eventuali dati presenti nella lista a tendina (cioe' i dati
già presenti nella tab EDITORI).
La casella combinata Autori, presente nella sottomaschera contenuta nella
maschera e riferita alla tab. AUTORI, l'ho copiata pari pari dal modello di
Access97. Il VBA è il seguente:
Option Compare Database
Option Explicit
Private Sub IDAutore_NotInList(NewData As String, Response As Integer)
    MsgBox "Fare doppio clic su questo campo per aggiungere una voce
all'elenco."
    Response = acDataErrContinue
End Sub
Private Sub IDAutore_DblClick(Cancel As Integer)
On Error GoTo Err_IDAutore_DblClick
    Dim lngAuthorID As Long
    If IsNull(Me![IDAutore]) Then
        Me![IDAutore].Text = ""
    Else
        lngAuthorID = Me![IDAutore]
        Me![IDAutore] = Null
    End If
    DoCmd.OpenForm "Autori", , , , , acDialog, "GotoNew"
    Me![IDAutore].Requery
    If lngAuthorID <> 0 Then Me![IDAutore] = lngAuthorID
Exit_IDAutore_DblClick:
    Exit Sub
Err_IDAutore_DblClick:
    MsgBox Err.Description
    Resume Exit_IDAutore_DblClick
End Sub
Il risultato e' che in tale tabella posso pescare i dati dall'elenco a
tendina, oppure posso cliccare due volte ed aprire la tab. AUTORI, nella
quale inserire il nuovo dato da rendere disponibile. Il meccanismo funziona
abbastanza bene, ma sarebbe molto più comodo poter inserire i dati nuovi
senza dover passare prima dalla tabella AUTORI. Però c'e' un particolare: i
dati Cognome e Nome si presentano non separati in due colonne, ma divisi da
una virgola (risultato, penso della riga di comando in Proprieta'/Dati:
SELECT DISTINCTROW [Autori].[IDAutore], [Cognome] & ", " & [Nome] AS [Nome
autore] FROM Autori ORDER BY [Cognome] & ", " & [Nome]; ).
In sostanza, vorrei ottenere, da entrambe le caselle combinate, di poter
inserire dati nuovi in modo veloce e di veder comparire automaticamente il
dato eventualmente gia' presente in tabella. Come minimo, vorrei per la
casella Editore un funzionamento analogo a quello attuale della casella
Autori.
Grazie. Vitt.


Spero di essere stato chiaro.


 ha scritto nel messaggio
news:ZTI07.1262$D03....@news.infostrada.it...

Tutto OK. Giusta la tua rettifica circa la casella associata e circa
l'equivoco tra nome elemento e etichetta. Per inciso, avevo già provato a
copiare il codice della cas. combinata IDAutore: il vero problema (mi
vergogno a dirlo) era che, semplicemente, non avevo creato la maschera
relativa alla tab. EDITORI (riprova della mia incompetenza!).
Vado avanti, spudoratamente, con altri problemi:
1) Ho una tab. CITAZIONI collegata con LIBRI e con AUTORI (molti-uno); nella
maschera relativa devo far comparire il titolo del libro ed il nome
dell'autore; due caselle combinate andrebbero bene o sarebbe meglio
ricorrere a 2 sottomaschere? (preferirei la soluzione più semplice ed
agile). Ci sono modi migliori? Inoltre, come far comparire nella maschera
IMMISSIONE LIBRI un qualche avviso che indichi la presenza, per un dato
libro, di citazioni ed il loro numero?
2) Ho una tab. PRESTITI collegata con LIBRI (molti-uno). In che modo far
comparire nella solita maschera IMMISSIONE LIBRI un avviso che il libro è in
prestito? Tale indicazione dovrebbe scomparire quando, nella tab. e maschera
PRESTITI, venisse inserita la data di restituzione relativa a quel dato
prestito. Si potrebbe, inoltre, aprire con un doppio clic la maschera
PRESTITI per visualizzare subito a chi il libro è dato attualmente in
prestito?
Scusa l'ingordigia. Grazie. Vitt.

 Scusa l'ingordigia. Grazie. Vitt.
--


 ha scritto nel messaggio
news:C6y17.4522$eB4.1...@news.infostrada.it...

Fatto e funzionante. Va benissimo la soluzione che hai proposto per i
prestiti. Però ora mi accorgo di un paio di cose circa la maschera
CITAZIONI:
1) Quando immetto una citazione, la tendina della casella combinata Titolo
(IDLibro) offre centinaia (o migliaia) di titoli tra cui scegliere; meglio
sarebbe un comando all'interno della maschera IMMISSIONE LIBRI (ora
rinominata semplicemente LIBRI) che aprisse direttamente la maschera
CITAZIONI, inserendo automaticamente in quest'ultima il titolo del libro.
2) Sempre nella maschera CITAZIONI e riguardo alla cas. combinata IDAutore,
o si tralascia nome dell'autore (se il titolo sarà immesso automaticamente,
tutto sommato il nome dell'autore sarebbe abbastanza superfluo...) oppure
andrebbe immesso anch'esso automaticamente, ricavandolo dalla casella
combinata presente nella sottomaschera Autori del Libro, a sua volta
inserita nella maschera LIBRI, la quale permette di immettere più di un
autore per ogni libro.
Ti ricordo che tale sottomaschera si basa sulla tab. AUTORI LIBRO, la quale
fa da ponte tra la tab. LIBRI (molti-uno) e la tab. AUTORI (molti-uno)
spezzando la rel. tra LIBRI e AUTORI, potenzialmente molti-molti. La tab.
AUTORI LIBRO ha tre campi: IDAutoreLibro (contatore), IDAutore (numerico),
IDLibro (numerico).
3) La casella di testo non associata per sapere il numero di citazioni del
libro, fatta come mi hai detto, in assenza di citazioni presenta la parola
"Errore" preceduta dal diesis; non si potrebbe far comparire "nessuna
citazione" oppure semplicemente uno zero?
Grazie come sempre. Vitt.

 Grazie come sempre. Vitt.


 ha scritto nel messaggio
news:cVz27.5161$1u2.1...@news.infostrada.it...

Niente da fare per quanto riguarda la casella testo Numero Citazioni: ho
controllato i nomi dei campi e della tab., ma rimane la segnalazione
#Errore. Però ho notato un particolare curioso: ho inserito, come mi hai
detto, nell'origine controllo la seguente stringa:
=DCount("[IDCitazione]"; "tblCitazioni"; "IDLibro=" & IDLibro)
ma questa stringa viene automaticamente corretta così:
=DCount("[IDCitazione]"; "tblCitazioni"; "IDLibro=" & [IDLibro])
Nota le parentesi quadre che racchiudono l'ultimo IDLibro.
C'è un nesso con la segnalazione #Errore?
Grazie.Vitt.

 Grazie.Vitt.



Niente da fare per quanto riguarda la casella testo Numero Citazioni: ho
controllato i nomi dei campi e della tab., ma rimane la segnalazione
#Errore. Perň ho notato un particolare curioso: ho inserito, come mi hai
detto, nell'origine controllo la seguente stringa:
=DCount("[IDCitazione]"; "tblCitazioni"; "IDLibro=" & IDLibro)
ma questa stringa viene automaticamente corretta cosě:
=DCount("[IDCitazione]"; "tblCitazioni"; "IDLibro=" & [IDLibro])
Nota le parentesi quadre che racchiudono l'ultimo IDLibro.
C'č un nesso con la segnalazione #Errore?
Grazie.Vitt.


Ho già risposto il 10/7/2001 alle ore 18:39 al tuo messaggio del 10/7/2001
delle ore 17:02.


 Roberto
Scusa, ma entrambi i messaggi si erano persi ed ho dovuto recuperarli
altrove.
Ho trovato l'errore: in entrambe le stringhe che tu mi hai dato da inserire
nell'origine controllo della cas. di testo (la seconda è nel tuo ultimo
mess.), hai indicato la tabella CITAZIONI come "tblCitazioni", mentre invece
bisognava indicare solo "Citazioni".
Non so se sia una novità di Access 2000 rispetto ad Acces97, ma l'help
relativo alla funzione DCount riporta come esempio
=DCount("[IDOrdine]", "Ordini", "[ZonaDestinatario]
da cui ho dedotto che il nome del dominio doveva essere semplicemente
"Citazioni" e non "tabCitazioni".
Per ora basta. Ora che tutto sembra funzionare, mi dedico un pò all'aspetto
grafico.
Ti ringrazio infinitamente per l'aiuto. Vitt.


Ho usato tblCitazioni solo perchè nei miei esempi precedenti avevo
ipotizzato che la tabella si chiamasse appunto tblCitazioni: sia in A2000
che in A97 come dominio devi indicare il nome della tabella, e se la tua si
chiama CITAZIONI allora è giusto che usi tale nome. ;-)
