29. januar 2003 - 11:17Der er
14 kommentarer og 1 løsning
Udskiftning af subform
Jeg har en form, hvori der er en subform, der skifter data- og indholdskilde, alt afhængigt af hvilken knap der aktiveres på min form. Me.SubformChange.SourceObject = "Ny form"
En bestemt subform (fortløbende) kan indeholde brugernavne og en knap "Se mere info" ud for hver bruger. Når man trykker på knappen skal subformen skiftes ud med en subform indeholdende den valgte brugers oplysninger.
Jeg får en Type Mismatch fejl (vinduet åbnes, men brugerens oplysninger findes ikke) --------- Private Sub more_Click() On Error GoTo Err_more_Click
Dim stDocName As String Dim stLinkCriteria As String
stDocName = "Brugeroplysninger"
stLinkCriteria = "[BrugerNo]=" & Me![BrugerNo] Me.SubformChange.SourceObject = stDocName DoCmd.GoToRecord stDocName, , , stLinkCriteria 'Nedenstående virker, men åbner i et nyt vindue :o/ 'DoCmd.OpenForm stDocName, , , stLinkCriteria
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
Nej, de er desværre ikke Linked. Hvis jeg forsøger, får jeg en fejl: "Can't link unbound fields".
Kan det skyldes at jeg rent faktisk har subforms i 2 niveauer? På forsiden er der en stor subform, der skifter indhold (SubformChange). Heri åbner en form indeholdende en anden subform!! Jeg ved at det lyder lidt rodet, men det virker faktisk ret godt! (bortset fra når jeg skal lukke en subform og åbne en anden, visende specifik data!)
Kan det SLET ikke lade sig gøre på baggrund af ovenstående kode?
Hmmm... Formen åbner uden problemer, men der vises ikke noget data. Jeg fandt 1 fejl; stDocName er navnet på den tabel der skal ledes i, mens ...SourceObject = "Brugeroplysninger" - altså den form, der skal åbnes.
BrugerNo er et autonummereringsfelt. Men Me.[BrugerNo] er jo det brugernummer der hænger sammen med brugernavnet i den nuværende form, ik? Mens "[BrugerNo]=" refererer til den tabel hvor sammenligningen skal foretages, ik? Hvor ved den fra hvilken tabel det er?
Du kan forøvrigt ikke bruge docmd.Gotorecord på denne måde. Den bruges kun til at gå til næste, forrige, første, sidste, ny post eller et vist antal poster frem eller tilbage.
I stedet kan du bruge docmd.FindRecord. Men den kræver at du står i det felt, som du vil søge i. f.eks. sådan: docmd.Gotocontrol "SubformChange" docmdgotocontrol "BrugerNo" docmd.Findrecord Me!BrugerNo
Jeg befinder mig i en subform ("brugerliste"), indeholdende et skjult felt "BrugerNo", et synligt felt "BrugerNavn" og en knap "Mere info". Ved tryk på "Mere info" skal subformen "brugerliste" skiftes ud med en anden subform "brugeroplysninger" og her skal BrugerNo'et fra "brugerliste" findes i den nyåbnede form "brugeroplysninger". Navnet på den subform der indeholder de skiftende subforms er "SubformChange". Forvirret?
Når jeg udskifter "SubformChange" med "brugeroplysninger", får jeg beskeden: "The control brugeroplysninger cant be found".
Jeg må indrømme at min kode ikke er superoverskuelig længere :o/ Hvis jeg lagrer brugernavnet i et tekstfelt på 'øverste' form, håber jeg at jeg kan bruge følgende kode: --- Private Sub Form_Open(Cancel As Integer) Dim rs As Object 'Find a match
Men jeg får fejl i sidste linie "....Bookmark...", med beskeden "Error 3021.. No current record". Jeg bruger selvsamme kode i et lignende tilfælde uden problemer...
Skrot underformularen og gør den til en almindelig formular. Du bruger feltet med bruger som betingelse i den anden formular med: Forms![Hovedformularens navn]![Feltnavn for bruger], idet jeg går ud fra brugernavn er med i alle de brugte tabeller.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.