Selectie in subform

Status
Niet open voor verdere reacties.

LodewijkG

Gebruiker
Lid geworden
6 dec 2012
Berichten
98
Beste,

Ik wil in mijn mainform, in een textveld, een waarde laten terug keren op basis van een rij selectie in mijn subform.

Dit is mij gelukt via: (alleen moet ik dan eerst een rij selecteren in het subform, en daarna de textbox in de mainform selecteren)
Private Sub txtReadInsurrance_GotFocus()
Me.txtReadInsurrance.Value = Me.sfmOrder.Form.txtInsurrance
End Sub


Op basis daarvan leek het mij dat ik de Bij Focus functie moest gaan opbouwen uit mijn subform. Alleen krijg ik de code niet werkend, ik heb het volgende:
Private Sub txtReadInsurrance_GotFocus()
Me.frmOrder.Form.txtReadInsurrance.Value = Me.txtInsurrance
End Sub


Ik geloof dat ik de verwijzing Me.Parent.RecordSource.Value = Me.RecordSource zou moeten gebruiken.

Kan iemand mij dit uitleggen?
 
Je opzet is, op zijn minst, nogal ongelukkig gekozen. Sowieso treedt de gebeurtenis <Bij focus> alleen op als je ergens op klikt (tab werkt natuurlijk ook), en dat vereist dus altijd een extra handeling. Daarnaast doe je in de nieuwe variant prcis het omgekeerde van wat je wilt; je vult het subformulier nu met wat in het hoofdformulier staat. Volgens mij wil je dat niet.
Gebruik een gebeurtenis waarbij je géén gebruikersactie nodig hebt, zoals <Bij aanwijzen>.
 
Dag OctaFish,

Ik heb nu mijn formules uit mijn formulier getrokken en ik queries gezet, dit leek mij een stap in de goede richting.

Nu wil ik de resultaten uit mijn queries naar het formulier doorzetten, maar ik loop dan tegen twee problemen aan.
1. Ik heb nog geen goede weg gevonden om de queries bijvoorbeeld aan een textbox te linken. (ik kan me voorstellen dat dit met een DLOOKUP functie kan, maar is daar misschien een betere manier voor?)
2. Er zijn vier Queries die op elkaar doorrekenen waardoor ik de error, query te complex, krijg. Ik denk dat dit eerder aan de opbouw ligt dan de complexiteit. Maar misschien dat ik dit kan aanpassen door een goede oplossing te vinden voor mijn eerste vraag?

Ik heb de database geupload: http://s000.tinyupload.com/index.php?file_id=59239753684864129408

Ik denk dat ik als ik hier een oplossing voor vindt, ook de oplossing heb gevonden voor wat ik wilde bereiken met mijn post hierboven. (Ik wilde namelijk voorkomen te veel informatie in het subform weer te geven en bijvoorbeeld via een query alle kosten componenten op te kunnen roepen zodat ik kan zien hoe deze is opgebouwd.)

Alvast bedankt!
 
Ik zoek het tekstveld txtReadInsurrance, maar kan dat nergens vinden. Over welk formulier hebben we het nu?
 
Ik heb een aantal velden verwijderd omdat ik deze eerst in mijn formules gebruikte. Ik heb het over de frmOrder en sfmOrder.
 
En wat wil je nu? Want nu snap ik je vraag niet meer.
 
Met de querydefs kun je een query opbouwen die bestaat uit een combinatie van dingen die je aanvinkt, selecteer, invult, etc...... in je hoofdformulier? Tot nu toe heb ik daar niet echt beperkingen op gevonden al denk ik dat je query uit niet meer dan 255 velden zal mogen bestaan. In mijn geval een tiental keuzelijsten met een tiental aanvinkvakjes en keuzerondjes met zowel numerieke - datum - en tekstvelden en de formulierfilter vindt je in een tekstveld juist boven de subform terug. De cmdFilter_Click zet je dan in bv de afterupdate van ieder item zodat het subformulier netjes gefilterd wordt; ik bied de gebruiker ook aan om de gepaste kolommen te verbergen door aan - uitvinken rechts.

