Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Tabellenwerte per VBA erstellen/ändern (in Access 2003 gehts, in Access 2010 nicht)

642 views
Skip to first unread message

Helmut Mauer

unread,
Sep 23, 2011, 3:47:29 AM9/23/11
to
Ich musste kürzlich von XP/Office 2003 auf Windows 7/Office 2010
umsteigen. Bis auf die ungewohnte (man könnte auch sagen
benutzerunfreundliche) Optik ging die Umstellung eigentlich
erstaunlich unproblematisch.
Ein Problem konnte ich bisher allerdings nicht lösen: Ich verändere
per VBA Werte in einer Tabelle, genauer gesagt die Tabelle wird mit
einer Schleife durchlaufen und wenn sich bestimmte Werte ändern, wird
ein Zähler erhöht und dieser Wert wird dann in ein bestimmtes Feld
geschrieben. Das ging in 2003 tadellos, in 2010 gar nicht - sprich
dauert ewig - Datenbank bläht sich riesig auf und ist dann nicht mehr
benutzbar.
Gibt es für dieses Verhalten bekannte Gründe? Ich konnte trotz
intensiver Suche nichts finden.

Helmut Mauer

Jörg Ackermann

unread,
Sep 23, 2011, 4:17:42 AM9/23/11
to
Hallo,

Helmut Mauer schrieb am 23.09.2011 09:47:


> Ein Problem konnte ich bisher allerdings nicht l�sen: Ich ver�ndere


> per VBA Werte in einer Tabelle, genauer gesagt die Tabelle wird mit

> einer Schleife durchlaufen und wenn sich bestimmte Werte �ndern, wird
> ein Z�hler erh�ht und dieser Wert wird dann in ein bestimmtes Feld


> geschrieben. Das ging in 2003 tadellos, in 2010 gar nicht - sprich

> dauert ewig - Datenbank bl�ht sich riesig auf und ist dann nicht mehr
> benutzbar.
> Gibt es f�r dieses Verhalten bekannte Gr�nde?

Pauschal erst mal nicht.

Zeige mal den Code.

Gru�

Helmut Mauer

unread,
Sep 23, 2011, 4:37:43 AM9/23/11
to
Hier der Code:

Function bundnr_vergeben()
Dim ws1 As Workspace
Dim db1 As Database
Dim f1 As Form
Dim rs1 As Recordset
Dim bundnr As Long
Dim lfnr As Long
Dim sscmerk As String

Set ws1 = DBEngine.Workspaces(0)
Set db1 = ws1.Databases(0)
Set f1 = Forms("Peter_Hahn")
Set rs1 = db1.OpenRecordset("SELECT * FROM UK_Work_TAB order by res,
alpha_P, id asc")
bundnr = 0
lfnr = 0
sscmerk = "00000"
While Not rs1.EOF
lfnr = lfnr + 1
If Left(rs1![startofbag], 1) = "*" Or Left(rs1![startofbag], 1) =
"#" Or Left(rs1![startofbag], 1) = "E" Or lfnr = 1 Or rs1![SSC] <>
sscmerk Then
rs1.Edit
rs1![startofbag] = "EE"
sscmerk = rs1![SSC]
rs1.Update
bundnr = bundnr + 1
If bundnr > 1 Then
rs1.MovePrevious
rs1.Edit
rs1![startofbag] = "LL"
rs1.Update
rs1.MoveNext
End If
'Debug.Print bundnr
End If
rs1.Edit
rs1![bundnr] = bundnr
rs1![aufnr_code] = f1![F_Auftragsnr] & "_" & f1![F_Version]
rs1![lfnr] = lfnr
rs1.Update
rs1.MoveNext
Wend
rs1.Close
Close
End Function

Peter Doering

unread,
Sep 23, 2011, 5:33:52 AM9/23/11
to
Hallo,

Helmut Mauer wrote:

> Hier der Code:
> [...]

Den Workspace brauchst du nicht, es reicht

Set db1 = CurrentDb

Statt SELECT * FROM.. solltest du nur die benoetigten Felder angeben:

SELECT startofbag, SSC, bundnr, aufnr_code, lfnr FROM UK_Work_TAB ...

Pruef mal, ob folgende Felder indiziert sind. Falls nicht, leg einen Index
an:

- res
- alpha_P
- id

Gruss - Peter

--
Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com

Jörg Ackermann

unread,
Sep 23, 2011, 6:22:22 AM9/23/11
to
Hallo,

Helmut Mauer schrieb am 23.09.2011 10:37:


> Hier der Code:

Noch eine Frage:

Hat die Tabelle UK_Work_TAB einen Prim�rschl�ssel?
Wie heisst das Primary-Key-Feld?

Gru�

Helmut Mauer

unread,
Sep 26, 2011, 3:06:21 AM9/26/11
to
Hallo,
vielen Dank für die Antworten, ich habe alle Anregungen (Index,
Primärschlüssel) befolgt und inzwischen festgestellt, dass der Code
zwar einwandfrei und auch relativ flott durchläuft, anschließend die
Tabelle aber nicht mehr vernünftig zu benutzen ist. Das heißt, ich
kann die Tabelle zwar öffnen, wenn ich aber eine Abfrage darauf mache,
kriege ich nur die Sanduhr.
Wenn ich die Datenbank komprimiere ist zwar alles wieder super aber
das ist vom Handling her ein bißchen blöd, da im Anschluß an die
Funktion eigentlich weitere Schritte erforderlich sind.
Was ich inzwischen auch weiß: Es liegt nicht am Access 2010. Ich habe
mir inzwischen Access 2003 wierder installlieren lassen, da bleiben
die Effekte aber gleich. Also XP + Access 2003 läuft - Windoes 7 +
Access 2010 oder Access 2003 läuft nicht.
Wahrscheinlich werde ich das Ganze völlig umbauen müssen.

Gruß, und nochmals Danke
Helmut Mauer

A_K

unread,
Oct 8, 2011, 5:45:31 AM10/8/11
to
Deine Problembeschreibung klingt nach einer Endlosschleife, es ist
aber keine zu erkennen hmm...

Ich hatte einst Probleme mit der Benutzung von DAO.Recordset bei zu
vielen Datensätzen.
Debugge doch mal ein wenig. Also packe ganz unten vor dem MoveNext
doch mal folgendes ein:
If lfnr = 65534 Then
Debug.Print bundnr
End If
und setze einen Haltepunkt auf die Debug.Print Anweisung.
Dann geh mal ein paar Runden mit dem Programm mit.

Grüße, Anton

0 new messages