Avatar billede knudj Nybegynder
27. december 2005 - 16:21 Der er 22 kommentarer og
1 løsning

Checke værdi af Felt der befinder sig i SubForm fra MainForm

HEj..

Jeg har en hovedformular med en Underformular. Ved oprettelse af ny post i hovedformularen, har jeg brug for at der checkes om der er oprettet poster i underformularen, og hvis ikke der er det, så skal dette gøres (der skal kun oprettes én)

Hovedform : frmTransport
SubForm : frmTransportBiler
Felt i SubForm der skal indsættes værdi i hvis ingen poster er oprettet i SubForm:  [T-BilID]

Det der skal ske er altså, at hvis der ikke er oprettet én ny post i underformularen når man har lavet en ny post i hovedformularen, så skal værdien af [T-BilID] = "0"
Avatar billede terry Ekspert
27. december 2005 - 17:00 #1
Knud> Normally a main form/sub form setup means that records on the sub form are related to a record on the main form, and therefore shouldnt exist until the main form record exists. How are you going to create the foreign key in a sub form record if the main form record doesnt exist?

Isnt there a problem with the design of the dB?
Avatar billede terry Ekspert
27. december 2005 - 17:03 #2
The primary key in the main form is used for the foreign key in the sub form records. This is what makes the relationship. So if you dont have a main form record how do you know which sub form records are related?
Avatar billede knudj Nybegynder
27. december 2005 - 17:59 #3
Hej Terry.. Det har jeg allerede set er et problem. Jeg har derfor et ønske om, at den checker dette under EfterOpdatering hændelsen.

DEtte ville jo sagtens kunne gå, da primær nøglen i hovedformularen er blevet tildelt så snart man indtaster noget.
Avatar billede terry Ekspert
27. december 2005 - 18:55 #4
Normally the sub form is linked to the main form through primary key (record on main form) and foreign key (records(S) on sub form. (Link child fields/Link Master fields)

If you dont have a primary key (main form) then how do you find the records which you want to have a relationship to the record you are creating?
Avatar billede knudj Nybegynder
27. december 2005 - 19:24 #5
Jeg har skam også det hele sat op på den måde du skriver.
og de er relateret helt ligesom du snakker om.

Det jeg nu bare ønsker, er at når en bruger af formularen begynder at indtaste en ny post i hovedformularen, så udfylder han nogle felter i hovedformularen som er obligatoriske. Når han så vil videre til en anden post, eller ud af formularen, så er det et MUST at der er der er minimum én post oprettet nede i underformularen. For at brugeren ikke selv skal til at gøre dette hver eneste gang, så ønsker jeg at dette sker helt automatisk, men der skal KUN oprettes en ny post i underformularen HVIS der ikke allerede er oprettet én.
Avatar billede terry Ekspert
27. december 2005 - 20:15 #6
Ah now I understand :o)

In the forms BEFORE INSERT event

1: Use Dcount to cound how many records exist in the table which is used for the sub form.
2: If 0 then use DoCmd.RunSQL "INSERT INTO...... " to insert a record into the table.
3: Requery the sub form to show the record.
Avatar billede knudj Nybegynder
27. december 2005 - 20:35 #7
Okay, men hvis jeg bruger DCount på tabellen, så vil den jo aldrig give mig værdien 0, det skal vel være noget med at den bruger DCount på de poster som har Fremmed nøgle i underformularen som passer med Primær nøglen i Hovedformularen.

En anden ting, er det med DoCmd.RunSQL osv... hvordan laver jeg den helt præcist så den indsætter følgende Data:

Tabellen den skal indsætte Data i hedder tblTransportBiler (altså tabellen til underformularen), Det felt der forbinder underformularen med hovedformularen hedder [tblTransportBiler].[T-TurID] i underformularen, og hedder [tblTransport].[TurID] i hovedformularen.

Den skal derfor indsætte en post i tblTransportBiler hvor [tblTransportBiler].[T-TurID] = [tblTransport].[T-TurID], og hvor [T-BilID] = "0"


hvordan får jeg det sat sammen til et stykke SQL kode ?
Avatar billede terry Ekspert
27. december 2005 - 20:37 #8
You can include a critera with Dcount.

Dcount("*", "YourTable" "[T-BilID] = " & Me.[T-BilID])
Avatar billede terry Ekspert
27. december 2005 - 20:44 #9
If the tables are related on [T-TurID] then use
Dcount("*", "YourTable" "[T-TurID] = " & Me.[T-TurID])
Avatar billede terry Ekspert
27. december 2005 - 20:47 #10
Then use something like this

