13. juli 2004 - 10:50Der er
23 kommentarer og 1 løsning
en "mor" tabel til flere andre
Så er den gal igen :-) Jeg har et behov for at have to tabeller med de samme informationer, men er det ikke muligt at lave en form for "mor" database så man kun behøver at opdatere et sted. Kunne forestille mig det var noget med nogle relationer eller noget, men kan ikke helt lure det når der skal overføres mange rækker tabellerne imellem.
Jeg er ved at lave en form, hvor det skal være muligt at udfylde to felter (komboer) med værdier fra den samme tabel. Til de to felter er knytter underfelter der udfyldes automatisk på baggrund af det valgte i komboen. Jeg mener således at jeg er nødt til at have to tabeller med indholdet, da det ellers ikke er muligt at henvise til to forskellige input i samme tabel. Det jeg så troede der var muligt var, at man kunne have en form for "mor" tabel hvor data styres og opdateres, og så de to tabeller der giver input til komboerne blot er en kopi af "mor" tabellen.
Well without quite understanding exactly what your trying to do, I think I can safely say that it should NOT be necessary to have two tables containinn the exact same data. If it is necessary then its the first time I've seen this in my time as a programmer :o)
So what we need to know is what exactly it is you are trying to do! It may be an idea to show your tables/fields and relationships.
Normally you use a combo for selecting data from a related table to the one the form is based on. If its necessary to have two foreign keys which come from the same table then that should be no problem.
But maybe a bit more information on your requirement might help!
Du hjalp med at få lavet en database hvor man i komboboksen havde flere rækker, således at jeg kunne udfylder flere felter (automatisk) i min form med blot en kombo. Dette bruger jeg stadig, men nu skal jeg bruge den samme kombo to eller 3 gange, idet brugeren af formen skal kunne vælge 2 eller 3 forskellige linier fra komboen og samtidig automatisk udfylde en række felter. Altså således at man f.eks. fra 1 tabel kan vælge forskellige biler man godt kunne tænke sig. Brugeren har mulighed for at angive op til 3 biler = 3 komboer. Eksempelvis har brugeren valgt: Porche 911, Bugatti EB 110, Ferrari F40. I felter tilhørende hver kombo udfyldes automatisk med teknisk data fra der tre valgte bilmodeller. Alle data skal ende i en hovedtabel, hvorfra der laves en forespørgelse, der anvendes til at generere en rapport (i word).
Jeg har prøvet at lave tre feltnavne i min hovedtabel der kalder tilbage til tabellen med alle bildata, men det går galt, når data skal hives over i forespørgelsen. Jeg anvender det eksempel du lavede til mig, og der bliver forespørgelsen fyldt ud med data fra den oprindelige tabel (bildata) og feltnavnet fra hovedtabellen, men det vil access ikke være med til, da der jo så kommer 3xhenvisning til tabellen med bildata og det kan den "automatiske" udfyldning ikke styre...... det var en lang smørre, men håber du kan gennemskue det lidt, det er ihvertfald bygget op omkring det eksempel du lavede til mig i sidste weekend .... og endnu engang mange tak for det :-)
Yes I can remember making something for you, but its not always easy to remmber exactly what, I must be getting old :o)
But if I remember correctly, the data from the combo was used for filling out fields in ONE record, but here it sounds like you want to fill out fields for more than one!
If this is correct then it sounds to me as though you need to alter your database design so that the person (bruger) is in one table and then the information concerning the cars (biler) he/she chooses in another.
This would require you making a sub form which contains car information and the main form contains the person information. This would allow a person to choose as many cars as they like.
Fik tidlig fri igår, så jeg har først lige set dit svar nu, håber du stadig har energi til at hjælpe :-)
Jeg synes ikke helt det giver mening... databasen er desværre blevet så stor at jeg ikke kan sende den mere, så jeg prøver lige et eksempel mere, idet jeg måske har forklaret det lidt skidt sidste gang.
Men hvordan får jeg udfyldt disse felter automatisk? Felterne henviser jo tilbage til den samme tabel (DataTabel) når jeg foretager mit valg i combo#1 og combo#2, hvorfor felterne overskrives med værdierne fra den sidst valgte combo. Samtidig er der noget rod med at få data tilbage til forespørgelsen og HovedTabellen. Jeg troede derfor jeg kunne løse problemmet ved at have 2 forskellige tabeller (datatabeller) som comboerne og felterne henviste til, der så igen tog udgangspunkt i "mor"tabel hvor data blev opdateret (som forklaret før).
Well jeg håber at jeg har gjort mit problem lidt tydeligere :-)
Et lille bispørgsmål: Kan man ikke lave en combo med data der er gemt som notat?
I think I understand your problem but its difficult explaining why I think it is necessary to alter your database.
At the moment the table (HovedTabel) only has room for ONE car for each record. If you know for sure that a maximum of (EXAMPLE) 5 cars can be selected. Then you could have five ID's in HovedTabel. Then you would need to alter the form, and the query to select the correct information. THis in my opinion is NOT the correct way to do it!
If I iunderstand the problem correctly, you wnat to be able to choose one or more cars for each "person". I say person becuase I am not sure if it is a person who makes this selection. Anyway, and example may help.
The new table looks like this. tblPerson PersonID AutoNumber PersonName Text
Now you alter HovedTable BilID Long int (this is a reference to datatabel) PersonID Long int (this is a reference to tblPerson)
Now you need to make a form where you create persons. This form contains a sub form which you use for selecting cars for each person. The sub form is linked to the main form so that when you select cars the PersonID field automatically gets its value from the main from.
But I think that the main problem is that normally it is necessary to define the program requiremnets (Requirement specification) and then design the database BEFORE you make your forms. Its important that you know EXACTLY what you want your program to do BEFORE you start making it. Otherwise you may end up with something that needs changing all the time.
øhh, jeg ved ikke lige hvor vi har fået hele den del med personen ind i billedet, for det er ikke meningen at det skal være muligt at vælge en person eller andet i den retning. Da jeg brugte ordet person, var det ment som de brugere som skal anvende databasen når den engang er færdig!
Det jeg søger er egentlig bare en metode til at have 2 comboer, der får data fra den samme tabel (DataTabel), og samtidig udfylder en række felter automatisk med data fra hver sin combo, altså fra combo#1 vælger jeg Porche, og automatisk udfyldes to felter med Hk:245, Topfart:255 og fra combo#2 vælger jeg Bugatti og automatisk udfyldes to nye felter med Hk:450, Topfart:343. Alle data ryger fra formen og tilbage i HovedTabellen.
Du skal ikke tage dig af selve udformningen, da det egentlig stadig bare er et udviklingsmiljø hvor jeg afprøver en masse ting og funktionsmuligheder, jeg laver først den endelige opbygning af databasen når jeg har et overblik over alle funktionerne der skal indbygges.
Men altså ikke noget med nogen personer og subforms i den forbindelse :-)
The name "person" could be changed to "CarsSelected" which just means that a group of cars is related to a "CarsSelected" record. This would make your application MUCH more flexible. Becuae if you dont use this then you can only have a limited number of selections (combo's) unless you change your program.
But in the end its up to the customer to decide what they want :o)
You will need to add a new field (for each car) to HovedTabel. Then you will need to alter the query which is used on the form so that it selects the data for the second car. Now this can be a problem, because the second car may not be selected, so you need to alter the relationship to an OUTER JOIN (its getting complicated I can hear you say) :o)
Then you will need to alter your form, adding the new fields from the query. And the second combo must be changed so that it is BOUND to the new field.
It would NOT be a good idea to use a notat field in your combo
Hvis jeg har forstået det rigtigt, så har eller vil du gerne ha' en form med 2 ComboBoxe, hvorfra du vælger et bilmærke, som så skal definere indholdet af nogle felter på formen (Hk, Topfart, mv.)...
Hvis det er tilfældet, burde der vel ikke være nogen problemer med, at bruge den samme tabel, så længe du bare laver seperate felter til hver ComboBox. Altså fx. felterne Hk_1 og Topfart_1 referere til ComboBox_1 og felterne Hk_2 og Topfart_2 referere til ComboBox_2.
Så kan du jo evt. bare lave et "On_Change" event for hver af de 2 ComboBoxe, som sørger for at ændre data i de respektive felter alt efter valget i Combo'en.
Der er naturligvis også den mulighed, at jeg har misforstået det hele c",)
I think we're getting there :-) Men jeg har stadig ikke helt fattet det...... Du siger at jeg skal ændre min relation til OUTER JOIN for bil#2, jeg går ud fra at det er relationen mellem DataTabel og HovedTabel du snakker om.
For at være helt sikker, så har jeg følgende
DataTabel; der indeholder 4 felter, BilID, Bilmærke, Hk og Topfart
HovedTabel; 2 felter der indeholder Bil#1 og Bil#2 som comboer hvor man vælger alle 4 felter fra TabelData for hver combo.
Jeg laver så relation mellem BilID og Bil#1 og BilID og Bil#2, hvor Bil#2 bliver en OUTER JOIN, korrekt?
Men når jeg så laver min query, så bliver det noget rod....
Query; Bil#1, fra HovedTabel Bilmærke, fra DataTabel Hk, fra DataTabel Topfart, fra DataTabel Bil#2, fra HovedTabel Bilmærke, fra DataTabel <-------- her går det galt tror jeg :-) Hk, fra DataTabel Topfart, fra DataTabel
Hvis først query'en virker burde jeg ikke få problemmer med at få lavet en form der styre indholdet.... for med BOUND mener du bare at den anden combo knyttes til f.eks Bil#2 fra HobedTabel, korrekt?
Hvordan skulle de felter så laves således at det kommer til at virker med at de tager værdier fra samme tabel (DataTabel), kan du komme med et lille eksempel? Og hvordan udformer man en OnChange event til comboerne? .... sorry er grøn udi access-verdenen :-)
hubs>You are right in what you are saying, and as I have already pointed out to strandgaard this is possible. But in my opinion it is thw WRONG way! If he wants to add further cars (combos) then it means altering the dB again! If the db WAS NORMALISED then this would not be neceassary!
In the query you will need to add the datatable two times! When you do this you will see that it gets reanmed so that it ends with _1. It is THIS table which you use for bil2
Terry >> Det kan jeg kun give dig fuldstændigt ret i. Jeg har selv prøvet at få smidt en ligenede DB i hovedet, som jeg skulle sørge for at opdatere, og det var mildt sagt rimeligt irriterende at skulle opdatere formen igen og igen.
Strandgaard >> Jeg vil helt klart anbefale at du følger terry's råd og vejledning, han ved hva han snakker om c",) men hvis du er interesseret i en hurtigt løsning så kunne du bl.a. gøre følgende:
Lave dine 2 ComboBoxe som er linket op til din Tabel. Derefter kan du fx. lave to unbound listboxe (en til hver combo). Gå ind under Properties->Format for hver af de 2 listboxe og sæt: 'Column Count'= 3 'Column Header'= Yes 'Column Width'= 4cm;2cm;2cm (bare et ex. skal naturligvis tilpasses efter datalængde) Gå ind under Properties->Data her skal du bare lige sætte 'Bound Column' = 3 og både 'Control Source' og 'Row Source' skal være tomme.
Så laver du bare et On_Change event på hver af dine ComboBoxe ved at gå ind under 'Properties'->'Event' og aktivere 'On Change' tryk derefter på ... som så gerne skulle tage dig til VB-editoren. Her indsætter du bare følgende kode:
Private Sub ComboBox1_Change() Me![Listbox 1].Rowsource = "SELECT Bilmærke, Hk, Topfart FROM [Din Tabel] WHERE BilID = " & Me.Combobox1 End Sub
Gør det samme for Combobox2 med følgende kode
Private Sub ComboBox2_Change() Me![Listbox 2].Rowsource = "SELECT Bilmærke, Hk, Topfart FROM [Din Tabel] WHERE BilID = " & Me.Combobox2 End Sub
Håber den lange smøre giver mening eller siger du bare til c",)
Så er målet nær :-) Nu har jeg fået lavet de to comboer som jeg gerne vil have dem på min form. Jeg kan dog ikke få lov til at skrive nye værdier ind i formen, det er som den kun læser de værdier jeg har lagt ind i HovedTabel. Samtidig kan jeg ikke rigtig få det med den OUTER JOIN til at virke. Jeg har lavet et lille eksempel som jeg kan sende til dig, hvis du har mod på det.
Og så skal i da ha' mange tak for hjælpen begge to, lækkert med lidt eksperthjælp når nøden er størst
Hubs har self. først lige set dit løsningssvar nu efter jeg har postet... Jeg har fri om et kort øjeblik, så jeg prøver din løsning straks imorgen tidlig :-) og super med eksemplet, der gør det lidt nemmere for sådan en hjemmebikser som mig, der lærer bedst via eksempler og ved at rode godt og grundig med tingene :-)
strandgaard> I'll take a look if you can sent it to me. You can compress the dB through the Tools+Database+Compact Repair menu. And then if you ZIP it, it should be small enough.
Hejsa, jeg har fået skidtet til at virke som jeg gerne vil have det, om det så er teknisk korrekt brug af access er jeg mere tvivlende på, men hva det må jeg se på senere hvis det bliver et problem :-)
Jeg løste det ved at lave en forespørgsel tilbage til min DataTabel og bruge den som input til comboerne, hvilken forskel det så lige gør kan jeg ikke regne ud!!!
Men i skal begge have mange tak for hjælpen og i må meget gerne smide et svar, så deler jeg point ud for den store hjælp. Flest point til Terry da han har hængt i længst tid :-)
Man lærer ski' noget hele tiden.... især af problemmerne :-)
Jeg behøver ikke nogen point dem har Terry helt klart fortjent.
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.