Hallo zusammen,
ich hab mal ne grundlegende Frage,
ist es möglich, das ich in einem Formular definiere wie ein Unterformular aussieht?
Zwischen Formular und Unterformular besteht eine 1:n Beziehung.
Also im Formular würde man beispielsweise ein Datum eingeben (Vertragsbeginn).
Der Vertrag hat immer eine bestimmte ID.
Dann würde man Anzahl der Jahre auswählen.
Bsp. Vertragsbeginn 12.12.2012
Anzahl der Jahre 5.
Im Unterformular entsteht dann automatisch
ID Jahr
1 2012
1 2013
1 2014
1 2015
1 2016
1 2017
Ist so etwas möglich?
Hallo,
Auch grundlegende Antwort:
Zitatist es möglich, das ich in einem Formular definiere wie ein Unterformular aussieht?
Das Aussehen eines Formulares wird in der Form-Entwurfsansicht definiert. Diese Definition kann auch per VBA erfolgen, indem das Form damit in der Entwurfsansicht geöffnet und bearbeitet wird.
Das ist aber sicherlich nicht das, was Du mit der Frage gemeint hast.
eher dieses:
1)
Füge mit Hilfe einer Anfügeabfrage die Datensätze mit der Jahreszahl und dem richtigen Fremdschlüssel(wert) in die Tabelle ein, auf der das Ufo basiert. Setze danach ein Requery auf das Ufo ab.
oder auch:
2)
Hänge die DS mittels Schleife über die Jahresanzahl an das Ufo-Recordset an.
ZitatIm Unterformular entsteht dann automatisch
Solche Vorgängen beziehen sich immer primär auf Tabellen, auch wenn wie in Fall 2) das Form-Recordset herangezogen wird. Das Formular hat nur den eigentlichenZweck, die Daten zu visuliasieren.
Ok,
kannst du das näher erläutern oder weißt du zufällig eine Beispieldatenbank In der das beschreiben ist?
Hi,
Zitat von: benjamin.grimm am September 05, 2013, 13:30:21
ist es möglich, das ich in einem Formular definiere wie ein Unterformular aussieht?
ich intepretiere Dein Anliegen, dass nicht das Aussehen, sondern die Daten im UFO definiert werden.
Anbei im Anhang ein Beispiel.
Im Formular "Vertragsbeginn" gibt es die Möglichkeit, die Anzahl Folge-Jahre einzutragen.
Da nur die Sprache von Jahr war, habe ich diese Folgejahre als Zahl und nicht als Datum angelegt.
Der Button legt die Daten im Unterformular an, sofern es diese noch nicht gab.
Die Vertrags-ID wird im UFO angezeigt, ist dort aber nicht gespeichert. Diese wird per Abfrage aus der Tabelle1 geholt.
Vielleicht kann das eine erste Anregung sein.
Harald
[Anhang gelöscht durch Administrator]
Ok super.
Dankeschön auf dem kann ich super aufbauen.
Ich muss dann noch, die Kosten berechnen lassen und die Inflationsrate miteinkalkulieren.
Ich lass dich wissen, wie es weiter gegangen ist.
grüße
Benjamin
hey
also das klappt jetzt echt gut.
Danke für den Anstoß.
Ich hab noch eine Frage vom Code her:
Private Sub Befehl32_Click()
Dim rs As DAO.Recordset, amtPerYear As Long, I As Integer
If Nz(Me.running_time, 0) = 0 Then
MsgBox "No running time is set"
Exit Sub
Else
Set rs = Me.Untergeordnet12.Form.Recordset
For I = 0 To Me.running_time - 1
rs.AddNew
rs!payYear = Year(Me.contract_inception) + I
amtPerYear = Me.montly_amount * 12
rs!Amount_per_anno = ((amtPerYear * (Me.interest_rate / 100)) * I) + amtPerYear
rs!SuWID = Me.SuWID
rs.Update
Next
Set rs = Nothing
End If
End Sub
Ich hab jetzt den code geschrieben. Sorry das Tool soll jetzt in Englisch sein.
Wie schaffe ich es das er nicht 12 Monate pro Jahr nimmt sondern bei Vertragsbeginn nur die Differenz und bei Vertragsende wieder die Differenz.
Ich hab mir schon irgendwie gedacht sowas
If Year(Me.contract_inception) = Year(?????) Then
amtPerYear = Me.montly_amount * (12 - Month(Me.contract_inception))
If Year(Me.contract_inception) = Year(?????) + Me.running_time Then
amtPerYear = Me.montly_amount * Month(Me.contract_inception)
Else
amtPerYear = Me.montly_amount * 12
Ich weiß nicht was ich bei den Fragezeichen rein schreiben soll.
Habt ihr ne Idee oder einen anderen Vorschlag?
Grüße
Hi,
Bitte erkläre, wozwischen eine Differenz besteht.
Harald
Ich geb ja den Vertragsbeginn an (inception date)
und wenn der Vertrag jetzt am 01.09.2013 gemacht wurde. Dann sind ja nur 4 Monate in 2013 angefallen und nicht 12.
Also soll er dort 4*montly_rate rechnen.
Im letzten Jahr sind es ja dann die restlichen 8 Monate, also da soll er ja dann
8* montly_rate rechnen.
Weißt du was ich meine?
Hi,
anbei ein ungetesteter Vorschlag:
Private Sub Befehl32_Click()
Dim rs As DAO.Recordset, amtPerYear As Long, I As Integer
If Nz(Me.running_time, 0) = 0 Then
MsgBox "No running time is set"
Exit Sub
Else
Set rs = Me.Untergeordnet12.Form.Recordset
For I = 0 To Me.running_time - 1
rs.AddNew
rs!payYear = Year(Me.contract_inception) + I
Select Case I
Case 0
amtPerYear = Me.montly_amount * (13 - Month(Me.contract_inception)) '13 und nicht 12, damit 13 - "Dezember" eine eins ergibt
Case Me.running_time - 1
amtPerYear = Me.montly_amount * (Month(Me.contract_inception) - 1)
Case Else
amtPerYear = Me.montly_amount * 12
End Select
rs!Amount_per_anno = ((amtPerYear * (Me.interest_rate / 100)) * I) + amtPerYear
rs!SuWID = Me.SuWID
rs.Update
Next
Set rs = Nothing
End If
End Sub
Üblicherweise werden berechnete Daten aber nicht gespeichert.
Harald
Nachtrag:
Sofern Me.montly_amount immer eine Zahl vom Typ integer bzw. long ist, ist die Deklaration
amtPerYear As Long
ok.
In anderen Fällen sollte die folgende Deklaration besser sein:
amtPerYear As Double
:) :) :)
ja super. Vielen Dank für deine Hilfe.
Grüße
Benjamin
Hallo jetzt ist mir nochmal was aufgefallen.
Bei der Berechnung wird immer ein Jahr zu wenig berechnet.
Bsp.
Ich hab nen Vertrag mit ner Laufzeit von 3 Jahren. Er startet am 01.12.2013(Rate 100€, keine Inflation)
Dann wär es ja
Jahr 2013 --> 100€
Jahr 2014 --> 1200€
Jahr 2015 --> 1200€
Jahr 2016 --> 1100€
Momentan berechnet der Code nur
Jahr 2013 --> 100€
Jahr 2014 --> 1200€
Jahr 2015 --> 1200€
´
Dim rs As DAO.Recordset, amtPerYear As Long, I As Integer
If Nz(Me.running_time, 0) = 0 Then
MsgBox "No running time is set"
Exit Sub
Else
Set rs = Me.Untergeordnet12.Form.Recordset
For I = 0 To Me.running_time - 1
rs.AddNew
rs!payYear = Year(Me.contract_inception) + I
Select Case I
Case 0
amtPerYear = Me.montly_amount * (13 - Month(Me.contract_inception))
Case Me.running_time - 1
amtPerYear = Me.montly_amount * (Month(Me.contract_inception) - 1)
Case Else
amtPerYear = Me.montly_amount * 12
End Select
rs!Amount_per_anno = ((amtPerYear * (Me.interest_rate / 100)) * I) + amtPerYear
rs!SuWID = Me.SuWID
rs.Update
Next
Set rs = Nothing
End If
Wo ist der Fehler?
Hi,
was passiert beim Ersatz von
For I = 0 To Me.running_time - 1
gegen
For I = 0 To Me.running_time
Wenn ok, dann
aus Case Me.running_time - 1 wird
Case Me.running_time
Harald
Vielen Dank für die schnelle Antwort
Dann klappt es. Super Danke