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.
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 !!!
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
[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/
---------------------------------------------
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)