Originariamente inviato da benjy
GRAZIE per i chiarimenti.

Senti, non di adirare se... persevero , ma io ho il campo doc_riga_id che hai visto nella query che mi 'farebbe' da chiave primaria, in quanto non possono esistere 2 righe n° 10 di uno stesso documento, essendo questo campo formato da anno,serie documentale, numero doc e numero riga.
Richiesta suggerimenti:
1. Posso tranquillamente entrare nella struttura dell'archivio e definirla come PK o mi consigli di aggiungere un campo contatore definito come PK?
In teoria: Sì. ma devi essere sicuro al 1000 x 1000 che non possano esistere duplicati (ma poi dipende anche da altri fattori).
In pratica: No. Non ti conviene rischiare perchè una PK deve essere univoca, oltre che indicizzata, quindi devi avere la certezza assoluta che non si creerà mai un record duplicato (cioè con gli stessi valori).

Per me un campo PK deve essere 'dedicato' solo a quello scopo.
Una volta assegnato, non deve più essere modificato.
Se usi valori di altri campi, modificabili, la questione si complica (per non dire peggio).

Se il tuo programma è multi-utente allora non conviene utilizzare il campo contatore di Access, ma utilizzare un campo contatore gestito direttamente. Come indicato qui:
HOW TO Implement Multiuser Custom Counters in Jet 4.0 and ADO 2.1
http://support.microsoft.com/default...b;EN-US;240317

In teoria quanto indicato da questo articolo è ottimo, e funziona perfettamente.
In pratica, capirai leggendolo che è ingestibile perchè occorrerebbe creare una tabella supplementare per ogni tabella in cui si intende gestire il contatore.

Per cui, leggi l'articolo (che fa sempre bene) ma poi vai a scaricarti il mio progetto Prova Login versione 2 qui:
http://nuke.vbcorner.net/Progetti/VB...3/Default.aspx

in cui ho modificato il modulo modMultiUserCounter.bas in modo che tu devi semplicemente creare solo una tabella dei Contatori (senza record), che sarà usata per tutte le tabelle.


Originariamente inviato da benjy
2. Posso definirla in fase di programmazione? (visto che sono parecchi DB e varie tabelle da aggiornare con il tuo gradito insegnamento, farei un prg da far girare presso tutti gli utenti)
Con il mio progetto farai ancora meglio, perchè nel modulo indicato sopra ho modificato l'acquisizione del contatore CUSTOM dalla tabella Contatori anche per le tabelle in cui non era previsto dall'inizio.

Logicamente tu dovrai prima 'preparare' le tabelle.
Se hai modo di intervenire direttamente sul database usando MSAccess è molto semplice:
1 - Apri la tabella in struttura
2 - Aggiungi il campo ID e lo imposti momentaneamente sul tipo Contatore + Chiave primaria.
3 - Salvi la tabella (MSAccess ti numera tutti i record atuomaticamente)
4 - Riapri la tabella e modifichi il tipo da Contatore a Numerico.

Se invece devi farlo programmaticamente allora è un po' più complesso:
1 - aggiungi il campo numerico chiamandolo ID<NomeCampo> (es. IDArticolo per la tabella Articoli)
2 - valorizzi progressivamente da 1 a <n> (il numero di record esistenti)
3 - imposti il campo come su Indicizzato, duplicati non ammessi.


Originariamente inviato da benjy
Non ho ancora provato, lo farò + tardi. Spero vivamente che il tuo insegnamento sia gradito al database come è stato gradito a me.
Vi tranquillo, io ho realizzato moltissimi programmi in multi-utenza anche gestendo la concorrenza con 12-15 utenti.
In questo modo non ho mai, dico mai (!), avuto problemi di sorta, database corrotto, o altro.

Il mio progetto che ti ho segnalato include tutte le caratteristiche più importanti.


Originariamente inviato da benjy
P.S.: solo per la cronaca, i record estratti erano 1, solo, probabilmente c'è qualche cosa che però non gli garba e quindi va in errore. .
La questione è un po' più articolata di come te l'ho spiegata io (siamo su un forum e non si possono scrivere fiumi di parole in un post pensando di spiegare e capire tutto; in genere queste cose sono spiegati nei libri oltre che frutto di esperienza vissuta sul campo), ma davvero non ne vale la pena di essere sempre a rischio con la paura che si ripresenti questa situazione solo perchè non si vuole usare una PK.
Comunque mi piacerebbe analizzare la tua tabella...