Helmut Mauer
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�
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
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
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�
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