Avatar billede d9ha2 Nybegynder
28. oktober 2010 - 16:01 Der er 15 kommentarer og
1 løsning

Åbne ny formular med parametre fra formular og subformular

På min formular viser jeg personoplysninger, og i subformularen viser jeg udstyr, der tilhører den aktuelle person.

Med en knap kan jeg åbne en ny formular, hvor godkendelsescertifikat på udstyret vises som et billed.

Det virker upåklageligt indtil der er flere stykker udstyr i subformularen der er certificat på. Selvom man stiller sig på det stykke udstyr i undeformularen man gerne vil se certifikat på, åbner den ny formular med det første stykke udstyr med certifikat fra underformularen.

Jeg giver den ny formular værdien fra feltet Initialer på Hovedformularen, og det virker jo fint nok. Men spørgsmålet er så hvordan får jeg meddelt min ny formular, at den skal finde det certifikat, der hører til den aktive record i subformularen?

Jeg har forsøgt med følgende men uden held:

SELECT t_Person.Initialer, t_Person.FNavn, t_Person.ENavn, t_Cert.Filsti, t_Cert.Certnavn, t_Cert.CertNr
FROM (t_Person INNER JOIN t_Udstyr ON t_Person.Initialer=t_Udstyr.Ejer) INNER JOIN t_Cert ON t_Udstyr.Identitet=t_Cert.Udstyr
WHERE (((t_Person.Initialer)=forms!Form_VisPerson!Initialer) AND ((t_Cert.Filsti)=forms!Form_VisUdstyrUnderformular!Filsti));


Det er klausulen efter AND med Filsti fra VisUdstyrUnderformular, der går galt. Den bliver ikke fundet (pop-up med "enter parameter value")
Filsti er en skjult textbox på VisUdstyrUnderformular. Er det derfor det går galt eller er det syntaxen eller er der en anden måde at fortælle den ny formular, hvilket certifikat den skal vise?
Avatar billede neoman Novice
28. oktober 2010 - 16:25 #1
forms!den_form_som_underformularen_er_åben_på!Form_VisUdstyrUnderformular!Form!Filsti
Avatar billede d9ha2 Nybegynder
28. oktober 2010 - 22:58 #2
Hej Neoman,
Lyder fornuftigt, men er først på arbejde sidst på dagen i morgen, så jeg må vente til da med at vende tilbage.
Avatar billede d9ha2 Nybegynder
29. oktober 2010 - 08:07 #3
Desværre Neoman, den giver stdig pop-up med enter parameter value

både med og uden det sidste Form! i dit forslag.

SELECT t_Person.Initialer, t_Person.FNavn, t_Person.ENavn, t_Cert.Filsti, t_Cert.Certnavn, t_Cert.CertNr
FROM (t_Person INNER JOIN t_Udstyr ON t_Person.Initialer=t_Udstyr.Ejer) INNER JOIN t_Cert ON t_Udstyr.Identitet=t_Cert.Udstyr
WHERE (((t_Person.Initialer)=forms!Form_VisPerson!Initialer) AND ((t_Cert.Filsti)=forms!Form_VisPerson!Form_VisUdstyrUnderformular!Form!Filsti));
Avatar billede neoman Novice
29. oktober 2010 - 09:45 #4
Når du er i Query Designeren i det felt hvor Forms!Form_VisPerson .... skal stå, højreklik og klik på Build. Naviger til Open Forms, derigennem til underformularen, vælg Fields øverst på listen og her vælg så det pågældende felt med værdien. Klik Paste .. så er vi sikre på at referencen er bygget op korrekt (jeg har engelsk access, så der er tilsvarende betegnelser i den danske)
Avatar billede d9ha2 Nybegynder
29. oktober 2010 - 13:02 #5
Har Access 2003 Sp3 engelsk.

Jeg kan finde VisUdstyrUnderformular i expression-builderen, men når jeg dobbelklikker på formen vises ikke nogen fields i højre vindue.
Avatar billede neoman Novice
29. oktober 2010 - 13:51 #6
I builderen (med Form_VisPerson åben)

Forms -> Loaded Forms -> Form_VisPerson -> FOrm_VisUdstyrUnderformular

Og så i den midterste kolonne næstøverst Field List

og så dukker dine felter på underformularen op i den højre kolonne
Avatar billede d9ha2 Nybegynder
29. oktober 2010 - 14:15 #7
Ja, kommer til Form_VisPerson. Når jeg åbner den sker der ikke en s...  de to næste kolonner er blanke.
Avatar billede Slettet bruger
30. oktober 2010 - 09:49 #8
Din intension - at basere en forespørsel på aktuelle værdier i en åben formular - den burde virke!
Prøv at lave forespørgslen selvstændigt og se om den virker når du skifter person i formularen
Prøv at sætte breakpoint i certifikat formularens aktuel event og hente fra person formularens felter i vba editorens immediate vindue.

Kan iøvrigt laves på en helt anden måde - ved brug openargs og lidt kode.
Avatar billede d9ha2 Nybegynder
01. november 2010 - 10:00 #9
Hej ellebe,

jeg har en form med en underform.

På formen har jeg en knap til at vise certifikat

Vis certifikat formen bliver dannet af en forespørgsel.

Forespørgslen giver jeg personID fra hovedformen.

Det virker fint. den viser den første record fra subformen med det rigtige ID fra hovedformen.

