Avatar billede avalon116 Nybegynder
06. september 2005 - 12:40 Der er 9 kommentarer og
2 løsninger

En underformular

Hej.
Jeg skal lave en base med en tabel med ordrer, tOrdrer. Der skal være en formular med mulighed for at taste ordrer ind. Til hver ordre kan der være et eller flere produkter (tProdukter). Jeg vil gerne have, at man både kan vælge de produkter, der allerede er i tabellen men også at man kan tilføje nye produkter, imens man indtaster ordrer (således at hvis man skriver produkter, der ikke findes, så bliver de automatisk tilføjet).

Jeg regner med at skulle bruge en underformular, men hvordan får jeg den til at gøre som beskrevet?
Avatar billede jensen363 Forsker
06. september 2005 - 13:10 #1
Du kan vælge at opdatere din produkttabel fra din bestillingstabel, eventuelt ved afslutning af bestilling.
Avatar billede mugs Novice
06. september 2005 - 13:37 #2
Jeg foresdlår at du bruger en combo til at vælge ordrerne i. Dette minimerer stavefejl og samtidig kan du sætte egenskaben på comboen "Begræns Til Liste" til Ja. Derved kan du ikke oprette produkter der ikke er i tabellen.

For alligevel at kunne oprette nye ordrer kan du brugen hændelsen NotInList i comboen. Denne giver dig mulighed, efter at være promptet, at oprette det indtastede i ordretabellen. Benyt dene kode:

Private Sub felt1_NotInList(NewData As String, Response As Integer)
Dim prompt As String
DoCmd.SetWarnings False
Response = acDataErrContinue
prompt = "Denne type findes ikke i listen, ønsker du at oprette den?"
If MsgBox(prompt, vbYesNo, "Typen findes ikke!") = vbYes Then
DoCmd.RunSQL "INSERT into Register (feltnavn) VALUES ('" & NewData & "')"
Response = acDataErrAdded
End If
DoCmd.SetWarnings True

Hvor Register er tabellen og feltnavn er det felt der indeholder produkterne.
Avatar billede terry Ekspert
06. september 2005 - 14:08 #3
If you only have one table for your orders (tOrdrer) then you have a problem. You need another table (tblOrderDetail) for storing the product details in the order.

This table has a foreign key which referenences the primary key in the order table. It also has a foreign key which references  to product table.


You need to make sure your table design is correct BEFORE you make your forms. Once you have done this then the rest is much easier.

If you then use the form wizard it should actually make the main form with a sub form for entering the information concerning products purchased. The field for choosing products will be a combo IF you have a relationship to the products table. Then you can use the NOT IN LIST event to add new products. You may need a form for this as I can imagine you will have more than two fields in the table.
Avatar billede avalon116 Nybegynder
06. september 2005 - 14:42 #4
terry>> "foreign key" er det den hvor:

"medtag alle poster fra "tblOrderDetail" og kun de poster fra "tOrdre" hvor de joinforbundne felter er ens" ?
Avatar billede terry Ekspert
06. september 2005 - 15:40 #5
Not quite sure I understand your last comment.


When you design tblOrderDetail an dyou add a new field, you can choose "Lookup Wizard" from the Data Type list. (Last one in list)

Now if you follow the instructions you can choose which table/field to use as the foreign key (relationship). The wizrad also creates the relationship for you. If you go into the Relationships window and add the tables, you will see that the relationship exists.

Access needs these relationships when it creates a form/subform.
Avatar billede terry Ekspert
06. september 2005 - 19:43 #6
You can also create an Order database from the database templates.
Under "Create a new database from Templates" choose General Templates, then press the Databases Tab and choose the Order Entry database. Now follow the wizard.

If you can not find this database template then you might need to install it from the Office/Access CD.
Avatar billede terry Ekspert
06. september 2005 - 19:46 #7
Using this Template will also make the forms/code for adding new products.
Avatar billede claesdamlund Nybegynder
06. september 2005 - 23:13 #8
Behovet for en "tblOrderDetail" bunder i at der er en mange-til-mange relation imellem ordrer og produkter, hvorfor du skal have "tblOrderDetail" som indskudt tabel. Denne tabel skal, som Terry skriver, minimum indeholde to fremmednøglefelter - et til dit ordrenummer og et til dit produktnummer. Derudover bør den sandsynligvis også indeholde et Antal-felt og et Pris-felt, hvor du kan angive antal og pris for et specifikt produkt på en specifik ordre.

"Medtag alle poster fra ..." har principielt intet med fremmednøgler at gøre, men definerer blot at relationen skal opfattes som det der svarer til en SQL Inner Join. Fremmednøgler laves indirekte i Relationsvinduet ved at afkrydse "Gennemtving Referentiel Integritet" på en given relation.
Avatar billede mugs Novice
07. september 2005 - 08:18 #9
Der skal helt sikkert være flere felter i TBLorder som f.eks pris som claesdamlund er inde på. Desuden felter som antal, fragtomkostninger, momssats og andre variable felter til beregning af den samlede pris for en vare. Disse data er du nødt til at sende over i en fast tabel, hvis du vil have historik på dine data.

Hvis f.eks en vare idag koster Kr 100,00 og du sender en faktura på beløbet til betaling om f.eks 30 dage, og du i mellemtiden regulerer prisen til f.eks Kr 125,00 vil denne nye pris gælde for samtlige fakturaer der er oprettet, også de gamle fakturaer.
Avatar billede avalon116 Nybegynder
07. september 2005 - 08:35 #10
Tak skai I have allesammen, det fungerer nu. Jeg vælger at dele pionts mellem jer.
Avatar billede mugs Novice
07. september 2005 - 10:05 #11
Tak for point :o)
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