RedordId voor alle forms vastleggen

Status
Niet open voor verdere reacties.

Sytse1

Gebruiker
Lid geworden
9 aug 2007
Berichten
584
Office versie
miDer
Bij het wisselen van de Forms wil ik hetzelfde record tonen.
Bij het wijzigen van het record wordt het id opgeslagen in de tabel tblSys.
Bij het openen van een ander form wordt dan het opgeslagen record getoond.
Ergens zit in een fout in mij vba code want het werkt niet goed.
Bijgaande de code.
Wellicht ziet iemand de fout.
b.v.d. Sytse
Code:
Option Compare Database
Public VarIdMw As Integer
Public Function IdVastleggen()
On Error Resume Next
'Zoek het Id van de medewerker en zet deze in de Var VarIdMw
'Zet het Id van de medewerker in de tblsys
'Deze tabel het de velden Variable(Korte tekst),IdMwNr(Korte tekst) en Omschrijving Korte tekst)
Dim frmCurrentForm As Form
Set frmCurrentForm = Screen.ActiveForm
DoCmd.GoToControl "IdMw"                'het veld met het opgeslagen IdMw
VarIdMw = frmCurrentForm!IdMw           'het Id naar de Var
Dim rs As DAO.Recordset
 If Not IsNull(VarIdMw) Then
  Set rs = CurrentDb().OpenRecordset("tblSys", dbOpenDynaset)
   With rs
'LaatsteMedewId is opgeslagen in het veld Variable van de tabel tblSys
    .FindFirst "[Variable] = 'LaatsteMedewId'"
      If .NoMatch Then
       .AddNew                           'Zet het nieuwe nummer in de tabel tblsys
         ![Variable] = "LaatsteMedewId"
          ![IdMwNr] = VarIdMw
           ![Omschrijving] = "Lastste ID, van form " & "frmCurrentForm"
       .Update
            Else
       .Edit          'bewaar id van het huidige record
          ![IdMwNr] = VarIdMw
       .Update
         End If
        End With
       rs.Close
      End If
     Set rs = Nothing
End Function
Public Function IdMwVinden()
On Error Resume Next
'Vindt de laatste medewerker id in detabel tblSys
Dim frmCurrentForm As Form
Set frmCurrentForm = Screen.ActiveForm
 Dim VarId As Variant
  Dim strDelim As String
   VarId = DLookup("IdMwNr", "tblSys", "[Variable] = 'LaatsteMedewId'")
    If IsNumeric(VarId) Then
        With frmCurrentForm.RecordsetClone
'in het huidige form is het veld IdMw vindt het record
            .FindFirst "[IdMw] = " & strDelim & VarId & strDelim
            If Not .NoMatch Then
             frmCurrentForm.Bookmark = .Bookmark
            End If
        End With
    End If
End Function
 
Laatst bewerkt:
Ik heb in hoofdstuk 20 van de Access cursus een oplossing gemaakt voor (vermoed ik) exact jouw vraag. Die is niet helemaal perfect, ik zou hem nu een stuk handiger maken, maar hij werkt wel. Ik snap je werkwijze overigens niet, en ook niet waarom je dit zou willen doen. Meestal, als je een formulier opent op basis van een ander formulier, dan wil je het record van dat eerste formulier gebruiken als filter voor het tweede. En niet een willekeurig eerder (maar toevallig het laatste) formulier van dat andere formulier. Ik kan geen zinnige toepassing bedenken.
 
Mijn bewoordingen zijn misschien anders maar ik wil inderdaad in elk te open formulier hetzelfde record tonen als waarmee een ander formulier wordt afgesloten. Vandaar dat ik bij sluiten het actuele record id opsla. Bij het openen van het formulier moet middels het gevonden record id dit weer getoond worden maar niet als filter. In het andere formulier moet de gebruikerq over alle records kunnen beschikken. Ik zal je oplossing in je cursus gaan bekijken. Maar ik begrijp dat je mijn code niet op een fout heb kunnen betrappen?
 