Eens de volledige code; je pleurt er wel uit wat nodig is.
Code:
Public Sub cmdFilter_Click()
On Error GoTo Err_cmdFilter_Click
'Uitvoerende VBA code
'Purpose:   Build up the criteria string form the non-blank search boxes, and apply to the form's Filter.
    'Notes:     1. We tack " AND " on the end of each condition so you can easily add more search boxes; _
                        we remove the trailing " AND " at the end.
    '           2. The date range works like this: _
                        Both dates      = only dates between (both inclusive. _
                        Start date only = all dates from this one onwards; _
                        End date only   = all dates up to (and including this one).
    Dim strWhere As String                  'The criteria string.
    Dim lngLen As Long                      'Length of the criteria string to append to.
    Const conJetDate = "\#mm\/dd\/yyyy\#"   'The format expected for dates in a JET query string.
    
    '***********************************************************************
    'Look at each search box, and build up the criteria string from the non-blank ones.
    '***********************************************************************
    If Me.SlvKatzNietA = -1 Then
        strWhere = strWhere & "([Categorie] <> 'A') AND "
    End If
    If Me.SlvKatzNietAD = -1 Then
        strWhere = strWhere & "([Categorie] <> 'Ad') AND "
    End If
    If Me.SlvKatzNietAB = -1 Then
        strWhere = strWhere & "([Categorie] <> '[A/B]') AND "
    End If
    If Me.SlvKatzNietO = -1 Then
        strWhere = strWhere & "([Categorie] <> 'O') AND "
    End If
    If Me.SlvKatzVraagteken = -1 Then
        strWhere = strWhere & "([Categorie] <> '?') AND "
    End If
    If Me.SlvReligieuze = -1 Then
        strWhere = strWhere & "([Prioriteitreligieuze] = True) AND "
    End If
    If Me.SlvPersoneel = -1 Then
        strWhere = strWhere & "([Prioriteitpersoneel] = True) AND "
    End If
    If Me.Keuzerondje_Prior = -1 Then
        strWhere = strWhere & "([Prior] <> null) AND "
    End If
    If Me.Keuzerondje_Actief = -1 Then
        strWhere = strWhere & "([Act] = True) AND "
    End If
    
    If Me.Keuzerondje_Passief = -1 Then
        strWhere = strWhere & "([Pas] = True) AND "
    End If
    
    If Me.Keuzerondje_Geschrapt = -1 Then
        strWhere = strWhere & "([Geschrapt] = True) AND "
    End If
    
    If Me.Keuzerondje_opgenomen = -1 Then
        strWhere = strWhere & "([Opgenomen] = True) AND "
    End If
    
    If Me.Keuzerondje_tijdelijk_opgenomen = -1 Then
        strWhere = strWhere & "([tijdelijk_opgenomen] = True) AND "
    End If
    
    If Not IsNull(Me.Kzl_NrWachtlijst) Then
        strWhere = strWhere & "([Nr wachtlijst] Like """ & Me.Kzl_NrWachtlijst & "*"") AND "
    End If
    
    If Not IsNull(Me.Kzl_Jaartal) Then
        strWhere = strWhere & "([Datum aanvraag] Like ""*" & Me.Kzl_Jaartal & "*"") AND "
    End If
    
    If Not IsNull(Me.Kzl_Maandkeuze) Then
        strWhere = strWhere & "([Datum aanvraag] Like ""*" & Me.Kzl_Maandkeuze & "*"") AND "
    End If
    
    If Not IsNull(Me.Kzl_Geslacht) Then
        strWhere = strWhere & "([M/V] Like ""*" & Me.Kzl_Geslacht & "*"") AND "
    End If
    
    If Not IsNull(Me.Kzl_afdeling_een) Then
        strWhere = strWhere & "([1°Afdeling] = """ & Me.Kzl_afdeling_een & """) AND "
    End If
        
    If Not IsNull(Me.Kzl_afdeling_twee) Then
        strWhere = strWhere & "([2°Afdeling] = """ & Me.Kzl_afdeling_twee & """) AND "
    End If
    
    If Not IsNull(Me.Kzl_afdeling_drie) Then
        strWhere = strWhere & "([3°Afdeling] = """ & Me.Kzl_afdeling_drie & """) AND "
    End If
    
    If Not IsNull(Me.Kzl_prioriteit_gemeente) Then
        strWhere = strWhere & "([PrGem] = " & Me.Kzl_prioriteit_gemeente & ") AND "
    End If
    
    If Not IsNull(Me.Kzl_gemeente) Then
        strWhere = strWhere & "([BVWoonplaats] = """ & Me.Kzl_gemeente & """) AND "
    End If
    
    If Not IsNull(Me.Kzl_kamerkeuze_een) Then
        strWhere = strWhere & "([1°Kamerkeuze] = " & Me.Kzl_kamerkeuze_een & ") AND "
    End If
    
    If Not IsNull(Me.Kzl_kamerkeuze_twee) Then
        strWhere = strWhere & "([2°Kamerkeuze] = " & Me.Kzl_kamerkeuze_twee & ") AND "
    End If
    
    If Not IsNull(Me.Kzl_kamerkeuze_drie) Then
        strWhere = strWhere & "([3°Kamerkeuze] = " & Me.Kzl_kamerkeuze_drie & ") AND "
    End If
    
    If Not IsNull(Me.kzl_categorie) Then
        strWhere = strWhere & "([Categorie] = """ & Me.kzl_categorie & """) AND "
    End If
        If Me.Keuzerondje_KVC = -1 Then
        strWhere = strWhere & "([KVB_wachtlijst] = True) AND "
    End If
        If Me.Keuzerondje_KVC_OK = -1 Then
        strWhere = strWhere & "([KVB_wachtlijst_voldaan] = True) AND "
    End If
    
    'Another text field example. Use Like to find anywhere in the field.
    'If Not IsNull(Me.txtFilterMainName) Then
        'strWhere = strWhere & "([MainName] Like ""*" & Me.txtFilterMainName & "*"") AND "
    'End If
    
    'Number field example. Do not add the extra quotes.
    'If Not IsNull(Me.cboFilterLevel) Then
        'strWhere = strWhere & "([LevelID] = " & Me.cboFilterLevel & ") AND "
    'End If
    
    'Yes/No field and combo example. If combo is blank or contains "ALL", we do nothing.
    'If Me.cboFilterIsCorporate = -1 Then
       ' strWhere = strWhere & "([IsCorporate] = True) AND "
    'ElseIf Me.cboFilterIsCorporate = 0 Then
       ' strWhere = strWhere & "([IsCorporate] = False) AND "
    'End If
    
    'Date field example. Use the format string to add the # delimiters and get the right international format.
    'If Not IsNull(Me.txtStartDate) Then
     '   strWhere = strWhere & "([EnteredOn] >= " & Format(Me.txtStartDate, conJetDate) & ") AND "
    'End If
    
    'Another date field example. Use "less than the next day" since this field has times as well as dates.
    'If Not IsNull(Me.txtEndDate) Then   'Less than the next day.
     '   strWhere = strWhere & "([EnteredOn] < " & Format(Me.txtEndDate + 1, conJetDate) & ") AND "
    'End If
    
    '***********************************************************************
    'Chop off the trailing " AND ", and use the string as the form's Filter.
    '***********************************************************************
    'See if the string has more than 5 characters (a trailng " AND ") to remove.
    lngLen = Len(strWhere) - 5
    If lngLen <= 0 Then     'Nah: there was nothing in the string.
        msgbox "No criteria", vbInformation, "Nothing to do."
        'cmdReset_Click
    Else                    'Yep: there is something there, so remove the " AND " at the end.
        strWhere = Left$(strWhere, lngLen)
        'For debugging, remove the leading quote on the next line. Prints to Immediate Window (Ctrl+G).
        'Debug.Print strWhere
        
        'Finally, apply the string as the form's Filter.
        Me.[Sub_Frm_kamers].Form.Filter = strWhere
        Me.[Sub_Frm_kamers].Form.FilterOn = True
        Me.Txtaantal = Me.Sub_Frm_kamers.Form.Recordset.RecordCount
    End If
Exit_cmdFilter_Click:
     Exit Sub
Err_cmdFilter_Click:
     Select Case Err.Number
            Case 20 'Resume zonder Error
                    Resume Next
            Case 94 'Ongeldig gebruik van Null
                 msgbox " Geen criteria, herbegin of vul het nodige veld in", vbCritical + vbOKOnly, "Opgelet!"
                    Resume Next
            Case 3021 ' Geen huidige record
                    Resume Next
            Case 3077  'Geen criteria
                    msgbox " Geen criteria, herbegin", vbCritical + vbOKOnly, "Opgelet!"
                    Resume Next
            Case 3167  'Record is al verwijderd
                    Resume Next
            Case 9999
                   Resume Next
            Case 999
                   Resume Exit_cmdFilter_Click
            Case Else
            Call LogError(Err.Number, Err.Description, "cmdFilter_Click()")
                Resume Exit_cmdFilter_Click
     End Select
End Sub
 

Bijlagen

  • Knipsel4.jpg
    Knipsel4.jpg
    87,3 KB · Weergaven: 54
Ik heb de berekeningen uit het subformulier gehaald, eerst had ik deze in tekstvakken staan in het subformulier (gaf eigenlijk stap gewijs de kosten weer), deze heb ik dus nu in queries staan maar de totale opsomming van de kostprijs wil ik wel weergeven in het subformulier. Na het invullen van de SalesPrice de berekende marge ook.

Dat wanneer bijvoorbeeld een product word gekozen dat er op basis van de queries berekend wordt wat de kostprijs zou moeten zijn(dit is momenteel niet het geval omdat er wordt gesteld dat de query te complex zou zijn).
De indeling van sfmOrder wordt dan:
"Code";"Description";"PurPrice";"Label";"Packaging";"Quantity";"Add.Cost";"CostPrice"(qryCredit is dan doorgerekend);"SalesPrice";"Margin"

Daarna zou ik een pop up venstertje willen maken dat je een product kunt selecteren, en dan stapgewijs kan weergeven hoe de prijs is opgebouwd. (Per 1 hoeveelheid product(mt/ltr etc. product afhankelijk))
Purchase Price =
Transport Cost =
Packaging Price =
etc.
 
Laatst bewerkt:
Met de querydefs kun je een query opbouwen die bestaat uit een combinatie van dingen die je aanvinkt, selecteer, invult, etc...... in je hoofdformulier? Tot nu toe heb ik daar niet echt beperkingen op gevonden al denk ik dat je query uit niet meer dan 255 velden zal mogen bestaan. In mijn geval een tiental keuzelijsten met een tiental aanvinkvakjes en keuzerondjes met zowel numerieke - datum - en tekstvelden en de formulierfilter vindt je in een tekstveld juist boven de subform terug. De cmdFilter_Click zet je dan in bv de afterupdate van ieder item zodat het subformulier netjes gefilterd wordt; ik bied de gebruiker ook aan om de gepaste kolommen te verbergen door aan - uitvinken rechts.

Eens de volledige code; je pleurt er wel uit wat nodig is.
Code:
Public Sub cmdFilter_Click()
On Error GoTo Err_cmdFilter_Click
'Uitvoerende VBA code
'Purpose:   Build up the criteria string form the non-blank search boxes, and apply to the form's Filter.
    'Notes:     1. We tack " AND " on the end of each condition so you can easily add more search boxes; _
                        we remove the trailing " AND " at the end.
    '           2. The date range works like this: _
                        Both dates      = only dates between (both inclusive. _
                        Start date only = all dates from this one onwards; _
                        End date only   = all dates up to (and including this one).
    Dim strWhere As String                  'The criteria string.
    Dim lngLen As Long                      'Length of the criteria string to append to.
    Const conJetDate = "\#mm\/dd\/yyyy\#"   'The format expected for dates in a JET query string.
    
    '***********************************************************************
    'Look at each search box, and build up the criteria string from the non-blank ones.
    '***********************************************************************
    If Me.SlvKatzNietA = -1 Then
        strWhere = strWhere & "([Categorie] <> 'A') AND "
    End If
    If Me.SlvKatzNietAD = -1 Then
        strWhere = strWhere & "([Categorie] <> 'Ad') AND "
    End If
    If Me.SlvKatzNietAB = -1 Then
        strWhere = strWhere & "([Categorie] <> '[A/B]') AND "
    End If
    If Me.SlvKatzNietO = -1 Then
        strWhere = strWhere & "([Categorie] <> 'O') AND "
    End If
    If Me.SlvKatzVraagteken = -1 Then
        strWhere = strWhere & "([Categorie] <> '?') AND "
    End If
    If Me.SlvReligieuze = -1 Then
        strWhere = strWhere & "([Prioriteitreligieuze] = True) AND "
    End If
    If Me.SlvPersoneel = -1 Then
        strWhere = strWhere & "([Prioriteitpersoneel] = True) AND "
    End If
    If Me.Keuzerondje_Prior = -1 Then
        strWhere = strWhere & "([Prior] <> null) AND "
    End If
    If Me.Keuzerondje_Actief = -1 Then
        strWhere = strWhere & "([Act] = True) AND "
    End If
    
    If Me.Keuzerondje_Passief = -1 Then
        strWhere = strWhere & "([Pas] = True) AND "
    End If
    
    If Me.Keuzerondje_Geschrapt = -1 Then
        strWhere = strWhere & "([Geschrapt] = True) AND "
    End If
    
    If Me.Keuzerondje_opgenomen = -1 Then
        strWhere = strWhere & "([Opgenomen] = True) AND "
    End If
    
    If Me.Keuzerondje_tijdelijk_opgenomen = -1 Then
        strWhere = strWhere & "([tijdelijk_opgenomen] = True) AND "
    End If
    
    If Not IsNull(Me.Kzl_NrWachtlijst) Then
        strWhere = strWhere & "([Nr wachtlijst] Like """ & Me.Kzl_NrWachtlijst & "*"") AND "
    End If
    
    If Not IsNull(Me.Kzl_Jaartal) Then
        strWhere = strWhere & "([Datum aanvraag] Like ""*" & Me.Kzl_Jaartal & "*"") AND "
    End If
    
    If Not IsNull(Me.Kzl_Maandkeuze) Then
        strWhere = strWhere & "([Datum aanvraag] Like ""*" & Me.Kzl_Maandkeuze & "*"") AND "
    End If
    
    If Not IsNull(Me.Kzl_Geslacht) Then
        strWhere = strWhere & "([M/V] Like ""*" & Me.Kzl_Geslacht & "*"") AND "
    End If
    
    If Not IsNull(Me.Kzl_afdeling_een) Then
        strWhere = strWhere & "([1°Afdeling] = """ & Me.Kzl_afdeling_een & """) AND "
    End If
        
    If Not IsNull(Me.Kzl_afdeling_twee) Then
        strWhere = strWhere & "([2°Afdeling] = """ & Me.Kzl_afdeling_twee & """) AND "
    End If
    
    If Not IsNull(Me.Kzl_afdeling_drie) Then
        strWhere = strWhere & "([3°Afdeling] = """ & Me.Kzl_afdeling_drie & """) AND "
    End If
    
    If Not IsNull(Me.Kzl_prioriteit_gemeente) Then
        strWhere = strWhere & "([PrGem] = " & Me.Kzl_prioriteit_gemeente & ") AND "
    End If
    
    If Not IsNull(Me.Kzl_gemeente) Then
        strWhere = strWhere & "([BVWoonplaats] = """ & Me.Kzl_gemeente & """) AND "
    End If
    
    If Not IsNull(Me.Kzl_kamerkeuze_een) Then
        strWhere = strWhere & "([1°Kamerkeuze] = " & Me.Kzl_kamerkeuze_een & ") AND "
    End If
    
    If Not IsNull(Me.Kzl_kamerkeuze_twee) Then
        strWhere = strWhere & "([2°Kamerkeuze] = " & Me.Kzl_kamerkeuze_twee & ") AND "
    End If
    
    If Not IsNull(Me.Kzl_kamerkeuze_drie) Then
        strWhere = strWhere & "([3°Kamerkeuze] = " & Me.Kzl_kamerkeuze_drie & ") AND "
    End If
    
    If Not IsNull(Me.kzl_categorie) Then
        strWhere = strWhere & "([Categorie] = """ & Me.kzl_categorie & """) AND "
    End If
        If Me.Keuzerondje_KVC = -1 Then
        strWhere = strWhere & "([KVB_wachtlijst] = True) AND "
    End If
        If Me.Keuzerondje_KVC_OK = -1 Then
        strWhere = strWhere & "([KVB_wachtlijst_voldaan] = True) AND "
    End If
    
    'Another text field example. Use Like to find anywhere in the field.
    'If Not IsNull(Me.txtFilterMainName) Then
        'strWhere = strWhere & "([MainName] Like ""*" & Me.txtFilterMainName & "*"") AND "
    'End If
    
    'Number field example. Do not add the extra quotes.
    'If Not IsNull(Me.cboFilterLevel) Then
        'strWhere = strWhere & "([LevelID] = " & Me.cboFilterLevel & ") AND "
    'End If
    
    'Yes/No field and combo example. If combo is blank or contains "ALL", we do nothing.
    'If Me.cboFilterIsCorporate = -1 Then
       ' strWhere = strWhere & "([IsCorporate] = True) AND "
    'ElseIf Me.cboFilterIsCorporate = 0 Then
       ' strWhere = strWhere & "([IsCorporate] = False) AND "
    'End If
    
    'Date field example. Use the format string to add the # delimiters and get the right international format.
    'If Not IsNull(Me.txtStartDate) Then
     '   strWhere = strWhere & "([EnteredOn] >= " & Format(Me.txtStartDate, conJetDate) & ") AND "
    'End If
    
    'Another date field example. Use "less than the next day" since this field has times as well as dates.
    'If Not IsNull(Me.txtEndDate) Then   'Less than the next day.
     '   strWhere = strWhere & "([EnteredOn] < " & Format(Me.txtEndDate + 1, conJetDate) & ") AND "
    'End If
    
    '***********************************************************************
    'Chop off the trailing " AND ", and use the string as the form's Filter.
    '***********************************************************************
    'See if the string has more than 5 characters (a trailng " AND ") to remove.
    lngLen = Len(strWhere) - 5
    If lngLen <= 0 Then     'Nah: there was nothing in the string.
        msgbox "No criteria", vbInformation, "Nothing to do."
        'cmdReset_Click
    Else                    'Yep: there is something there, so remove the " AND " at the end.
        strWhere = Left$(strWhere, lngLen)
        'For debugging, remove the leading quote on the next line. Prints to Immediate Window (Ctrl+G).
        'Debug.Print strWhere
        
        'Finally, apply the string as the form's Filter.
        Me.[Sub_Frm_kamers].Form.Filter = strWhere
        Me.[Sub_Frm_kamers].Form.FilterOn = True
        Me.Txtaantal = Me.Sub_Frm_kamers.Form.Recordset.RecordCount
    End If
Exit_cmdFilter_Click:
     Exit Sub
Err_cmdFilter_Click:
     Select Case Err.Number
            Case 20 'Resume zonder Error
                    Resume Next
            Case 94 'Ongeldig gebruik van Null
                 msgbox " Geen criteria, herbegin of vul het nodige veld in", vbCritical + vbOKOnly, "Opgelet!"
                    Resume Next
            Case 3021 ' Geen huidige record
                    Resume Next
            Case 3077  'Geen criteria
                    msgbox " Geen criteria, herbegin", vbCritical + vbOKOnly, "Opgelet!"
                    Resume Next
            Case 3167  'Record is al verwijderd
                    Resume Next
            Case 9999
                   Resume Next
            Case 999
                   Resume Exit_cmdFilter_Click
            Case Else
            Call LogError(Err.Number, Err.Description, "cmdFilter_Click()")
                Resume Exit_cmdFilter_Click
     End Select
End Sub

Dag JohanRVT,

De queries die ik gebruik schakelen tussen de subform en mainform, eigenlijk in vier delen:
Stap 1: opsommen van kosten inkoop, transport(berekend vanuit selectie hoofdtabel), label, verpakking
Stap 2: commissie kosten berekenen en opsommen (invullen in hoofd formulier)
Stap 3: verzekering en indien nodig letter of credit kosten erbij opsommen (lookup)
Stap 4: krediet kosten (opgebouwd uit drie betalingstermijnen) erbij optellen. (lookup)

Ik snap niet helemaal hoe bovenstaande voor mij een oplossing is. Dit geeft denk ik aan wat wel/niet berekend moet worden in deze query?

Bedankt!
 
Laatst bewerkt:
JohanVT snapt blijkbaar beter als ik wat je bedoelt. Ik dus niet. Ik zie een hoofdformulier op basis van een tabel ([tblOrder]) en een subformulier op basis van een tabel ([tblProductOrder]). Verder zie ik geen problemen/vraagstukken.... Berekeningen die je in een formulier wilt zien kun je best in de onder een formulier liggende query maken. Of in tekstvelden op dat formulier. Maakt niet zoveel uit. Zet je de berekeningen in de query, dan snap ik deze opmerking dus niet:
1. Ik heb nog geen goede weg gevonden om de queries bijvoorbeeld aan een textbox te linken.
Berekende velden zie je, net als gewone velden, gewoon staan in de lijst met velden. Kun je dus ook zo op je formulier zetten.
Kortom: wat wil je nu eigenlijk?
 
Dag OctaFish,

Ik tracht uit qryProductOrder(Credit), het veld [TotCost] in sfmOrder te zien krijgen. Kan bijv. door invoegen van een combobox op basis van de query en dan filteren op ProductOrderId. Maar het probleem wat ik dan heb is dat als ik het product verander dan rekent de query niet..

Dus eigenlijk wat ik probeer is om in frmOrder en sfmOrder in te vullen en dan via de queries tot een [TotCost] te komen.

Hopelijk is het zo iets meer duidelijk.
 
Laatst bewerkt:
Ik heb je database niet gedownd of bekeken dus, was maar ter voorbeeld afgaande op jouw vraagstelling. Mijn code is gewoon een onafhankelijk formulier met een subformulier waar je dingen kunt in raadplegen of opzoeken via filtering. Berekening komen er niet aan te pas maar mogen in principe geen probleem zijn.
 
Laatst bewerkt:
Ik heb 'm wél bekeken, en ik snap helemaal niks van al die dubbele berekeningen. Gewoon alles in één query zetten, zou ik zeggen.
 
Dag OctaFish,

Ik heb nu de vier queries samengevoegd in 1 query. Dit werkt nu prima in qryProductOrder, alleen kan ik geen nieuwe records toevoegen in deze query.

Kan de db niet uploaden, is te groot en tinyupload geeft steeds een virus weer.

Hoe kan ik nu de velden CostPrice & Margin uit de query in sfmOrder krijgen dat wanneer ik iets verander, deze ook doorgerekend in het subform terug zie. (De update krijg ik wss middels afterupdate event met requery waarschijnlijk)

Ik dacht eerst een combobox te plaatsen, maar deze geeft dan maar van 1 regel de waarde weer. Is dan de beste manier om dit te doen:
- De velden CostPrice & Margin toe te voegen in mijn tabel;
- De comboboxen aan deze velden in het tabel te koppelen;
- Een afterupdate (met het sturen van een value en de requery) te koppelen aan de velden die van invloed zijn op deze berekening?

Is er naast deze en/of de Dlookup, misschien een betere manier om dit te doen?
 
Laatst bewerkt:
Als de db dezelfde is als de andere, is het al genoeg als je de SQL code meepost.
 
Als de db dezelfde is als de andere, is het al genoeg als je de SQL code meepost.

[sql]SELECT tblOrder.OrderId, tblProductOrder.ProductOrderId, tblProduct.ProductId, tblProductPackagingLabel.LabelId, tblProductPackagingSize.PackagingId, tblProductOrder.Quantity, tblProductOrder.AdditionalCost, tblProductOrder.SalesPrice, ([Sea]+[Land]+[CAF]+[BAF]+[LSS]+[Customs]+[THC]+[ISPS]+[tblFreight.IMO])/[CalcContainerVolume] AS FreightPerMt, IIf([CommisionPercentage]>0,([Price]+[PackagingPrice]+[LabelPrice]+[AdditionalCost]+[FreightPerMt])*[CommisionPercentage],[CommisionSolid]/[SomVanQuantity]) AS CommisionPerMt, ([Price]+[PackagingPrice]+[LabelPrice]+[AdditionalCost]+[FreightPerMt])*[FreightInsurrance] AS InsurrancePerMt, ([LCcost]/[SomVanQuantity]) AS LCcostPerMt, (([Price]+[PackagingPrice]+[LabelPrice]+[AdditionalCost]+[FreightPerMt]+[InsurrancePerMt])*[PercentageOne])*([InterestRate]*([DoCOne]/365))+(([Price]+[PackagingPrice]+[LabelPrice]+[AdditionalCost]+[FreightPerMt]+[InsurrancePerMt])*[PercentageTwo])*([InterestRate]*([DoCTwo]/365))+(([Price]+[PackagingPrice]+[LabelPrice]+[AdditionalCost]+[FreightPerMt]+[InsurrancePerMt])*[PercentageThree])*([InterestRate]*([DoCThree]/365)) AS CreditPerMt, [Price]+[LabelPrice]+[PackagingPrice]+[FreightPerMt]+[CommisionPerMt]+[InsurrancePerMt]+[LCcostPerMt]+[CreditPerMt]+[AdditionalCost] AS CostPrice, (([SalesPrice]-[CostPrice])/[CostPrice]) AS [Margin%], [SalesPrice]-[CostPrice] AS Margin€, [Margin€]*[Quantity] AS CumMargin€
FROM tblProduct INNER JOIN (tblProductPackagingSize INNER JOIN (tblProductPackagingLabel INNER JOIN (tblPaymentModality INNER JOIN (((tblOrder INNER JOIN tblFreight ON tblOrder.FreightId = tblFreight.FreightId) INNER JOIN [qryOrder(Quantity)] ON tblOrder.OrderId = [qryOrder(Quantity)].OrderId) INNER JOIN (tblProductOrder INNER JOIN tblPrice ON tblProductOrder.PriceId = tblPrice.PriceId) ON tblOrder.OrderId = tblProductOrder.OrderId) ON tblPaymentModality.PaymentModalityId = tblOrder.PaymentModalityId) ON tblProductPackagingLabel.LabelId = tblProductOrder.LabelId) ON tblProductPackagingSize.PackagingId = tblProductOrder.PackagingId) ON (tblProduct.ProductId = tblPrice.ProductId) AND (tblProduct.ProductId = tblProductOrder.ProductId);
[/sql]
 
Er is een goede reden dat je geen records kunt toevoegen middels deze query: hij is te complex. Wil je records toevoegen, dan kan dat maar aan één tabel tegelijk. Dat betekent dus voor de query dat je uit de hoofdtabel alle noodzakelijke velden invult. En dat zijn op zijn minst de velden die gekoppeld zijn aan andere tabellen. En dat doe je niet. Neem bijvoorbeeld het veld [LabelId]. Dat is het sleutelveld uit de tabel [tblProductPackagingLabel]. Dat haal je dus in de query ook uit die tabel. Maar als je een record wilt toevoegen aan [tblProductOrder] (als je dat tenminste wilt), dan moet je een waarde invullen in het veld [LabelId]. Dus dat veld moet dan in de query zitten. Bij jou is dat niet het geval. En zo kan ik wel even door gaan, met de velden [PackagingId] en [ProductId] bijvoorbeeld. Daarnaast koppel je een query die je niet nodig hebt (qryOrder(Quantity)).
 
Dag OctaFish,

De beste wensen voor 2016 & bedankt voor je hulp van afgelopen jaar.

Neem bijvoorbeeld het veld [LabelId]. Dat is het sleutelveld uit de tabel [tblProductPackagingLabel]. Dat haal je dus in de query ook uit die tabel. Maar als je een record wilt toevoegen aan [tblProductOrder] (als je dat tenminste wilt), dan moet je een waarde invullen in het veld [LabelId]. Dus dat veld moet dan in de query zitten.

Ik heb dezelfde query gepakt en in de "table" regel in de query aangepast naar tblProductOrder, ik moest de relatie van de ProductId in tblPrice & tblProduct verwijderen om hem te laten "werken"(zodat ik een regel kan toevoegen). Kan jij mij misschien uitleggen waarom deze relatie moest worden verwijderd?:confused:

Dus dat werkt nu in principe, code:

Code:
SELECT tblProductOrder.OrderId, tblProductOrder.ProductOrderId, tblProductOrder.ProductId, tblProductOrder.LabelId, tblProductOrder.PackagingId, tblProductOrder.PriceId, tblProductOrder.AdditionalCost, tblProductOrder.Quantity, tblProductOrder.SalesPrice, ([Sea]+[Land]+[CAF]+[BAF]+[LSS]+[Customs]+[THC]+[ISPS]+[tblFreight.IMO])/[CalcContainerVolume] AS FreightPerMt, IIf([CommisionPercentage]>0,([Price]+[PackagingPrice]+[LabelPrice]+[AdditionalCost]+[FreightPerMt])*[CommisionPercentage],[CommisionSolid]/[SomVanQuantity]) AS CommisionPerMt, ([Price]+[PackagingPrice]+[LabelPrice]+[AdditionalCost]+[FreightPerMt])*[FreightInsurrance] AS InsurrancePerMt, ([LCcost]/[SomVanQuantity]) AS LCcostPerMt, (([Price]+[PackagingPrice]+[LabelPrice]+[AdditionalCost]+[FreightPerMt]+[InsurrancePerMt])*[PercentageOne])*([InterestRate]*([DoCOne]/365))+(([Price]+[PackagingPrice]+[LabelPrice]+[AdditionalCost]+[FreightPerMt]+[InsurrancePerMt])*[PercentageTwo])*([InterestRate]*([DoCTwo]/365))+(([Price]+[PackagingPrice]+[LabelPrice]+[AdditionalCost]+[FreightPerMt]+[InsurrancePerMt])*[PercentageThree])*([InterestRate]*([DoCThree]/365)) AS CreditPerMt, [Price]+[LabelPrice]+[PackagingPrice]+[FreightPerMt]+[CommisionPerMt]+[InsurrancePerMt]+[LCcostPerMt]+[CreditPerMt]+[AdditionalCost] AS CostPrice, (([SalesPrice]-[CostPrice])/[CostPrice]) AS [Margin%], [SalesPrice]-[CostPrice] AS Margin€, [Margin€]*[Quantity] AS CumMargin€
FROM tblProduct INNER JOIN (tblProductPackagingSize INNER JOIN (tblProductPackagingLabel INNER JOIN (tblPaymentModality INNER JOIN ((tblOrder INNER JOIN tblFreight ON tblOrder.FreightId = tblFreight.FreightId) INNER JOIN (tblPrice INNER JOIN tblProductOrder ON tblPrice.PriceId = tblProductOrder.PriceId) ON tblOrder.OrderId = tblProductOrder.OrderId) ON tblPaymentModality.PaymentModalityId = tblOrder.PaymentModalityId) ON tblProductPackagingLabel.LabelId = tblProductOrder.LabelId) ON tblProductPackagingSize.PackagingId = tblProductOrder.PackagingId) ON tblProduct.ProductId = tblProductOrder.ProductId;

Dan had je een opmerking geplaatst over de berekende hoeveelheid per OrderId
Daarnaast koppel je een query die je niet nodig hebt (qryOrder(Quantity))

Hoe zou ik in qryProductOrder, qryOrder(quantity) kunnen plaatsen? Ik kan dit ook niet echt op internet vinden..
Logica zou mij zeggen dat ik de som zou moeten nemen per OrderId, maar hoe verwoord ik dat in een bruikbare formule?
 
De berekening die je in de aparte query doet, kun je net zo makkelijk met DSUM maken. En dan heb je die query dus niet nodig.
 
Dag OctaFish,

Bedankt weer, ik heb de DSUM functie opgezocht en proberen toe te passen, gelukt!

Ik kwam voor wat uitleg over de DSUM() op een hulpvolle site terecht voor als iemand hier ook wat meer over wilt opzoeken: https://theaccessbuddy.wordpress.com/2013/12/25/dsum-function-the-art-of-writing-a-criteria/

De code is geworden:
Code:
SELECT tblProductOrder.OrderId, tblProductOrder.ProductOrderId, tblProductOrder.ProductId, tblProductOrder.LabelId, tblProductOrder.PackagingId, tblProductOrder.PriceId, tblProductOrder.AdditionalCost, tblProductOrder.Quantity, tblProductOrder.SalesPrice, ([Sea]+[Land]+[CAF]+[BAF]+[LSS]+[Customs]+[THC]+[ISPS]+[tblFreight.IMO])/[CalcContainerVolume] AS FreightPerMt, IIf([CommisionPercentage]>0,([Price]+[PackagingPrice]+[LabelPrice]+[AdditionalCost]+[FreightPerMt])*[CommisionPercentage],[CommisionSolid]/(DSum("quantity","tblProductOrder","[OrderId]=" & [tblProductOrder].[OrderId]))) AS CommisionPerMt, ([Price]+[PackagingPrice]+[LabelPrice]+[AdditionalCost]+[FreightPerMt])*[FreightInsurrance] AS InsurrancePerMt, ([LCcost]/(DSum("quantity","tblProductOrder","[OrderId]=" & [tblProductOrder].[OrderId]))) AS LCcostPerMt, (([Price]+[PackagingPrice]+[LabelPrice]+[AdditionalCost]+[FreightPerMt]+[InsurrancePerMt])*[PercentageOne])*([InterestRate]*([DoCOne]/365))+(([Price]+[PackagingPrice]+[LabelPrice]+[AdditionalCost]+[FreightPerMt]+[InsurrancePerMt])*[PercentageTwo])*([InterestRate]*([DoCTwo]/365))+(([Price]+[PackagingPrice]+[LabelPrice]+[AdditionalCost]+[FreightPerMt]+[InsurrancePerMt])*[PercentageThree])*([InterestRate]*([DoCThree]/365)) AS CreditPerMt, [Price]+[LabelPrice]+[PackagingPrice]+[FreightPerMt]+[CommisionPerMt]+[InsurrancePerMt]+[LCcostPerMt]+[CreditPerMt]+[AdditionalCost] AS CostPrice, (([SalesPrice]-[CostPrice])/[CostPrice]) AS [Margin%], [SalesPrice]-[CostPrice] AS Margin€, [Margin€]*[Quantity] AS CumMargin€
FROM tblProduct INNER JOIN (tblProductPackagingSize INNER JOIN (tblProductPackagingLabel INNER JOIN (tblPaymentModality INNER JOIN ((tblOrder INNER JOIN tblFreight ON tblOrder.FreightId = tblFreight.FreightId) INNER JOIN (tblPrice INNER JOIN tblProductOrder ON tblPrice.PriceId = tblProductOrder.PriceId) ON tblOrder.OrderId = tblProductOrder.OrderId) ON tblPaymentModality.PaymentModalityId = tblOrder.PaymentModalityId) ON tblProductPackagingLabel.LabelId = tblProductOrder.LabelId) ON tblProductPackagingSize.PackagingId = tblProductOrder.PackagingId) ON tblProduct.ProductId = tblProductOrder.ProductId;
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan