Discussion:
Autowert per VBA zurücksetzen?
(zu alt für eine Antwort)
Andreas Grün
2005-05-30 13:33:27 UTC
Permalink
Hallo zusammen,

bitte jetzt nicht gleich Jehova schreien!
;-)

Natürlich habe ich Donkarls FAQ 3.2 und 3.11 gelesen.

Ich habe ein XP-Programm (mit A2000-Datenformat), bei der eine
Tabelle ständig neu gefüllt wird.

Die Tabelle hat ein Autowert-Feld.

Von einer Abfrage mit diversen Kriterien werden aus verschiedenen
miteinander verknüpften anderen Tabellen Datensätze in diese Tabelle
eingefügt.

Dann werden diese durchnummerierten Datensätze exportiert und die
Tabelle geleert.

Da ich mit der Version mit einer Unterabfrage oder DomAnzahl
aufgrund der Komplexität der Insert-Abfrage nicht klar komme, möchte
ich gerne die Tabelle per VBA-Code zurücksetzen. Kann ich nicht eine
Access-Systemtabelle updaten? Irgendwo muss sich Access doch den
letzten Wert 'merken'?

Oder kennt jemand Code, mit dem ich die Datenbank mit VBA
komprimieren kann?

Das manuelle Komprimieren/Reparieren scheidet aus.

Oder gibt es eine Variante, mit der ich ein leeres Integer-Feld in
dieser Tabelle nachträglich mit einer Nummerierung updaten kann?

Danke im Voraus.

Andreas
Mark Doerbandt
2005-05-30 13:49:18 UTC
Permalink
Hallo, Andreas,
bitte jetzt nicht gleich Jehova schreien! ;-)
Mein Gott!
Da ich mit der Version mit einer Unterabfrage oder DomAnzahl
aufgrund der Komplexität der Insert-Abfrage nicht klar komme,
Was heisst Komplexitaet und was heisst nicht klar kommen?
möchte ich gerne die Tabelle per VBA-Code zurücksetzen.
Kann ich nicht eine Access-Systemtabelle updaten?
Wuerde ich nicht machen, wird imho auch nicht gehen.
Oder kennt jemand Code, mit dem ich die Datenbank mit VBA
komprimieren kann?
Lies doch mal FAQ Punkt 6.6 und 6.7 (http://www.donkarl.com).
Oder gibt es eine Variante, mit der ich ein leeres Integer-Feld in
dieser Tabelle nachträglich mit einer Nummerierung updaten kann?
Du hast doch FAQ 3.11 gelesen?

Ansonsten kannst Du das ganze natuerlich als sortiertes Recordset
oeffnen und durchnumerieren.

Gruss - Mark
--
Informationen fuer Neulinge in den Access-Newsgroups unter
http://www.doerbandt.de/Access/Newbie.htm

Bitte keine eMails auf Newsgroup-Beiträge senden.
Andreas Grün
2005-05-30 14:43:02 UTC
Permalink
"Mark Doerbandt" schrieb [...]
Post by Mark Doerbandt
Post by Andreas Grün
Da ich mit der Version mit einer Unterabfrage oder DomAnzahl
aufgrund der Komplexität der Insert-Abfrage nicht klar komme,
Was heisst Komplexitaet und was heisst nicht klar kommen?
Meine Fähigkeiten in SQL sind dafür nicht ausreichend.
Post by Mark Doerbandt
Post by Andreas Grün
möchte ich gerne die Tabelle per VBA-Code zurücksetzen.
Kann ich nicht eine Access-Systemtabelle updaten?
Wuerde ich nicht machen, wird imho auch nicht gehen.
Ähnliches habe ich IIRCschonmal gemacht um Tabellen aus anderer
Access-DB dynamisch zu verknüpfen. Ist schon ein paar Jahre her. Hat
gut funktioniert. Aber da ging es auch nur um Selects.
Post by Mark Doerbandt
Post by Andreas Grün
Oder kennt jemand Code, mit dem ich die Datenbank mit VBA
komprimieren kann?
Lies doch mal FAQ Punkt 6.6 und 6.7 (http://www.donkarl.com).
Danke! Genau so etwas habe ich gesucht. Funktioniert als Notlösung
ganz gut. :-)
Post by Mark Doerbandt
Post by Andreas Grün
Oder gibt es eine Variante, mit der ich ein leeres Integer-Feld in
dieser Tabelle nachträglich mit einer Nummerierung updaten kann?
Du hast doch FAQ 3.11 gelesen?
Aber nicht so ganz verstanden. :-(
Post by Mark Doerbandt
Ansonsten kannst Du das ganze natuerlich als sortiertes Recordset
oeffnen und durchnumerieren.
Durchnummerieren? Ähhh, ja! Aber wie?
Post by Mark Doerbandt
Gruss - Mark
Gruß
Andreas
Henry Habermacher [MVP Access]
2005-05-31 12:27:45 UTC
Permalink
Hallo Andreas
Post by Andreas Grün
Ich habe ein XP-Programm (mit A2000-Datenformat), bei der eine
Tabelle ständig neu gefüllt wird.
Das ist schon mal gut, weil Du dann Jet4 hast und dort der Autowert gesetzt
werden kann :-)
Post by Andreas Grün
Die Tabelle hat ein Autowert-Feld.
Das ist auch gut.
Post by Andreas Grün
Dann werden diese durchnummerierten Datensätze exportiert und die
Tabelle geleert.
Ganz geleert oder nur teilweise? Falls ganz geleert, dann einen Compact
machen, sollte den Autowert zurücksetzen.
Andernfalls einfach ein
DROP TABLE ...
gefolgt von einem
CREATE TABLE ...
machen. Geht sowieso viel schneller, als eine Tabelle zu leeren. Der
Autowert wird dann auch zurückgesetzt.
Post by Andreas Grün
Da ich mit der Version mit einer Unterabfrage oder DomAnzahl
aufgrund der Komplexität der Insert-Abfrage nicht klar komme, möchte
ich gerne die Tabelle per VBA-Code zurücksetzen. Kann ich nicht eine
Access-Systemtabelle updaten? Irgendwo muss sich Access doch den
letzten Wert 'merken'?
Oder kennt jemand Code, mit dem ich die Datenbank mit VBA
komprimieren kann?
Datenbank per VBA komprimieren? Und Du bist sicher, dass Du die FAQ gelesen
hast?
Post by Andreas Grün
Das manuelle Komprimieren/Reparieren scheidet aus.
Dann eben per VBA ;-)
Post by Andreas Grün
Oder gibt es eine Variante, mit der ich ein leeres Integer-Feld in
dieser Tabelle nachträglich mit einer Nummerierung updaten kann?
Klar geht das, mit einem einfachen SQL Statement:

