PDA

Vollständige Version anzeigen : Kann es sein, das man zu viele IF-Anweisungen hat und Access die nicht mehr bewältigt


Sonne im Herz
24.10.2001, 16:07
Ich habe eine Tabelle mit einigen If-Anweisungen. Ich muß dazusagen, ich hatte das Programm schon mal in Pascal programmiert, will das nun in Access machen, um gleich die Daten zu speichern.
Hab diesen Code:

Private Sub l0_enter()
If IsNull(Me.Dm) And Not IsNull(Me.De) Then Me.Dm = Me.De - Me.d
If IsNull(Me.Dm) And IsNull(Me.Di) And Not IsNull(Me.De) Then Me.Dm = Me.De - Me.d
If IsNull(Me.Dm) And IsNull(Me.De) And Not IsNull(Me.Di) Then Me.Dm = Me.Di + Me.d
If IsNull(Me.Dm) And IsNull(Me.De) And IsNull(Me.Di) Then
MsgBox "Geben sie bitte einen Wert ein, für De;Dm;Di"
Me.De.SetFocus
End If
End Sub

Private Sub Lc_AfterUpdate()
If Me.Lc > (Me.nt + 1) * Me.d Then MsgBox "L Block ist größer als dieser Wert"
End Sub

Private Sub e2_enter()
If IsNull(Me.nt) And Not IsNull(Me.n) Then Me.nt = Me.n + 1.5
If IsNull(Me.nt) And Not IsNull(Me.s) And Not IsNull(Me.L0) Then Me.nt = (Me.L0 / Me.s) + 1
If IsNull(Me.L0) Or IsNull(Me.s) And IsNull(Me.n) And IsNull(Me.nt) Then
MsgBox "Geben sie bitte einen Wert ein, für L0;s;n;nt"
Me.L0.SetFocus
End If
End Sub


Private Sub lk_afterupdate()
If IsNull(Me.nt) And Not IsNull(Me.Lk) Then Me.nt = (Me.Lk / d) + 1
If IsNull(Me.nt) And IsNull(Me.n) And IsNull(Me.s) And IsNull(Me.Lk) And Not IsNull(Me.L0) Then Me.nt = (Me.L0 / Me.d) + 1
End Sub

Private Sub lh2_afterupdate()
If IsNull(Me.L0) Then
If Not IsNull(Me.Lk) Then Me.L0 = Me.Lk
If Not IsNull(Me.Lh1) Then Me.L0 = Me.Lk + Me.Lh1 + Me.Lh1
If Not IsNull(Me.Lh2) Then Me.L0 = Me.Lk + Me.Lh1 + Me.Lh2
End If
End If
End If
End If
Me.nt = (Me.Lk * Me.d) + 1
GoTo erledigt

If Not IsNull(Me.L0) Then
If Not IsNull(Me.Lk) Then
ElseIf IsNull(Me.Lk) Then Me.Lk = Me.L0
If Not IsNull(Me.Lh1) Then Me.Lk = Me.L0 - Me.Lh1 - Me.Lh1
If Not IsNull(Me.Lh2) Then Me.Lk = Me.L0 - Me.Lh1 - Me.Lh2
End If
End If
End If
End If
Me.nt = (Me.Lk * Me.d) + 1
GoTo erledigt
erledigt:
End Sub

bis einschlieslich e2-Sub tut alles, danach ist dem Programm alles egal, ob ich einen Wert eingebe oder nicht, oder was drin steht, er berechnet dann einfach nicht.

Hab ich zu viele IF-Anweisungen.

In meinem Pascal-Programm hatte ich zum teil bis zu 10-15 if untereinander.

Danke

Frank

WalterS
24.10.2001, 19:28
Hi Sonne!

Hier sind entschieden einige endif zuviel

If IsNull(Me.L0) Then
If Not IsNull(Me.Lk) Then Me.L0 = Me.Lk
If Not IsNull(Me.Lh1) Then Me.L0 = Me.Lk + Me.Lh1 + Me.Lh1
If Not IsNull(Me.Lh2) Then Me.L0 = Me.Lk + Me.Lh1 + Me.Lh2
End If ' bezieht sich auf If IsNull(Me.L0)
End If ' entfernen da nach then eine Anweisung erfolgte und nun kein endif mehr kommt
End If' entfernen da nach then eine Anweisung erfolgte und nun kein endif mehr kommt

End If' entfernen da nach then eine Anweisung erfolgte und nun kein endif mehr kommt

Me.nt = (Me.Lk * Me.d) + 1
GoTo erledigt ' überspringt den Rest deines Sub

Zum Testen würde ich einmal Haltepunkte in den Code einfügen und ihn dann in Einzelschritten ausführen.

Sonne im Herz
25.10.2001, 15:00
Danke Walter