06. september 2005 - 12:40Der 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?
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
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.
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.
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.
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.
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.
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.
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.