Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Erstellung von Rückzahlungsplänen

Begonnen von Paule, März 13, 2016, 10:12:14

⏪ vorheriges - nächstes ⏩

Paule

Ich muss mich doch nochmal melden diesbezüglich.

In meiner Probe-Datenbank mit den exportierten Tabellen aus meiner Original-Datenbank hat das einwandfrei funktioniert.
Nun habe ich in meinem AddSales Formular zum Anlegen von neuen Verkäufen den VBA-Code aus der Probe-Datenbank eingefügt.
Leider bekomme ich dann mit Klick auf die Schaltfläche eine Fehlermeldung, die in der Probe-Datenbank nicht vorhanden war.
Der Fehler ist Laufzeitfehler 3201 - Der Datensatz kann nicht hinzugefügt oder geändert werden, da ein Datensatz in der Tabelle SA_Sales mit diesem Datensatz in Verbindung stehen muss.

Anscheinend fügt er den Verkauf nicht hinzu. Woran kann das liegen, denn in der Probe-Datenbank klappt das wunderbar?

Im Debugger markiert er mir die Zeile CurrentDb.Execute gelb an.

Hier der Code:
Private Sub AddNewSale_Click()
Dim strSQL As String
    Dim i As Integer
    If Liste80 = "SET_CAMP" Then
    For i = 1 To 9
    strSQL = "INSERT INTO CF_InstallmentsT (ReferingSale, InstallmentDate, InstallmentSum, Notes) " & " Values(" & Me!SalesID & ", " & Format(DateAdd("m", i, Me!SalesDate), "\#yyyy\/mm\/dd\#") & ", 40000, " & i & ")"
    CurrentDb.Execute strSQL, 128
    Next i
    End If
    If Liste80 = "SET_MB2-200" Then
    For i = 1 To 6
    strSQL = "INSERT INTO CF_InstallmentsT (ReferingSale, InstallmentDate, InstallmentSum, Notes) " & " Values(" & Me!SalesID & ", " & Format(DateAdd("m", i, Me!SalesDate), "\#yyyy\/mm\/dd\#") & ", 20000, " & i & ")"
    CurrentDb.Execute strSQL, 128
    Next i
    End If
    If Liste80 = "SET_TREX" Then
    For i = 1 To 6
    strSQL = "INSERT INTO CF_InstallmentsT (ReferingSale, InstallmentDate, InstallmentSum, Notes) " & " Values( " & Me!SalesID & ", " & Format(DateAdd("m", i, Me!SalesDate), "\#yyyy\/mm\/dd\#") & ", 10000, " & i & ")"
    CurrentDb.Execute strSQL, 128
    Next i
    End If
    DoCmd.GoToRecord , "", acNewRec
End Sub

MaggieMay

Hi,

vielleicht zeigst du mal einen Ausschnitt aus dem Beziehungsfenster mit den beiden Tabellen, damit man sieht wie das zusammenhängt?
Freundliche Grüße
MaggieMay

Paule

#32
Hi,

also die Tabelle CF_InstallmentsT steht mit der Tabelle SA_Sales in folgender Verbindung.
Ich habe den PK aus SA_Sales ("SalesID") mit dem Feld "ReferingSale" in CF_InstallmentsT als 1:n Verbindung verknüpft.

Ok, ich habe jetzt mal die Beziehung zwischen den Tabellen gelöscht und dann klappt es wunderbar.
Hat das irgendwelche Nachteile?

MaggieMay

Beziehungen zu löschen, die eigentlich Sinn machen, ist ganz gewiss keine Lösung.

Möglicherweise muss der aktuelle Datensatz erst gespeichert werden, ehe die Anfügeabfragen gestartet werden können.
Freundliche Grüße
MaggieMay

Paule

#34
Das heißt ich füge noch vor dem "dim..."-Anweisung noch folgende Code-Zeile ein:

DoCmd.RunCommand acCmdSaveRecord

Und das funktioniert jetzt auch mit Beziehung.

Danke!

MaggieMay

Hallo,

so könnte der Code etwas übersichtlicher gestaltet werden:
Private Sub AddNewSale_Click()
    Dim strSQL As String
    Dim i As Integer, j As Integer, instS As Long
   
    DoCmd.RunCommand acCmdSaveRecord
    ' altern.
    ' Me.Dirty = False
   
    Select Case Me!Liste80
    Case "SET_CAMP"
        j = 9
        instS = 40000
    Case "SET_MB2-200"
        j = 6
        instS = 20000
    Case "SET_TREX"
        j = 6
        instS = 10000
    End Select
   
    For i = 1 To j
        strSQL = "INSERT INTO CF_InstallmentsT (ReferingSale, InstallmentDate, InstallmentSum, Notes) " & _
                 "Values(" & Me!SalesID & ", " & Format(DateAdd("m", i, Me!SalesDate), "\#yyyy\/mm\/dd\#") & ", " & instS & ", " & i & ")"
        CurrentDb.Execute strSQL, 128
    Next i
   
    DoCmd.GoToRecord , "", acNewRec
End Sub
Freundliche Grüße
MaggieMay

Paule

Hallo,

vielen Dank. Das sieht in der Tat besser aus!