Avatar billede renekoemler Nybegynder
16. maj 2002 - 08:59 Der er 24 kommentarer og
1 løsning

Sekundær nøgleoverførsel

Hej Igen,

da der var god succes med mit sidste spg. prøver jeg lykken igen.

Jeg vil gerne skrive i to tabeller fra samme form - no problem, men da de tabeller relaterer til hinanden ville jeg gerne kunne overfører primærnøglen fra TabelTest (i eks. benævnt id)  til et sekundærnøgle felt i TabelTest2. Jeg har prøvet med nedenstående, men den smider ikke id-feltet over i TabelTest2. Kan forøvrigt ikke gennemskue hvordan jeg sikre mig at jeg får den "rigtige" værdi på id feltet med over.

Private Sub Kommandoknap10_Click()
sqlstring = "INSERT INTO Test.TabelTest(Navn, Adresse, Telefon) VALUES ('" & TekstNavn & "','" & TekstAdresse & "','" & TekstTelefon & "')"
sqlstring2 = "INSERT INTO Test.TabelTest2(Alder, Køn, Uddannelse, id) VALUES ('" & TekstAlder & "','" & TekstKoen & "','" & TekstUddannelse & "',' & [TabelTest].[id] & ')"
DoCmd.SetWarnings False
DoCmd.RunSQL sqlstring
DoCmd.RunSQL sqlstring2
DoCmd.SetWarnings True
End Sub

Kan nigen give et godt litteratur tip til VBA/Access/SQL, da mine points nok hurtigt ville slippe op ellers :-)

/rene
Avatar billede terry Ekspert
16. maj 2002 - 11:49 #1
Why are you INSERTING to record with SQL, cant you enter the data directly into the form and let Access do the work!
If you have table it as the main form and tabel2 on a sub form then it will all happen automatically
Avatar billede renekoemler Nybegynder
16. maj 2002 - 12:01 #2
OK Thanks,

I'am quite new to using Access, normally i work with Lotus Notes so i don't know much about syntax and the possibilities provided by Access. Is it possible to control more subforms into a main form?

I will need to have different subforms selected by some controls i the main form.

I will now look into the subform possibility.

I'll be back :-)
Avatar billede terry Ekspert
16. maj 2002 - 12:17 #3
You can have a main form and then MAYBE a TAB control where you can have a sub form on each TAB! Hope you understand what I mean.

Try this:
Lets say that all your tables and relationships are in place.

Make a form using the form wizard. Choose table1 as the source. Then make a form again using the wizard this time choose table2 as the source.

With the frist form in design view drag and drop form2 onto form1! IF your relationships are in order it will place form two onto form one and automatically make a LINK between the forms using the primary key/foreign key relationship!

As I mentioned you could first add a TAB control to form1 and then drag and drop form2 onto the first tab and maybe another form on to another tab.

Easy isnt it?
Avatar billede terry Ekspert
16. maj 2002 - 12:18 #4
You can also try using the form wizard, this time selecting fields from TWO tables. If Access can see the relationship it will ask you if you want to create a sub form.
Avatar billede renekoemler Nybegynder
16. maj 2002 - 12:42 #5
Hey Terry,

I'm affraid i need two/more different forms. And therefor I need to get the primary key from the one tabel to use as foreing key in an other table.

The system i am constructing shall handle firefighting equiptment including the stockposition of them one type of equiptment may be stored in different places eg 10 ladders in that warehouse and 23 of the same type of ladders in an other warehouse.

I have tried getting the id value from the Equiptment tabel by this SQLstatements:

idname = TekstNavn.Value
Find = "SELECT id FROM Test.TabelTest WHERE Navn = idname"
testid = DoCmd.RunSQL find


and then "putting" testid into an INSERT INTO statement

but it won't run.

I therfor need to "transfer" values from the "make new equiptment" form to the "place" form. So that i can get the correct foreing key into the place table.

Thanks Once againg for you paciens (wrong spelled i know) with me