Laatst bewerkt:
Maar ik begrijp dat je mijn code niet op een fout heb kunnen betrappen?
Dat heb ik niet gezegd :). Ik moet eerlijk zeggen dat ik er weinig van snap. Misschien moet je je bedoeling nog wat beter uitleggen, want helemaal snappen doe ik die niet.
ik wil inderdaad in elk te open formulier hetzelfde record tonen als waarmee een ander formulier wordt afgesloten
Dat lijkt mij een onmogelijke zaak, tenzij je dezelfde recordset opent. En dat zal toch niet? Een voorbeeldje als: "ik heb een klant geopend op formulier A, en wil de orders zien van deze klant op formulier B" zegt mij veel meer.
 
Hetgeen je in je 2e alinea stelt is mijn bedoeling. Maar dan moet je ook de mogelijkheid hebben om in hetzelfde form een andere klant te kiezen. Als je alleen de orders van de geselecteerde klant in een ander form toont filter je. Om dan de orders van een andere klant te zien moet je terug naar het vorig formulier. Een nieuwe klant kiezen en dan kan je pas diens order zien.
En dat wil ik dus niet.:( Wel dat direct de klant wordt getoond maar dan moet ook de mogelijk er zijn om evt naar de orders van een andere klant te gaan. De andere klant wordt dan via een uitrol venster opgezocht. Ben ik zo duidelijk?:rolleyes: Vandaar dat ik het id van de klant opsla en vervolgens in een ander form weer wil tonen. Er zijn natuurlijk verschillende manieren om een record in een tabel te vinden. Het opgeslagen id wordt ook weer gebruikt bij de start van het programma. Bij openen wordt dan de klant getoond waarmee de applicatie is afgesloten. (de tabel waar ik het id in opsla gebruik ik ook om de naam van het bedrijf in elke form te tonen.)

Het was even zoeken maar ik heb je cursus en hfdstuk 20 gelezen. Er zijn veel overeenkomsten met mijn vba in dit onderwerp. Ik denk dat ik het vwb de vba het een stuk eenvoudiger heb gemaakt. Maar ik hoor je al zeggen “maar het werkt niet”. Helemaal juist. Het opslaan van het id gaat goed. In het opvragen zit ergens een foutje. Vandaar mijn vraag. Ik zal wel ergens overheen kijken.
 
Laatst bewerkt:
Hetgeen je in je 2e alinea stelt is mijn bedoeling. Maar dan moet je ook de mogelijkheid hebben om in hetzelfde form een andere klant te kiezen.
Lijkt mij niet zo moeilijk; een filter meegeven met een tweede formulier kan op een heel wat makkelijkere manier dan je nu doet. Maar dat zal je vast wel weten. Om dat tweede formulier dan vervolgens voor een andere klant te gebruiken, is net zo makkelijk: zet een keuzelijst in de koptekst van dat formulier waarin je een klant kan kiezen. Is sowieso handig, want dan kun je in dat formulier altijd op een klant filteren, dan heb je niet eerst een klantformulier nodig.
 
Maar bij de start wordt dan niet het laatste bewerkte record getoond.
Nu nog niet relevant maar in het netwerk wordt ook de user in de tblsys vastgelegd.
info.jpg
Zodat de user direct zijn werk kan hervatten.
De tblsys zit dan ook in het frontend.
Ook hier ga je in hoofdstuk 20 op in.
Als het met mijn vba niet gaat lukken wil ik je voorbeeld overgaan nemen.
 
Ik laat mijn gebruikers altijd inloggen in een database, op basis van hun User naam in Windows. Die ligt dus vast in de tabel Medewerkers. Bij starten van de database kun je dan gelijk alle rechten goedzetten, de formulieren inrichten etc. En ze zien gelijk hun eigen werkvoorraad. Ik ben nog nooit tegengekomen in mijn werkcarrière, en die duurt toch echt al veel te lang, dat een gebruiker altijd bij het starten van welk formulier dan ook altijd met het laatste record verder moet. Sterker nog: mij is die vraag nog nooit gesteld... Iemand die al een keer verder wil met de laatste klant, of wat dan ook, heeft dat record in no time opgezocht. De kans dat een gebruiker met een nieuwe cliënt/opdracht aan de slag gaat, is vele malen groter.
Ik heb hoofdstuk 20 gemaakt omdat ik het wel geinig vond om te laten zien dat je ook in Access iets als bladwijzers kon hebben; nooit in mijn stoutste dromen kunnen denken dat iemand dat nog eens nodig zou hebben :D.
 
:thumb:Zeg nooit “nooit”.&
Bedankt voor de discussie.
Ik sluit het onderwerp af.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan