Formulier Vullen

Status
Niet open voor verdere reacties.

Henk Benter

Gebruiker
Lid geworden
13 mei 2010
Berichten
158
In mijn toepassing ga ik middels een opdrachtknop naar een subformulier. Onder de knop heb ik de navolgende code staan:

Code:
Private Sub Knop36_Click()

Dim disc As String

disc = Forms![FrmProject]![FrmDetailDiscipline].Form![Discipline].Value

If disc = "1" Then  'Water
 'form Water openen
    DoCmd.OpenForm "frmQuickscanWater_" & disc, datamode:=acFormAdd, windowmode:=acDialog, OpenArgs:=DisciplineId & "|" & ProjectnummerID
    
ElseIf disc = "2" Then 'Laagspanning
 'form Water openen
    DoCmd.OpenForm "frmQuickscanLaagspanning_" & disc, datamode:=acFormAdd, windowmode:=acDialog, OpenArgs:=DisciplineId & "|" & ProjectnummerID
    
ElseIf disc = "5" Then 'CAI
 'form Laagspanning openen
  DoCmd.OpenForm "frmQuickscanCAI_" & disc, datamode:=acFormAdd, windowmode:=acDialog, OpenArgs:=DisciplineId & "|" & ProjectnummerID
      
Else
  MsgBox "U heeft een Discipline gekozen waar nog geen Quickscan formulier voor bestaat", vbCritical
End If

End Sub

In het subformulier heb ik de navolgende code bij laden document opgenomen om velden te vullen met waardes vanuit het hoofdformulier.

Code:
Private Sub Form_Load()
    If Not IsNull(Me.OpenArgs) Then
        Dim sArgs() As String
        sArgs = Split(Me.OpenArgs, "|")
        Me.TblDetailDisciplineID.Value = sArgs(0)
        Me.TblProjectnummerID.Value = sArgs(1)
    End If
End Sub

Gevolg van bovenstaande code is dat een gebruiker bij een druk op de knop iedere keer een leeg formulier krijgt voorgeschoteld. Dit laatste is niet de bedoeling. De gebruiker moet eenmalig het formulier voorgeschoteld krijgen en de gegevens hierop invullen. Wanneer hij enkele dagen later wederom op dezelfde knop drukt, dan moet het formulier met de inputgegevens van enkele dagen terug op het scherm verschijnen. In dit formulier moet de gebruiker dan kunnen wijzigen, de wijzigingen moeten dan weer opgeslagen worden in de tabel. Wie kan mij helpen de code zodanig aan te passen zodat het bovenstaande resultaat kan worden bereikt.
 
Het resultaat mag je niet verbazen, zolang je deze parameter meegeeft: DataMode:=acFormAdd. Dat moet je dus vooral ook niet doen. Je kunt bij het laden van het formulier een recordset gebruiken om te kijken of het record al bestaat of niet. In het ene geval toevoegen, in het andere geval updaten.
Wat is trouwens het nut van de nummers in je code als je formulieren allemaal verschillende namen hebben?
Dit:
Code:
disc = Forms![FrmProject]![FrmDetailDiscipline].Form![Discipline].Value
kan trouwens korter:
Code:
disc = Me.FrmDetailDiscipline.Form!Discipline.Value
 
De nummers in de code komen overeen met de keuzes die gebruikers maken. Als de gebruiker een variabele water invoert, dan hoort hier het formulier wat speciaal voor deze discipline is gemaakt bij, enz.. Naar je opmerking betreffende recordset moet ik nog kijken. Zal vast wel ergens code te vinden zijn om dit op te lossen, of heeft iemand voor mijn aanvullende informatie.
 
Hallo Michel, kun jij mij een stuk op weg helpen met de bedoelde code. Ik had gedacht een stuk code te kunnen vinden op inernet, maar heb helaas niets kunnen vinden. De bovenstaande code heb ik gevonden door lang te speuren. Heeft me toch enkele avonden gekost. Moet me toch eens gaan verdiepen in programmeren in vba. Al vast dank voor je reactie.
 