rene
Avatar billede nih Novice
16. maj 2002 - 17:56 #6
kig på dette link: http://www.hedeskov.dk/

I kap. 10 er der en LET opskrift på at lave en formular med underformular - helt uden SQL

Niels
Avatar billede nih Novice
16. maj 2002 - 17:58 #7
Avatar billede renekoemler Nybegynder
17. maj 2002 - 08:45 #8
OK Niels,

Men har nok fundet ud af at skal bruge to forskellige formularer, så nu "kæmper" jeg med at sætte en felt værdi i en formular i forbindelse med DoCmd.OpenForm "Formnnavn" kommandoen.

Jeg vil simpelt hen sætte en felt værdi i "underformularen" - som er en formular der kaldes fra "hovedformularen" - med indholdet fra et "hoivedformular felt"

/rene
Avatar billede nih Novice
17. maj 2002 - 08:59 #9
Me.Formular2!dato = Me.Tekst12

Formular2 er navnet på underformularen
dato er feltnavnet på underformularens tabel/foresp
tekst12 er navnet på en tekstbox på hovedformularen

Koden kan lægges i hovedformularens VedÅbning hændelse.

Niels
Avatar billede nih Novice
17. maj 2002 - 09:01 #10
Hov - er spørgsmålet lukket? - Det så jeg først nu :)
Avatar billede renekoemler Nybegynder
17. maj 2002 - 09:03 #11
Hej Niels, jeg laver hurtigt et nyt så du kan få lidt points :-)

Jeg prøver lige trikket - så vender jeg tilbage
Avatar billede nih Novice
17. maj 2002 - 09:04 #12
naj det er ligemeget
Avatar billede renekoemler Nybegynder
17. maj 2002 - 09:13 #13
Hej Niels,

OKI - vil bare sikre mig at jeg får lov til at "lege" med i fremtiden.

Desværre kører det ikke helt.  Får i hverttilfælde en compile fejl.

Der er jo ikke tale om en "rigtig" subform men om en "almindelig" form hvor jeg gerne vil overføre en felt værdi til. Du får lide en kode snas:

Private Sub OpretAfdeling_Click()
sqlstring = "INSERT INTO Test.TabelTest(Navn, Adresse, Telefon) VALUES ('" & TekstNavn & "','" & TekstAdresse & "','" & TekstTelefon & "')"
DoCmd.SetWarnings False
DoCmd.RunSQL sqlstring
DoCmd.SetWarnings True
Me.Afdelinsoplysninger!TekstNavn2 = Me.TekstNavn
DoCmd.OpenForm "AfdelingsOplysninger"
End Sub

Jeg har leget lidt med tanke om "indlejring" (perameteroverførsel) i DoCmd.OpenForm men hjælpefilen (ved godt det er tøset) - giver ikke noget endegyldigt svar.

ps. har du viden om noget litteratur på MS SQL/MS VBA/MS ACCESS, det kunne være godt at kloge i?

/rene
Avatar billede nih Novice
17. maj 2002 - 09:20 #14
Nu begynder det at dæmre.

I den første form opretter du et nyt navn i din tabel
Derefter vil du åbne den anden form, og gå til den post du lige har oprettet.

Er det rigtigt forstået ????

Niels
Avatar billede renekoemler Nybegynder
17. maj 2002 - 09:25 #15
Hej Niels,

Jeg tror du ser gennem mine tåger.

Jeg arbejder med et katalog der skal holde på forskellige genstande (nej ikke alkohol) fx. Brandpumper, vi har imidlertid Brandpumper af samme slags placeret flere forskellige steder. Derfor en tabel der holder på karakteristika for Brandpumpen og en tabel der holder på de forskellige placeringer af Brandpumper. Og da vi gerne skulle kunn srørge på "Hvor har vi Brandpumperne henne" skal jeg overføre primærnøglen i Brandpumpe-tabellen til Placeringstabellen som sekundærnøgle:

Brandpumpe  Skur nummer1
Brandpumpe  Garage nummer 78

osv.