Zuerst leerst Du also die Tabelle. Nehmen wir mal an, Du hast dort noch
einige Datensätze drin und möchtest nun mit der nächsten Nummer beginnen.
Dazu musst Du zuerst die letzte Nummer auslesen, z.B. über:

Dim I As Long
I = Nz(DMax("DeinAutowert", "DeineAutowertTabelle"), 0)

Danach kannst Du den Autowert auf den gewünschten Wert zurücksetzen:

CurrentDB.Execute "ALTER TABLE DeineAutowertTabelle ALTER DeinAutowert
COUNTER(" & I + 1 & ", 1)", dbFailOnError

Counter(x, y) bedeutet dabei das Setzen des Autowertes. X ist der Startwert,
Y ist der Inkrement, obiges Beispiel wird also beim höchsten Autowert + 1
beginnen und danach diesen immer schön um 1 hochzählen. Für das was Du
machen willst, nämlich ein Bulk Insert scheint mir das Autowertfeld geeignet
zu sein, eine fortlaufende Nummerierung zu erhalten. Das ist eine der
wenigen Ausnahmen, wo ich Autowert Felder für sichtbare, fortlaufende
Nummern vernünftig finde, weil entweder alle eingefügt werden, oder keiner
und es daher keine Lücken geben sollte.


HTH
Henry
--
Keine E-Mails auf Postings in NGs senden!
Don't send e-mails to postings in newsgroups!
KB: http://support.microsoft.com/default.aspx
FAQ: http://www.donkarl.com (neu mit Suchfunktion!)
OH: Online Hilfe von Microsoft Access (Taste F1)
Downloads: http://www.dbdev.org
Loading...