Ik snap nog niet helemaal wat de procedure is, vrees ik. In dan gaat het met name om het verschil wanneer de knop een nieuw record moet aanmaken, en wanneer het record moet worden bewerkt. Je start vanaf een bepaald formulier, en daarvandaan start je een ander formulier op. Jij noemt dat een subformulier, maar dat is het, neem ik aan, niet, het is gewoon een ander zelfstandig formulier. toch? Als het een subformulier is, dan staat dat op je hoofdformulier en zou de hele constructie niet eens nodig zijn, want hoofd- en subformulier kun je gewoon aan elkaar koppelen.
Zelf zou ik dus, als je een formulier nogal willekeurig de ene keer gebruikt om records toe te voegen, en de volgende keer om het laatste record te bewerken, met 2 knoppen werken. De ene knop maakt een nieuw record aan, de ander opent het formulier eventueel gefilterd met het laatste record. Desnoods maak je knoppen onzichtbaar als je maar één knop wilt laten zien.
 
Hallo Michel, klopt inderdaad. Middels een knop open ik een zelfstandig formulier. Het formulier mag overigens maar 1 record bevatten (1 op 1). Wanneer dit formulier is gevuld met de benodigde variabelen en de gebruiker wil enkele dagen nog wat wijzigen in dit formulier dan zou het fraai zijn als hij middels dezelfde knop het ingevulde formulier zou kunnen openen. Hier zoek ik een fraaie oplossing voor. Nogmaals, ik knutsel alles in elkaar in access, maar vba blijft acadabra. Daarnaast vind ik het gebruik van fraaie formulieren in access veel gebruiksvriendelijker dan het gebruik van excel, waarbij alle informatie wordt gepropt in een grote hoeveelheid kolommen (heb hiervan al vele voorbeelden gezien). Groet, Henk Benter.
 
Je vertelt niet heel veel anders als in je eerdere berichtjes :). Ik zou echt afstappen van het idee dat er maar één knop mag zijn; al was het maar omdat je de code zoveel lastiger maakt voor jezelf. En je zegt zelf al:
Nogmaals, ik knutsel alles in elkaar in access, maar vba blijft acadabra.
Dus waarom voor de moeilijkste oplossing gaan? Eerst rechtuit schaatsen en dan pas pootje over :D.

Hier snap ik dus helemaal niks van:
Wanneer dit formulier is gevuld met de benodigde variabelen en de gebruiker wil enkele dagen nog wat wijzigen in dit formulier dan zou het fraai zijn als hij middels dezelfde knop het ingevulde formulier zou kunnen openen.
Dat is niet de meest wetenschappelijke manier om een werkproces te beschrijven! Als ik dat lees, dan denk ik gelijk: Er wordt dus in de tussentijd totaal niks gemuteerd in die database. Want hoe moet de db anders weten welk record moet worden geopend? Je kunt alleen standaard het laatste record openen als er niks meer verandert in de tabel. Bij elke mutatie/toevoeging is een ander record het laatste record en zit de gebruiker dus ineens naar hele andere gegevens te kijken.Graag meer uitleg dus!
 
Het formulier dat wordt geopend is een "quickscan" formulier. In dit formulier geef je d.m.v. vinkjes aan of bepaalde documenten wel of niet zijn aangeleverd. Omdat het voor komt dat bepaalde documenten later worden aangeleverd, moet de gebruiker het afvinkformulier opnieuw kunnen openen. Er is hier sprake van een 1 op 1 relatie. Als het document dus bestaat, dan geen nieuwe record aanmaken, maar de reeds gekoppelde record openen.
 
Ik snap er, ook na een paar keer opnieuw lezen, nog steeds niet veel van. Ik vermoed dat je met een subformulier overigens al je problemen oplost. Doe er een voorbeeldje bij, wellicht dat het dan duidelijker wordt.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan