Reset AutoWert-Samen

Ich habe eine VB6/Access-Anwendung, die gelegentlich auf ein problem mit falschen AutoWert-Feld seed.

Können sagen, es ist eine Tabelle MYTABLE mit einem AutoWert-Feld ID (das ist auch der primary key). Können sagen, im moment ist der maximale Wert von ID ist 1000. Wenn die Anwendung fügt einen neuen Datensatz (ID-Wert wird nicht ausdrücklich), aus irgendeinem Grund entscheidet, dass die nächste AutoWert-Feld mit dem Wert 950 (und nicht 1001, wie es sein sollte), so wird eine primary key-Verletzung Auftritt.

Fand ich einen KB-Artikel, der beschreibt meine Symptome: http://support.microsoft.com/kb/884185 . Kurz gesagt, schlagen Sie vor, um eine Abfrage auszuführen:

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

Wenn ich versuche, dies zu tun, schlägt er mit "Ungültiger Felddatentyp"

Das problem wird behoben, wenn ich öffnen Sie die Datenbank in Access und tun compact/reparieren, aber ich brauche, um in der Lage zu beheben solche Probleme in der Anwendung: es ist installiert auf einem paar von tausenden von PCs auf der ganzen Welt, und die Leute zu Fragen kompakt - /Reparatur mit Access ist keine option.

Verwende ich DAO DBEngine.CompactDatabase durchführen compact/repair in der Anwendung, aber es behebt nicht die Samen das problem, und einige weitere tricks sind erforderlich.

Ich hoffe, jemand hat eine Idee für eine Lösung, bin ich wirklich nahe zu verzweifelt

Danke an alle

  • aus curosity, schließen Sie die Tabelle vor laufen ALTER TABLE MYTABLE ALTER COLUMN ID COUNTER(1001,1)?
  • Wenn der code innerhalb einer Access-MDC/ACCDB, die Sprache ist VBA, nicht VB6. Bitte klären Sie.
  • Ja, sicher, Diese Abfrage fehl, sowohl bei der Ausführung in Access und ausgeführt, wenn Sie über DAO. Die seltsame Sache ist die: wenn in Access lösche ich die AutoWert-Feld, und erstellen Sie dann genau das gleiche Feld, die Abfrage funktioniert. Es sieht aus wie es verschiedene Varianten von AutoWert-Typ, aber ich kann nicht bekommen, was dieser Unterschied ist
  • VB6/Access-Anwendung = Anwendung, die in VB6 geschrieben mit der Access-Datenbank als backend
  • Sie sollten nicht stoßen werden gelegentlich Probleme mit dem Saatgut. Sind die Systeme, auf denen Ihre app läuft voll gepatchten Windows 2000 und neueren? Was ist die version von msjet40.dll laufen auf den Systemen? Ich würde vorschlagen, die Protokollierung der version und sehen, ob es irgendwelche Probleme gibt. Was ich getan habe, ist die Nutzung der verschiedenen API-Aufrufe zur Verfügung und bin der überprüfung der Versionsnummer und Datum/Zeit ein entscheidender dll, msjetxx.dll,, um sicherzustellen, dass es passt, was ich auf meinem system habe. Siehe Überprüfen Sie die Geeigneten Jet Service Pack installiert ist, die Seite auf meiner website www.granite.ab.ca\access\verifyjetsp.htm
  • FWIW, ich bereitgestellt Samen zurücksetzen code in einer meiner apps vor ein paar Wochen, denn ich bin Häufig importieren von alten Daten-wie ich persönlich es herumliegen in archivierten Dateien. Es muss neu geladen werden zurück in die Datenbank (jemand konnte nicht durchsetzen, RI, so dass es eine Menge von unsinnigen Daten, die über Fremdschlüssel verweist auf Datensätze, die nicht existieren, und einige von Ihnen verweist auf den falschen Datensätze, da die alten Daten verwendet, die gleichen numerischen Bereich-ja, das ist eine Sauerei!), und jedes mal, wenn ich das Tue, ist das AutoWert-Zähler wird zurückgesetzt, um den höchsten Wert, der eingefügt wurde, aus den archivierten Daten.
  • David,, ok, aber das macht Sinn. Importieren Sie das AutoWert-Feld, so wird Jet zurücksetzen der Samen die höchste Zahl importiert, wenn das ist höher als der aktuelle Wert. Aber es sollte nicht zurückgesetzt werden, um eine niedrigere Zahl.
  • Es ist auf eine niedrigere Zahl, die die höchste Anzahl in den Einsatz. Ich hatte nicht erwartet, dass es mich, aber da es geschah zweimal, ich implementiert die Samen reset-code so, ich lass nicht zu, die Fehler werden gesehen, die durch den Endanwender. Ich weiß, das ist nicht so, wie es funktionieren soll, von der Art, wie ich es verstehe, aber ich denke, wenn Sie legen Sie einen Wert kleiner als die vorhandenen Samen, es kann passieren. Und in diesem Fall werden die archivierten Datensätze alle niedrigere Werte als die vorhandenen AutoWert, und das Ergebnis ist einzigartig index Kollisionen.

InformationsquelleAutor Incidently | 2010-02-18
Schreibe einen Kommentar