DoCmd.RunSQL "INSERT INTO tblTransportBiler (T-TurID, T-BilID) VALUES (" Me.[T-TurID] & ", '0'")

this assumes that T-BilID is a text value

Now I'm off for the evening
Avatar billede knudj Nybegynder
27. december 2005 - 20:50 #11
Det sidste jeg vil jeg lige prøve af.

Mange tak for din hjælp idag :) Har vist slidt lidt hårdt på dig..

Fortsat god aften..
Avatar billede fynbohans Nybegynder
27. december 2005 - 21:20 #12
Er der noget bestemt formål med at vide om der er nogen poster i underformularen?
Der vil i alle tilfælde være en blank linje med felterne.
Hvis du gerne vil have værdien "0" i felt, når der dannes en ny post, kan
du sætte standardværdien i tabellen til 0.
Så snart du begynder at skrive i et felt i den blanke linje kommer værdien "0" frem og
der dannes en ny blank linje(til den potentielle næste post).
Avatar billede knudj Nybegynder
28. december 2005 - 14:44 #13
Hej Fynbohans..
Det var også min første ide, men dette opretter ikke en ny post! og det er nødvendigt for mig at der bliver sat en post på.

Det er lidt svært at forklare præcis hvorfor jeg har brug for det, men i store træk går min dB ud på at jeg har en indtastningsformular, og en dipsonerings formular. og det er i indtastningen at der er en underformular. Det som jeg indtaster er nemlig en masse transporter, hvorpå der skal kunne hægtes mere end én Bil på. Det jeg så ønsker at få at se i min disponerings formular, er i store træk alle transporterne som ikke er afsluttet, og det jeg skal se, er så den sidst påhægtede bil på en transport. Håber det er til at forstå bare en lille smule.
Avatar billede fynbohans Nybegynder
28. december 2005 - 15:32 #14
Prøv med en variabel af typen Long, f.eks.
Dim SidsteID as Long.
Ved åbning af formularen sætter du SidsteID = højeste ID.
Lav en forespørgsel indeholdende ID og vælg Totaler/Sidste.
Hver gang du går til en ny post undersøger du om SidsteID er forskellig fra det
nye ID, sætter den ønskede ind  feltet i underformularen og sætter SidsteID = aktuelle ID.
Avatar billede terry Ekspert
28. december 2005 - 15:34 #15
Knud, have you tried the suggestions I have given?
Avatar billede knudj Nybegynder
28. december 2005 - 16:55 #16
Fynbohans>
Ja, men hvis der ikke er oprettet nogen post i underformularen, så er der endnu ikke noget som har fået et ID, og så kan jeg ikke rigtig bruge den til noget.

Terry> Tja, jeg bøvler lidt med det der docmd.runSQL. indtil videre ser du ud somfølgende:

DoCmd.RunSQL "INSERT INTO tblTransportBiler ([T-TurID], [T-BilID]) VALUES (Me.TurID, '0')"


det der sker når jeg kommer til dette stykke kode, så i stedet for at den selv henter værdien af Me.TurID, så vil den have at man manuelt skal indtaste den i en inputbox som kommer frem på skærmen. hvad skal jeg skrive for at den selv indhenter værdien af Me.TurID fra formularen. har på fornemmelsen at det er noget med min brug af "".
Avatar billede terry Ekspert
28. december 2005 - 16:59 #17
DoCmd.RunSQL "INSERT INTO tblTransportBiler ([T-TurID], [T-BilID]) VALUES ( " & Me.TurID & ", '0')"


which is as far as I can see the same as I gave earlier
Avatar billede knudj Nybegynder
28. december 2005 - 17:07 #18
ja, næsten... har lige set fejlen. men mange tak for hjælpen.

du skal bare lige lægge et svar, så kan jeg vist roligt lukke dette spørgsmål.
Avatar billede terry Ekspert
28. december 2005 - 17:36 #19
doesnt this work?
Avatar billede knudj Nybegynder
28. december 2005 - 17:59 #20
terry> jo, det virker helt perfekt nu. så hvis du bare lægger et svar, så lukker jeg spørgsmålet.

mvh
knud
Avatar billede terry Ekspert
28. december 2005 - 18:04 #21
super :o)
Avatar billede terry Ekspert
10. januar 2006 - 21:56 #22
og godt nytår :o)
Avatar billede terry Ekspert
19. januar 2006 - 19:45 #23
.
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