2010-02-18 14 views
7

Possiedo un'applicazione VB6/Access che occasionalmente incontra un problema con seme seme campo autonumber errato.Reimposta seme automatico

Diciamo che esiste una tabella MYTABLE con un ID campo numerico (che è anche la chiave primaria). Diciamo che al momento il valore massimo dell'ID è 1000. Quando l'applicazione inserisce un nuovo record (il valore dell'ID non viene fornito esplicitamente), per qualche motivo decide che il prossimo valore del campo autonumber è 950 (e non 1001 come dovrebbe essere) - quindi si verifica un errore di violazione della chiave primaria.

Ho trovato un articolo della Knowledge Base che descrive i miei sintomi: http://support.microsoft.com/kb/884185. In breve, essi suggeriscono di eseguire una query:

ALTER TABLE MYTABLE ALTER COLUMN ID COUNTER(1001,1) 

Quando provo a fare questo, non riesce con "tipo di dati di campo non valido"

Il problema viene risolto se apro il database in Access e fare compatta/ripara, ma ho bisogno di essere in grado di risolvere tali problemi all'interno dell'applicazione: è installata su un paio di migliaia di PC in tutto il mondo e chiedere alle persone di compattare/riparare con Access non è un'opzione.

Uso DAO DBEngine.CompactDatabase per eseguire la compattazione/riparazione all'interno dell'applicazione, ma non risolve il problema di seed e sono necessari alcuni trucchi aggiuntivi.

Spero che qualcuno ha un'idea per una soluzione, sono davvero vicino alla disperata

Grazie a tutti

+0

fuori curosity, stai chiudendo il tavolo ** ** prima di correre 'ALTER TABLE ALTER MYTABLE COLONNA ID COUNTER (1001, 1) '? –

+0

Se il codice si trova in un Access MDC/ACCDB, la lingua è VBA, non VB6. Si prega di precisare. – Fionnuala

+0

@Otaku: Sì, sicuro Questa query ha esito negativo sia quando viene eseguita all'interno di Access che quando viene eseguita tramite DAO. La cosa strana è questa: se in Access I cancella il campo autonumber e poi creo esattamente lo stesso campo, la query funziona. Sembra che ci siano diversi tipi di tipi di numeri autonome, ma non riesco a capire quale sia questa differenza – Incidently

risposta

4

fare riferimento al seguente articolo, contiene un metodo che è possibile aggiungere al progetto l'accesso da eseguire per ripristinare la semina. E 'stato un risparmiatore per me diverse occasioni in passato:

http://allenbrowne.com/ser-40.html

In aggiunta a questo dà spiegazione e comprensione cause e il potenziale per la risoluzione di tali problemi.

+0

Non aggiungerei mai un riferimento solo per supportare una funzione: l'associazione tardiva sarebbe un modo molto migliore per farlo. Ma non sono sicuro che tu ottenga qualcosa di più di quello che otterresti con un compact DAO e il reset di semi ALTER TABLE. Non riesco a immaginare di eseguire quel codice e non compattare in seguito, comunque. –

+0

Grazie! Questo sembra funzionare perfettamente – Incidently

0

Potrebbe anche essere necessario assicurarsi che il database sia impostato per utilizzare ANSI 92 in modo che COUNTER sia riconosciuto come un tipo di dati legittimo.

In Access 2007 andare a Opzioni di accesso, Designers oggetto, sintassi di compatibilità SQL Server (ANSI 92) per impostare questo.

+0

È possibile eseguire ALTER TABLE con ADO per evitare di dover impostare la modalità SQL 92. –

0

si può essere in grado di risolvere il problema con un compatto/riparazione:

In Access 2010: Compact and Repair Database on the Database Tools ribbon. 
In Access 2007: Office Button | Manage. 
In earlier versions: Tools | Database Utilities.