Nu vil jeg gerne have den til at vise den record fra subformen som man stiller sig på ved at klikke på linien i subformen.
Her er det så at  (t_Cert.Filsti)=forms!Form_VisPerson!Form_VisUdstyrUnderformular!Form!Filsti) ikke virker. Det ser ud til at enten kan forespørgslen ikke se værdien Filsti på subformen eller også er der noget galt med syntaxen.

Jeg kan ikke lige greje det.
Avatar billede Slettet bruger
04. november 2010 - 07:29 #10
punktum (.) og ikke udråbstegn (!) for at referere til 'instans medlemmer' som en forms controls - altså  Form_VisPerson.Form_VisUdstyrUnderformular

Forstår ikke hvorpå person indgår i forespørsel - certificat er vel blot noget der er på noget udstyr -  anyway det er adgang til 'valgte records poster' der er fokus her:

Givet: Tabel Cert med felterne: filsti og udstyrsId. UdstursId er relateret til feltet id i den tabel der vises i Form_VisUdstyrUnderformular

En sjov, ellers ligegyldig feature, er at man kan vise værdien af et udtryk i en forespørgsel - så, hvis Personformularen er åben og fokus placeret på et stykke udstyr, så vil følgende forespørsel visse dens udstyrside:

select forms!Form_VisPerson.Form_VisUdstyrUnderformular!id+0

Dette kan bruges til at virke til at visse poster fra Cert

select * from Cert where udstyrsId=forms!Form_VisPerson.Form_VisUdstyrUnderformular!id
Avatar billede d9ha2 Nybegynder
04. november 2010 - 10:55 #11
"punktum (.) og ikke udråbstegn (!) for at referere til 'instans medlemmer' som en forms controls - altså  Form_VisPerson.Form_VisUdstyrUnderformular"

Er afprøvet - gør ingen forskel

"Forstår ikke hvorpå person indgår i forespørsel - certificat er vel blot noget der er på noget udstyr -  anyway det er adgang til 'valgte records poster' der er fokus her:"

Udstyr er som regel ejet af en person. Derfor præsenteres udstyr per person på form_VisPerson

"Givet: Tabel Cert med felterne: filsti og udstyrsId. UdstursId er relateret til feltet id i den tabel der vises i Form_VisUdstyrUnderformular"

korrekt - dog er det baseret på en forespørgsel, der henter data fra flere tabeller.

"En sjov, ellers ligegyldig feature, er at man kan vise værdien af et udtryk i en forespørgsel - så, hvis Personformularen er åben og fokus placeret på et stykke udstyr, så vil følgende forespørsel visse dens udstyrside"

Er ikke helt med på hvorfra den forespørgsel skal afvikles. Den smider bare "enter parameter value" pop-ups i hovedet på mig. og fodrer jeg dem med det korrekte ID får jeg hele t_Cert tabellen som resultat.
Avatar billede Slettet bruger
04. november 2010 - 14:09 #12
'Er ikke helt med på hvorfra den forespørgsel skal afvikles. Den
smider bare "enter parameter value" pop-ups i hovedet på mig. og fodrer jeg dem med det korrekte ID får jeg hele t_Cert tabellen som resultat.'

forespørgslen er bare for at se om der er 'hul igennem'

Hvorfor har du valgt filsti både som felt i den tabel (eller forespørgsel) der er datakilde for underformularen udstyr og tabelen t_cert ?
Avatar billede d9ha2 Nybegynder
04. november 2010 - 14:17 #13
"Hvorfor har du valgt filsti både som felt i den tabel (eller forespørgsel) der er datakilde for underformularen udstyr og tabelen t_cert ?"

For at kunne finde billedet af certifikatet må man nødvendigvis have linket i tabellen.
Jeg har feltet med på underformularen for at kunne bruge det som parameter til at åbne formularen VisCert (ved hjælp af en forespørgsel)
Avatar billede d9ha2 Nybegynder
05. november 2010 - 14:38 #14
Har fundet en anden løsning på nettet som egentlig er meget elegant.

Buger dbklik event på det første felt i undeformularen til at åbne Form_Certbilled med- istedet for knappen. Jeg giver den en variabel som jeg tildeler værdien fra feltet Filsti på underformularen

Private Sub Identitet_DblClick(Cancel As Integer)
Dim sWHERE As String
sWHERE = "[Filsti] = '" & Me.Filsti & "'"
DoCmd.OpenForm "Form_CertBilled", acNormal, , sWHERE
End Sub

virker upåklageligt.

Kan stadig ikke forstå hvorfor jag ikke kan sende værdien med som parameter fra underformularen. men vil gerne give neoman de 60 point, hvis han vil smide et svar, da det efter min bedste overbevisning burde virke med at referere til filsti med Forms!Formularnavn.Subform.Form.Feltnavn

mvh
Henrik
Avatar billede neoman Novice
05. november 2010 - 16:32 #15
Points for noget der ikke virker? Nej tak :-)

Godt du fik noget til at køre.
Avatar billede d9ha2 Nybegynder
08. november 2010 - 08:16 #16
Ok neoman, det er dit valg. Men jeg mener nu stadig at din løsning burde virke. Det er også den metode jeg har set foreslået flere andre steder på nettet. Men hvorfor den ikke virker på mine formularer kan jeg desværre ikke gennemskue.

Jeg takker dog mange gange for hjælpen - også til ellebe.

mvh
Henrik
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester