08. oktober 2015 - 22:59Der er
51 kommentarer og 1 løsning
Flueben skal afgøre hvilken underformular der vises
I en relationsdatabase har jeg en formular (A) med en underformularplads (B).
Jeg har brug for følgende: Ved oprettelse af en ny post i formular A skal der på B's plads default vises en formular (B0). Til denne situation skal svare, at et afkrydsningsfelt i formular A er slået fra (= intet flueben i feltet). Ved tilvalg (= flueben i feltet) skal en anden underformular (B1) vises på B's plads.
Du kan tilknytte vba kode til hændelsen at der klikkes i fluebenet.
Private Sub flueben_AfterUpdate() If flueben Then B.SourceObject = "b1" Else B.SourceObject = "b0": End If End Sub
Hvis B0 eller B1 også udvælger de poster der skal vises efter værdien af et kontrolelement på A skal følgende også tildeles den rette værdi i subrutinen herover.
Tak. Jeg har ikke prøvet den type kode før. Med mine første forsøg får jeg indtryk af, at der ikke må indgå mellemrum i formularenes navne. Er det korrekt?
B1 viser forskellige poster, afhængigt af hvilken post der vises i A. Der er knyttet flere underposter i B1 til hver post i A. Er det det, du mener, med "Hvis B1 også udvælger de poster der skal vises efter værdien af et kontrolelement på A"?
Jeg har prøvet mig lidt frem. Men jeg får til stadighed en "Compile Error, Variabel not defined", når jeg sætter eller fjerner flueben. Når koden herefter åbnes, er det der svarer til din B (før .source) blåmarkeret. Eller i hvert fald den sidste del af det. Min B hedder 1200 VURD, men kun VURD blåmarkeres, hvilket fik mig til at tænke på at der måske ikke må være mellemrum i formularens navn. Når jeg derefter trykker OK i dialogboksen, peger en gul pil på et nu gulmarkeret område, hvor der aktuelt står Private Sub Afkrydsningsfelt71_AfterUpdate() Mit fluebensfelt hedder Afkrydsningsfelt71.
Kan du - eller andre - hjælpe mig på sporet af, hvad der galt
Maybe if you show your code we might be able to see the problem.
Something else. Í assume you will also some code in form A's on current event so that the correct form is shown when you move through existing records.
The code is here (VURD mentioned before was abrieviations): Koden er her (VURD nævnt før var forkortelser)
Private Sub Afkrydsningsfelt71_AfterUpdate() If Afkrydsningsfelt71 Then 1200 VURDERINGER.SourceObject = "1200 VURDERINGER" Else 1200 VURDERINGER.SourceObject = "1200 Ikke vurderet": End If End Sub
There is only one space between 1200 and VURDERINGER; the extra spaces are added without me being able to prevent it. Der er kun et mellemrum mellem 1200 og VURDERINGER; de ekstra mellemrum indsættes uden at jeg kan forhindre det.
Now that I write this, I realize that I probably should not have 1200 VURDERINGER both before .SourceObject and after it. But if so I don't know what to put before .SourceObject. Nu hvor jeg skriver dette, indser jeg at jeg sikkert ikke skulle have 1200 VURDERINGER både før .SourceObject og efter. Men i givet fald jeg ved ikke hvad der skal være før .SourceObject.
I understand Danish, just too lazy to write in Danish :-)
The object containing the subform normally gets the same name as the sub form used when creating it. You can change this though to EG. frmSubObject. And in my opinion I would change the names of the forms too :-)
Hov der er lige et par udfordringer mere. Fluebenet står godt nok default som fravalgt - men formularen der vises er den der kun skal vises, når fluebenet er sat: tilvalgt. OG når jeg fravælger/fjerner flueben, så vises den rigtige formular godt nok, men når jeg så lukker databasen og åbner den igen, så vises den formular, der skal vises ved tilvalgt, samtidig med at der ikke er noget flueben.
Når jeg fravælger, så vises den formular, der hører til dette valg, for ALLE poster i formular A. Valg/fravalg i formular B skal jo være specifikt gældende for hver post i formular A.
"Fluebenet står godt nok default som fravalgt - men formularen der vises er den der kun skal vises, når fluebenet er sat: tilvalgt."
Change form in design view and save.
Did you see my comment regarding OnCurrent event?
If you use the form to view records then when you change record, dont you want to see the sub form used when creating the records? IE. If check box is selected and you use "1200 VURDERINGER" then I would expect to see the same sub form when viewing records too.
But that is only going to work if check box is bound (in table)
"Når jeg fravælger, så vises den formular, der hører til dette valg, for ALLE poster i formular A. Valg/fravalg i formular B skal jo være specifikt gældende for hver post i formular A.
If I understand you correctly, this is the reason I mentioned OnCurrent event.
And it requires thát the check box is a field in the tabel so that the chosen value is saved and can be used to show correct form when viewing records.
Jeg har ikke set nogen kommentar ang. OnCurrent event. Der er ikke noget om det i denne tråd.
Lad mig være konkret ang. brug. Databasen handler om vin. Når jeg efter køb opretter en ny vin, så skal underformular B, hvor vinen vurderes efter konsumption, vise en formular, der blot indeholder teksten "Vinen er ikke vurderet" (1200 Ikke vurderet) og fluebenet skal være slået fra. Det er default nu efter at jeg skiftede formular i design og gemte, som du skrev. Når vinen er drukket og skal vurderes, skal vurderingsformularen (1200 VURDERINGER) vises, når jeg sætter flueben. Det sker også. Men flubens til- eller fravalg gælder aktuelt og fejlagtigt for samtlige vine, hvor det selvfølgelig skal afhænge af den enkelte vin, og om den er vurderet eller ikke.
Jeg har mistet orienteringen. Det ja/nej felt, du siger jeg skal have, i hvilken formular skal det være?
Jeg går ud fra at onCurrent event svarer til det danske "VedAktuel" under Hændelser. Hvad mener du med "similar code"? Skal det være samme kode eller en tilsvarende? Hvis tilsvarende, så ved jeg ikke, hvad jeg skal skrive.
The Ja/Nej field has to be in the TABLE which you have on main form. Then the check box which you already have on the main from has to be BOUND to the field in the table. So that when you check/uncheck the checkbox, the value is stored in the table.
VedAktuel = OnCurrent
Try copying the code from the checkbox afterupdate event to the VedAktuel event of the main form.
Der kommer nu nogle fejl: 1) Når jeg vil sætte flueben i tjekboxen, eller hvis jeg vil prøve atskifte post (hvilket nu ikke kan lade sig gøre): "Udtrykket FørOpdatering, du indtastede som indstilling af hændelsesegenskaben, gav en fejl: Ambigous name detected: Afkrydsningsfelt71_AfterUpdate." Og med småt derunder: * Udtrykket resulterer måske ikke i navnet på en makro, i navnet på en brugerdefineret funktion eller en [Hændelsesprocedure] * Der opstod måske en fejl under evalueringen af funktionen, hændelsen eller makroen".
when you copied the code from the Afterupdate event to the OnCurrent it is only the code BETWEEN the
Private Sub flueben_AfterUpdate()
and
End Sub
Og så forsvandt fejlmeddelelserne.
Et kort tjek tyder på, at det muligvis virker. Så lad være med at ulejlige dig yderligere, før jeg melder tilbage efter et mere detaljeret (og vågent) tjek.
Jeg mener nu at have tjekket. Og det ser ud til at virke som det skal. To ting resterer:
1) Når jeg vil oprette en ny post i overformular A, får jeg fejlmeddelelsen: "Run-time error '94': Invalid use of Null". Debug's gule pil peger på If Afkrydsningsfelt71 Then lige under Private Sub Form_Current()
2) Et magelighedsproblem: Databasen har over 3000 poster (=vine), hvor alle på nær 4-5 stykker er vurderet. Men nu står alle disse med formularen 1200 Ikke vurderet. Det kunne være rart at kunne sørge for at de kom til at stå med formularen 1200 VURDERINGER uden at jeg skal sidde og sætte flueben over 3000 gange. Og at jeg så kan fjerne flueben for de par stykker der ikke er vurderet. Kan det lade sig gøre midlertidigt at lave sådan en indstilling? Hvorefter jeg vil gå tilbage til 1200 Ikke vurderet som default ved oprettelse af nye vine? Jeg har prøvet med standardværdi Ja et par steder men uden resultat. Det er hele tiden 1200 Ikke vurderet, der vises.
1) I think this is because the default value for the new ja/nej field in the table is empty (NULL). You should be able to change it to Nej so that new records will show your "ikke vurderet" form. Or another way is to change
If Afkrydsningsfelt71 Then
to
If Me.NewRecord or Afkrydsningsfelt71 Then
2) Yes its possible. I'll get back to you shortly with solution. You have 1) to look at at the moment :-)
1) er klaret med If Me.NewRecord or Afkrydsningsfelt71 Then
men, når jeg opretter en ny post vises 1200 VURDERINGER underformularen, hvor default skulle være 1200 Ikke vurderet. Sidsnævnte er den man ser, når overformularen er i designvisning, og Ja/nej feltet i tabellen er sat til standardværdien Nej.
1) OK. Nu begynder jeg at forstå de koder lidt. Men jeg er i tvivl om, hvordan jeg efter at være kommet ind i debug-vindue skal indsætte nyt. Der er jo vandrette linjer mellem de enkelte kodesektioner. Hvordan laver jeg plads til et nyt sæt koder? For nu skal jeg jo have skilt If Me.NewRecord Or Afkrydsningsfelt71 ad.
The debug window (CTRL+G)is the window at the bottom where you should be able to see the word "Immediate" in the blue bar.
The code for the form is in the (code) window where you can see the name of the form followed be (code) in the blue bar.
So it depends what you are trying to do.
If you are trying to enter DoCmd.RunSQL "UPDATE NameOfTableGoesHere ....
then you can do that in the debug window which is the window at the bottom.
This window can be used for executing bits of code and also seeing valued in variables. So it isn't saved after you close the window. The code in the code window (the window at the top) is the code used in the form.
Jeg måtte lige starte forfra, da der gik ged i det.
Jeg er nu igen ved 1) (ikke kommet igang med 2). Det gik den rigtige vej, da jeg fulgte din anvisning i #26, altså udskiftede If Afkrydsningsfelt71 Then
med
If Me.NewRecord or Afkrydsningsfelt71 Then
Ny post kunne nu oprettes MEN med 1200 VURDERINGER som vist, og det skulle jo være 1200 Ikke vurderet.
Jeg prøvede så, at ombytte placeringen af [1200 VURDERINGER].SourceObject = "1200 VURDERINGER" og [1200 VURDERINGER].SourceObject = "1200 Ikke vurderet" Og nu blev ny post oprettet med 1200 Ikke vurderet. Men fluebenet får nu omvendt funktion, så fravalgt betyder at anmeldelse vises, og tilvalgt betyder at 1200 Ikke vurderet vises.
Jeg tænkte så, om jeg kunne adskille If Me.NewRecord or Afkrydsningsfelt71 til to betingelser (eller hvad man kalder det), så If Me.NewRecord ville give 1200 Ikke vurderet, mens If Afkrydsningsfelt71 ville give 1200 VURDERINGER.
Men jeg kunne ikke finde ud af, hvordan det skulle skrives i kodeafdelingen, eller om jeg skulle oprette koderne ved at gå ind i kodegenerator et eller andet sted fra. Ikke så let, synes jeg.
Den havde jeg ikke med i sidste forsøg. Hvis det ser sådan ud:
If Me.NewRecord Or IsNull(Afkrydsningsfelt73) Then [1200 VURDERINGER].SourceObject = "1200 Ikke vurderet" Else [1200 VURDERINGER].SourceObject = "1200 VURDERINGER": End If
så oprettes ny post som den skal med Ikke vurderet. Men alle andre poster vises med VURDERINGER og fluebenet virker slet ikke.
Det jeg skrev i #36 er rigtigt observeret, altså: Der oprettes ny post, som den skal med Ikke vurderet. Men alle andre poster vises med VURDERINGER og fluebenet virker slet ikke.
Hvis jeg fjerner IsNull, så virker fluebenet, men har den omvendte funktion: altså intet flueben > VURDERINGER, med flueben: Ikke vurderet.
Når jeg har indsat koden i Immediate vinduet forneden, hvad skal der så til for at eksekvere den? Hvis jeg blot lukker det overordnede vindue, er koden stadig i Immediate, når jeg taster Ctrl + G igen.
Yes. Så er den også klaret. Du kan da ellers noget med Access, skal jeg love for. Endnu en gang stor tak.
Havde jeg vidst, hvor meget der var i spørgsmålet, havde jeg oprettet det med 60 point. Så sig til, hvis jeg skal oprette et spørgsmål mere med det formål at give dig ekstra 30 point.
Great you got it working. I've worked as IT consultant/programmer for around 30 years but retired in January (efterløn) :-) Done lots of work in Access and other database systems.
Dont worry about the points, if they were pints that that would be another matter :-)
Synes godt om
Ny brugerNybegynder
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.