Avatar billede ramsby Nybegynder
16. januar 2002 - 13:27 Der er 8 kommentarer og
1 løsning

Fortløbende formularer & kontrol element

Jeg har problemer med at fremstille en opdateret kontrol (enten \"Label\" eller \"Tekstboks\") i en fortløbende formular. Jeg har to tabeller, som er kædet sammen via en nøgle. Den ene indeholder nøglen, navn og adresse, samt et tomt felt til indtastning af en dato. Den anden indeholder alle de tidligere dato\'er som denne person har, og nøglen. I en fortløbende form har jeg mulighed for at indtaste en ny dato, men jeg ville gerne kunne se den seneste dato umiddelbart under input-feltet. Jeg kan godt finde værdien i tabellen / forespørgslen, men hvis jeg indsætter den i formularen, i et \"unbound\" felt, bliver det den samme værdi for hvor detaljepost. - Og jeg vil gerne at det var for hver person, i en fortløbende formular (af hensyn til overblikket).
Det samme gør sig vel egentligt gældende for en rapport!
Avatar billede martin_sj Nybegynder
16. januar 2002 - 14:56 #1
Brug Underformular!

Underformularen skal være fortløbende og i hovedformularen har du så kontrollen!
Avatar billede terry Ekspert
16. januar 2002 - 15:13 #2
Use the form wizard to create your form. If you have your relationships in order then Access will also place a sub form on the main form.

How do you get the new \"date\" into the other table after you have entered it in the first table?
Avatar billede ramsby Nybegynder
16. januar 2002 - 15:25 #3
Tak for svar.
Men fortløbende formularer og underformularer virker ikke sammen. Problemet kan illustreres:
To tabeller:
1) CPR - Navn - Adresse
2) CPR - dato (flere datoer pr person)

Jeg vil så gerne lave en formular:
Cpr - Navn - dato (denne tom til indtastning)
- Seneste dato for denne person -
-----------------------------------------
Cpr - Navn - dato (denne tom til indtastning)
- Seneste dato for denne person -
-----------------------------------------
osv.
Jeg har ikke brug for andet end den seneste dato for hver person, til gengæld vil jeg gerne at jeg har flere poster på skærmen.

Det virker naturligvis hvis jeg kan binde kontrolelementet til data, men så skal jeg opstille en forespørgsel som indeholder forskellige elementer fra samme kolonne i det samme recordset.
Avatar billede terry Ekspert
16. januar 2002 - 15:39 #4
In the main forms after update event you can use the folowing to add the new date to your [CPR - dato] table. Not a good idea to use that type of naming convention tblCprNavn tblCprDato better. Yours will give problems at some time or other!

DoCmd.RunSQL \"INSERT INTO [CPR - dato] (CPR, dato) Values ( \'\" & me.CPR & \"\', \'\" & Me.Dato & \"\')\"

I am assuming that CPR is text field.

Then once its entered you need to refesh the form to show the new date:

Me.NameOfSubForm.Form.Refresh
Avatar billede martin_sj Nybegynder
16. januar 2002 - 15:56 #5
Nej det er rigtig du kan ikke have en fortløbende formular med fortløbende underformular, men en enkelt formular med fortløbende underformular kan lade sig gøre!

Rigtigt hvad terry siger ang. Navn og dato dette er beskyttede navne og vil blive opfattet forkert!

Hvad med en Dlookup() ?
Avatar billede ramsby Nybegynder
16. januar 2002 - 15:56 #6
Jeg beklager min navngivning fra før. Jeg håbede at det var nemmere at gennemskue, da jeg er klar over at de aktuelle navne ikke er gode. Tabellerne hedder \"Main\" for den med CPR og flere datoer, og \"Personer\" for CPR, Navn og adresse.
Databasen bruges til udskrivning af indkaldelser. (på samme måde som mange indkaldes til eksempelvis tandlægen). Udgangspunktet er derfor at der oprettes en ny post i tabellen \"Main\", hver gang en person skal have en indkaldelse i fremtiden. Denne oprettes med d.d. som \"Dato for sidste behandling\", og \"Dato\" feltet er derfor tomt. Jeg har så lavet en forespørgsel, som filtrerer alle poster med d.d. indenfor et givet interval og \"Dato\" = \"\".
Den første formular bruger denne forespørgsel til at vise posterne. Og ved en simpel opdatering forsvinder de poster hvor jeg allerede har tastet
data ind i \"Dato\", da de ikke længere kan honorere forespørgslen.
Så mit problem er ikke at opdatere tabellen, mere hvordan jeg henter det seneste recordset hvor \"Dato\" <> \"\", og sætter det ind i en kontrol, samtidigt med at jeg har den tomme \"Dato\" stående lige over - i en fortløbende formular
Avatar billede martin_sj Nybegynder
16. januar 2002 - 16:16 #7
Jeg mener du kan bruge en Dlookup(), den kan slå op i en tabel Main og finde [dato] med et kriterie.

Terry har garanteret Syntax\'en!!! :-)
Avatar billede ramsby Nybegynder
16. januar 2002 - 16:30 #8
Jeg har brugt \"FindFirst\", efterfulgt af:
(Dette naturligvis i et recordset)
var = .FindFirst(\"Dato\") \'var defineret som \"date\"
do
if .FindNext(\"Dato\")>var then var = .FindNext(\"Dato\")
if .NoMatch = True then exit do
loop until .NoMatch = True

Så har jeg den seneste dato i \"var\", og kan sætte den ind i formularen. Det virker fint. Men ikke i en fortløbende formular. Det \"unbound\" tekst felt jeg har stående på min formular opdateres med den sidste værdi, og gentages så på alle poster med den samme værdi. (Koden herover er ikke pakket ind i do-loop løkken som gennemgår alle posterne).
Hvis jeg laver et Debug.Print af værdierne i \"var\", får jeg alle de rigtige, men formularen opdaterer automatisk til den sidste af dem alle, og sætte den samme ind i samtlige kopier af kontrollen.
Avatar billede terry Ekspert
16. januar 2002 - 18:45 #9
=Dlookup([TheField], [TheTable], \"Dato = \" & Cdate(Me.SomeDateField) )
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