Hjalp det :-)

René
Avatar billede nih Novice
17. maj 2002 - 09:25 #16
DoCmd.OpenForm "AfdelingsOplysninger", , , "TekstNavn2 = " & Me.TekstNavn

TekstNavn2 skal være feltnavn i formen 'AfdelingsOplysninger's underliggende foresp - det duer ikke med navnet på en tekstbox

Niels
Avatar billede renekoemler Nybegynder
17. maj 2002 - 09:28 #17
OKI - det var lige den syntax jeg manglede. Er normalt Lotus Notes mand - men har et lille projekt kørende i access så selve designet er "nemt" med at "stave" access skal man lige lære....

/rene
Avatar billede nih Novice
17. maj 2002 - 09:31 #18
Det der sker er at du sætter et filter på formularen 'AfdelingsOplysninger'. Du kan lave en knap på formularen der sætter 'filterOn = false' og du kan se alle poster igen.

Niels
Avatar billede renekoemler Nybegynder
17. maj 2002 - 10:19 #19
Hej Igen,


du siger til når du løber tør for tålmodighed - håber jeg...

Den underliggende forespørgsel siger du - er det det samme som den tabel man ønsker at sætte poster ind i?

Jeg har prøvet at lave et felt i tabellen men jeg får ikke "overført" værdien. Jeg havde forestillet mig at man - ved at have GenstandNavnet = [TekstNavn]på formen StandardOplysninger og overføre det til AfdelingsOplysninger formen kunne SQL'le sig frem til den "rigtige" genstand id og så indsætte denne som sekundær nøgle. Når man kørte ain INSERT INTO sætning på AfdelingsOplysninger.
I pseoudokode:

Dim var As String
var = SELECT id FROM TabelTes WHERE TabelTest.Navn = AfdelingsOplysninger.TekstNavn

sqlstr = INSERT INTO TabelTest2 (afd, tlf, id) VALUES (Afdeling, Telefon, <var>)


Ved godt det ikke er "stavet" rigtigt men det er det jeg gerne vil

/rene
Avatar billede nih Novice
17. maj 2002 - 10:35 #20
Det er den du finder i formens 'postkilde' eller 'RecordSource' på engelsk.

Niels
Avatar billede terry Ekspert
17. maj 2002 - 10:35 #21
Hi!
Not that I dont want to help I just CAN NOT find the time at the moment! I will keep and eye on the question and if I can get time at the weekend will see what I can do.
mvh
Terry
Avatar billede nih Novice
17. maj 2002 - 10:38 #22
Hvorfor indsætter du ikke dine poster direkte i formen, istedet for at bruge SQL.
En ny Afd. oprettes i form 1, og nytudstyr oprettes i den filtrede form 2.

Niels
Avatar billede nih Novice
17. maj 2002 - 10:39 #23
You are always welcome Terry. :o)
Avatar billede renekoemler Nybegynder
17. maj 2002 - 10:45 #24
Hej Niels,

1) Fordi jeg ikke helt er klar over Access måde at gøre ting på :-(
2) Fordi det senere muligvis skal tilgåes fra nettet via .asp 0-)
3) Fordi jeg synes det er spændende at lege med sql :-)

Problemet med at filtrere opstår fordi jeg ikke ved hvad jeg (kan) filtrere på er det på værdien i Tekstboksen eller er det på feltet i den tabel jeg smider ting ind i? Me. må vel referer til formularen og de elementer der er der på.......

Jeg tror sgu det her ligner at arbejdsgiver må spring med et kursus i MS Access (lidt udover PC-kørekort)...

Jeg tror ikke du skal bruge mere tid på mig - før jeg er blevet lidt klogere så vi taler samme sprog.

Tusind Tak for gode hints - jeg er blevet klogere men vil ikke spilde mere af din tid.
Avatar billede nih Novice
17. maj 2002 - 10:49 #25
Prøv at sende db'en til mig: nih@mail1.stofanet.dk

ver 97 eller 2000

Niels
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