23. maj 2001 - 18:08Der er
23 kommentarer og 1 løsning
PRIMÆRNØGLE VÆRDI TIL FREMMEDNØGLE
Mit problem er: jeg har en Landtabel med en primærnøgle landenr som er en autonummerering. Landenr er fremmednøgle i tabellen Gruppe. Meget simpelt og enkelt! Hvorfor er det så, at landenr fra Landtabel ikke lægger sig over i Gruppetabel? Hvad er det jeg skal gøre?
Jamen så vil jeg bare gerne vide: Hvordan foregår det at primærnøgles værdi \"smutter\" over i den tagel, som har fremmednøglen - og vi taler stadig autonummerering. Jeg har nemlig tabeller med cprnr - primær/fremmednøgle, som virker perfekt. Så igen - hvordan får jeg værdien sat ind i den tabel der har fremmednøglen, når vi taler om autonummering??
Not sure that I understand you 100 % frida, but I would take a look at the \"fremmennøgle\" in the Gruppe tabel and make sure that it has a lookup into the \"Landtabel\". Use the lookup wizard for this.
Ok det kan godt være at jeg er dum!! Men så er jeg så det! Jeg har en Ejertabel, hvor primærnøglen er cprnr. Jeg har en Pladetabel, hvor fremmednøglen er cprnr. Når jeg indtaster i textfeltet lægger cprnr. sig i begge tabeller - hvilket de jo skal. Så har jeg altså de hersens to tabeller, Land og Gruppe, som hænger sammen med autonummerering. Jeg vedlægger kode - det er måske nemmere:
response.write(\"Efter indsæt i GruppeSolist <br>\")
end function
function registrerGruppe() y = 0 if not (request(\"land\") = \"\") then SQL = \"select landenavn from Land l where l.landenavn LIKE \'%\"&request(\"land\")&\"%\'\" Set GRUPPE = forbindelse.Execute(SQL) \'\' rekordset Do While Not GRUPPE.EOF y = y+1 GRUPPE.MoveNext loop if Not (y = 0) then
indsaetGruppe() else indsaetLand() indsaetGruppe() end if end if end function
Og mine små sætninger ind imellem er selvfølgelig bare tjek!!
land/gruppe er en en til mange relation og spørgsmålet er igen igen - hvad er det jeg skal gøre for at værdien på landenr i Land(primærnøgle) skrives i landenr i Gruppe (fremmednøgle) HJÆLP!! frida
Nu har jeg prøvet forskelligt. Jeg indsætter via ASP fra mine tekstfelter på html-siden fx. navn, cprnr, osv osv. Og det ryger ned i ALLE de tabeller det skal- undtagen de tabeller der er oprettet imellem en m-m relation. Jeg har en primærnøgle (autonumm.) - og denne værdi skal ned i en tabel, hvor dens fremmednøgle er. Jeg har ens datatyper (langt heltal). Hvad mere kan man ønske sig? Jeg vil gerne vide om jeg skal gøre noget særligt for at få værdien fra primærnøglen ind i fremmednøgleværdien - eller om drillenissen er sluppet løs. Jeg har en anden tabel, hvor alt virker som det skal, men der indtaster jeg direkte i tabellen. MEN det skulle jo ikke gøre nogen forskel - altså om det kommer fra en html-side eller om det indtastes direkte. Før dette problem er løst, kan jeg ikke komme videre, da jeg jo ikke kan lave forespørgsler, hvor jeg sammenligner et nummer i den ene tabel med et nummer i den anden - da tabellerne jo er tomme. Hvad f..... er der galt??? frida
Frida har du kikket på hvordan du har sat dine tabeler sammen, en til mange, eller mange til mange, det jeg mener er relasionen mellen tabelerne, det er nok det du skal kikke på.
Hej Terry og også i andre! Først Tak til dig Terry, fordi du gad og kigge på min database. Jeg har haft vældig travlt - men har dog indimellem foretaget mig lidt med mit \"problembarn\". Jeg har altså et \'en til mange\' forhold mellem to tabeller: Gruppe og Land. Et land kan indeholde flere grupper og en gruppe kan komme fra et land. Når man normaliserer gælder følgende regel for et til mange forhold: Primærnøgle fra Land bliver fremmednøgle i Gruppe. Hvad angår constraints så skal der ikke slettes eller opdateres kaskadevis. Hvis jeg sletter fx. Beatles, må England jo ikke ryge med og omvendt, jeg må selvfølgelig ikke slette England og gøre Beatles hjemløse. Alt er altså i skønnest orden - sådan set. Når jeg opretter Beatles - skrives i Gruppetabellen Beatles og i LandeTabellen England. Når jeg opretter Stones skrives i Gruppetabellen Stones - og i Landtabellen står England jo allerede - og har et landenr 1. Dette landenr skal så lægge sig over i Gruppetabellen således at Beatles og Stones begge hører til landenr. 1. Og det er det der er problemet - det gør det nemlig ikke. Du Terry er inde på, at jeg skal fortælle i en insertsætning, at landennr. skal sættes ind. Men fidusen er, at når jeg trækker nøgler og opretter en til mange forhold så burde tabellen selv finde ud af at opfange fremmednøglen. I Interbase skrives man, i hvilke tabeller man vil have primær- og fremmednøgle når man creater en tabel - og i Access er det lettere fordi man her kan trække relationerne mellem tabellerne og på den måde få skabt sammenhæng. Når jeg læser i min Accessbog, gøres tingene på samme måde - men jeg har hørt lidt om, at der kan være problemer med Access og relationer. Jeg kan bare ikke forstå, hvorfor det ikke virker! Du janm foreslår at jeg laver et mange til mange forhold. Men en Gruppe tilhører ikke mange lande - og desuden, når man normaliserer mange til mange forhold, opretter man en tabel imellem dvs at mellem \'Land\' og \'Gruppe\' ville komme en tabel \'Tilhørsforhold\' og så ville jeg igen have et et til mange forhold mellem Land og Tilhørsforhold og et et til mangeforhold mellem Gruppe og Tilhørsforhold - hvilket ville give lige præcis det problem jeg har! Så - hvad gør en klog?? frida
Frida I understand all that about normalizing and yours looks fine, but as I mentioned in my mail, how does a group say Aqua know it comes from Denmark? Your one to many relationship only means that there can be many groups to on land but its doesnt say which land, which there can also be many of! So forget all your relationships you have in Access and do it in your code. Thats the only way as far as I know.
hej frida det jeg foreslår er at du genemtvinger dine relationer med flugebenet nederst til venster i dialoboksen, således at de bliver nød til at arbejed sammen.
ianm Frida is trying to create a group from a WEB application. No matter how your relationships are, how do you know which land (foreign key) the group comes? In access you would probably have a combo box with all lands which would be bound to the foreign key field of the group. But if you didnt select a land then it wouldnt just choose any old land, it would inform you have the fact that the field must NOT contain a NULL value!!!! So what I am saying still goes, if frida want to add a group then some way or other she had to say which land the group comes from. Or she too will get ann error, even in her web app.
Hej Terry Som jeg forstår dig, siger du at jeg skal indsætte fremmednøgleværdien med kode - altså insert into Gruppe(landenr) værdien fra Land(landenr). Er det det du siger?? Det har jeg nemlig forsøgt på 1000 forskellige måder, men får syntaksfejl - og hvis ikke - indsættes der alligevel ikke noget. Jeg har - for at forstå hvorfor pokker osv osv...- lavet Land og Gruppetabellerne i en lille ny database - og derefter lavet formular til med et felt til at indtaste land og et felt til at indtaste gruppenavn. Og der går det jo fint med at Land(landenr)-primær- lægger sig over i Gruppe(landenr)-fremmed. Og der har jeg lavet præcis de samme relationer, som i min \"problemdatabase\". Jeg kan jo stadig ikke forstå, hvorfor det skal gøre en forskel om jeg indtaster data via webside eller via en formular. Øv - frida
Hej frida You say that in your new database that you have a form with a field to enter land and gruppenavn. Do you use SQL for inserting the record or are the fields bound to the forms recordset? There is obviously a difference. In your webside can you not write the SQL statement to the screen so that you can verify that it is EXACTLY the same as you expect.
You also say that you have tried 1000 ways. Do I understand you to say that you can create a new groupnavn with the foreign key being empty? I assume that the land already exists before you attemt to add a groupnavn from that land!
Det er sådan at ALT indskrives i min database - bortset fra de fremmednøgler, som hænger sammen med en primærnøgle med autonummerering. Hvis Land ikke eksisterer indskrives det først - og derefter Gruppen. Hvis Land findes indskrives Gruppen. Hvis Gruppen ikke eksisterer indskrives den før Medvirkende indskrives. Findes Gruppen indskrives de Medvirkende. Hvis Medvirkende ikke eksisterer indskrives de før diverse numre, der findes på lp/cd. Findes de Medvirkende derimod indskrives diverse numre. Og sådan fremdeles. Alt fungerer perfekt - bortset fra de fremmednøgler, der er afhængige af primærnøglens autonummerering. Her er en stump kode - og det virker altså!! Jeg starter med at kalde function registrerGruppe(), når jeg har indskrevet Ejer og Plade.
response.write(\"Efter indsæt i GruppeSolist <br>\")
end function
function indsaetGruppeSolist() //tjekker om gruppen eksisterer i databasen. Hvis den gør kaldes registrerMedvirkende() ellers indskrives gruppen og derefter kaldes registrerMedvirkende()
k= 0 if not (request(\"gruppenavn\") = \"\") then SQL = \"select gruppenavn from GruppeSolist g where g.gruppenavn LIKE \'%\"&request(\"gruppenavn\")&\"%\'\" Set GRUPPESOLIST = forbindelse.Execute(SQL) \'\' rekordset Do While Not GRUPPESOLIST.EOF k= k+1 GRUPPESOLIST.MoveNext loop if Not (k = 0) then
registrerMedvirkende() else
indsaetGruppe() registrerMedvirkende() end if end if end function
function registrerGruppe() //tjekker om Landet eksisterer. Hvis det gør kaldes indsaetGruppeSolist() Hvis landet ikke er i databasen indskrives Land og derefter kaldes indsaetGruppeSolist() y = 0 if not (request(\"land\") = \"\") then SQL = \"select landenavn from Land l where l.landenavn LIKE \'%\"&request(\"land\")&\"%\'\" Set LAND = forbindelse.Execute(SQL) \'\' rekordset Do While Not LAND.EOF y = y+1 LAND.MoveNext loop if Not (y = 0) then
Hi frida Are you saying that you can insert a GruppeSolist WITHOUT having to give a value to the foreign key, IE you can insert a record and value of the foreign key after the INSERT is NULL?
Now I cant rememember the names of the fields but try thes two lines in Access, you may need to alter the field names. I havent tried this on your database!
The first is without the LandID (foreign key) which fails because it requires a value in the foreign key field. The second doesnt fail!
DoCmd.RunSQL \"INSERT INTO GruppeSolist(GruppeNavn) VALUES (\'Test2\')\" DoCmd.RunSQL \"INSERT INTO GruppeSolist(GruppeNavn, LandID) VALUES (\'Test2\', 1)\"
In the function indsaetGruppe I say that you MUST insert the land ID. Frida, and I would like you to answer this question, how does the INSERT know which landID to use if you dont tell it? Just because you have found a land in function registrerGruppe doesnt mean that its taht land it uses, thats just code!
Hej Terry Jeg har nu tjekket hele databasen igennem. Sørget for at alle fremmednøglerne er obligatoriske - er indexerede og ikke har en defaultværdi. Og det virker altsammen logisk og korrekt nu. Så må jeg se om jeg kan få syntaksen til min insertsætning korrekt. Tak for hjælpen - håber du bliver tilfreds med de 150. Også tak til I andre for forslag. Mvh Frida
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.