Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

2 campi univoci oltre l'ID

51 views
Skip to first unread message

rr12rr

unread,
Nov 4, 2000, 3:00:00 AM11/4/00
to

Ho una tabella con i seguenti 4 campi:
ID contatore chiave primaria
Libro
Argomento
Note

Devo fare in modo che:
Libro e Argomento, insieme, siano univoci: cioè duplicati non ammessi.
Quindi, un record, non può avere entrambi i campi libro e argomento
uguali.
n.b. mi serve, non tanto per l'univocità del record, che ho dall'ID,
ma per evitare di riscrivere due record uguali e quindi essere
avvisato dalla msgbox di Access dell'errore.
(L'Id chiave primaria mi serve perché e relazionata in uno a molti con
un'altra tabella).


Nel caso di un solo campo si utilizza la proprietà indicizzato della
tabella
impostata a SI duplicati non ammessi; nel caso di due campi come si
supera il problema


Ho provato con chiave multipla su tre campi,
con dalla tabella indici della tabella:
Nome indice Nome campo
PrimariKey Id
Libro
Argomento

Non va bene, perché quando aggiungo un record,
anche se Libro e Argomento sono uguali ad un record esistente
l' univocità gli viene comunque data dall'ID che è sempre diverso.

Ringrazio in anticipo per chiarimenti e suggerimenti in merito.

Frankkk

unread,
Nov 5, 2000, 1:23:46 AM11/5/00
to

"rr12rr" <rr1...@NOSPAMusa.net> ha scritto nel messaggio
news:3A047B13...@NOSPAMusa.net...

>
> Ho una tabella con i seguenti 4 campi:
> ID contatore chiave primaria
> Libro
> Argomento
> Note
>
> Devo fare in modo che:
> Libro e Argomento, insieme, siano univoci: cioè duplicati non ammessi.
> Quindi, un record, non può avere entrambi i campi libro e argomento
> uguali.
> n.b. mi serve, non tanto per l'univocità del record, che ho dall'ID,
> ma per evitare di riscrivere due record uguali e quindi essere
> avvisato dalla msgbox di Access dell'errore.
> (L'Id chiave primaria mi serve perché e relazionata in uno a molti con
> un'altra tabella).
>
>
> Nel caso di un solo campo si utilizza la proprietà indicizzato della
> tabella
> impostata a SI duplicati non ammessi; nel caso di due campi come si
> supera il problema
>
>

Non esiste il problema...nel senso che la chiave "ID" che hai è superflua
per il tuo scopo è sufficiente che la chiave primaria (multicampo) siano i
tuoi campi Libro ed argomento...per fare ciò si evidenziano entrambi (tenedo
premuto il tasto shift se sono uno di seguito all'altro o ctrl se non lo
sono) e cliccki su "chiave primaria"...a tua scelta poi per ciascun campo
puoi selezionare si o no per i duplicati di ciascuno....se poi il campo id è
necessario per la relazione con altre tabelle, nessun problema poichè la
chiave non è quella ma le altre due...!
Per quanto riguarda l'errore di access, poi, puoi a livello di form
(maschera) customizzaterlo a tuo piacimento nel caso la chiave primaria
(anche multicampo) sia duplicata.....tipo :
Evento del form SU ERRORE...
Private Sub Form_Error(DataErr As Integer, Response As Integer)
Response = acDataErrContinue
Const DuplicateKey = 3022
Dim strMsg As String
If DataErr = DuplicateKey Then
Response = acDataErrContinue
strMsg = "Attenzione !!! Record duplicato" _
& "Verificare i dati inseriti."
MsgBox strMsg
End If
end sub

> Ho provato con chiave multipla su tre campi,
> con dalla tabella indici della tabella:
> Nome indice Nome campo
> PrimariKey Id
> Libro
> Argomento
>
> Non va bene, perché quando aggiungo un record,
> anche se Libro e Argomento sono uguali ad un record esistente
> l' univocità gli viene comunque data dall'ID che è sempre diverso.
>

...è chiaro che non va bene...viene a mancare una delle condizioni...cioè
l'id (che magari è un campo contatore...) cambia a meno che non sia un campo
numerico che possa essere ripetuto !!!

rr12rr

unread,
Nov 5, 2000, 3:00:00 AM11/5/00
to
Ho provato, penso che vada tutto bene, piccolo problema (personale), solo nello
stabilire le relazioni 1 a molti, (bastava collegare sia Libro che Argomento
della tabellabase con la
tabella secondaria. Nella finestra relazioni vedendo 2 simboli di relazione 1 a
molti
pensavo che vi fosse qualcosa di errato; però in realtà, correggimi se sbaglio,
la relazione
1 a molti è comunque 1 sola; n.b. è la prima volta che uso una chiave doppia per
le
relazioni uno a molti).

A questo punto, ipotizzo che a livello di chiavi primarie, si possa agire solo
così, se non si vuole che due record abbiano simili il campo Libro e Argomento.

Però, mi interessava, avere una chiave identificativa unica, cioè l'ID (nota *)
e superare a questo punto, credo, il problema della immissione di due record
ripetuti per quanto riguarda il campo Libro e Argomento, tramite codice; Oppure
si può risolvere tramite la proprietà del campo Valido se dalla tabella (con
opportuno codice)?


* n.b
(sono obbligato ad usare un unico ID, non tanto per semplicità di lettura delle
relazioni ad esempio nel caso in cui ho piu relazioni su più tabelle, ma perché
nel campo libro e/o argomento dovrò usare il tipo dati memo: non più
indicizzabile)
Mi sembra che non avevo sottolineato questo particolare nel post iniziale.
Chiedo scusa per la distrazione (l'ho scoperto ora).


Grazie per i suggerimenti;
very very interessante anche la personalizzazione della msgbox di errore.

riposto anche risemplificando il post e risottolineando tute le problematiche
come: Individuare dati già inseriti e attivare msgbox

Roberto da casa

unread,
Nov 5, 2000, 3:00:00 AM11/5/00
to

"rr12rr" <rr1...@NOSPAMusa.net> ha scritto nel messaggio
news:3A047B13...@NOSPAMusa.net...
>
> Ho una tabella con i seguenti 4 campi:
> ID contatore chiave primaria
> Libro
> Argomento
> Note
>

[CUT]

> Ho provato con chiave multipla su tre campi,
> con dalla tabella indici della tabella:
> Nome indice Nome campo
> PrimariKey Id
> Libro
> Argomento
>
> Non va bene, perché quando aggiungo un record,
> anche se Libro e Argomento sono uguali ad un record esistente
> l' univocità gli viene comunque data dall'ID che è sempre diverso.
>

Come chiave primaria adopera solo Id, poi dichiara un altro indice (Chiave2)
composto solo dai campi Libro e Argomento:

Nome indice Nome campo

PrimariKey Id
Chiave2 Libro
Argomento

Quindi a Chiave2 setta la Proprietà indice "Univoco" a SI.

--
Roberto

---------------------------------------------
il sito comune di it.comp.appl.access:
http://members.xoom.it/it_db_access/
---------------------------------------------


rr12rr

unread,
Nov 5, 2000, 3:00:00 AM11/5/00
to
Nuovamente grazie per il suggerimento.
Con i campi testo funziona perfettamente.
Finalmente ho capito, con le sei righe postatomi,
come si deve utilizzare la tabella degli indici.


Sicuramente mi servirà per altre applicazioni

Solo che nel caso specifico devo usare dei campo memo poichè
ho del testo superiore ai 255 caratteri

Giusta la puntualizzazione inerente l'uso dei codici ISBN;

(nel mio caso però nella voce Libri, catalogo il testo di libri che delle
dispense,
e in alcuni casi ho dei titolo superiori a 255 caratteri, quindi devo usare
la ricerca sul record)


0 new messages