Avatar billede -42- Nybegynder
08. september 2003 - 12:46 Der er 33 kommentarer og
2 løsninger

hjælp til database.

Jeg har en database med uhyggeligt meget data. Jeg har to tabels, et med firmaer og et med kontaktpersoner. Problemet er at hver enkelt kontaktperson referer til firmanavnet, og ikke et id.

Dvs, at jeg ikke kan ændre firmanavn uden at miste alle kontaktpersonerne.

Er der nogle der kan lave et script eller ligende der kan automatisere processen, alle referencerne bliver lavet om til firma id istedet.
Avatar billede overchord Nybegynder
08. september 2003 - 12:51 #1
Hvis du opretter en query der slaar forbindelsen op og viser alle kontaktpersoner, samt ID'en fra det firma de tilhoerer har du en forbindelse.
Jeg ville derefter tilfoeje alle felter fra kontaktperson-tabellen (samt det nye tilhoerselsfelt til firma ID) og oprette en nye table fra denne query. Hvis det virker tilfredsstillende kan du, efter at have oprettet den nye TABEL slette den gamle
Avatar billede -42- Nybegynder
08. september 2003 - 12:52 #2
Jeg er godt med på hvordan det teoretisk skal gøres, jeg ved bare ikke, hvordan jeg skal gøre det praktisk...
08. september 2003 - 12:54 #3
Lav en forespørgsel efter denne opskrift:

UPDATE Kontaktpersoner INNER JOIN Firmaer ON Kontaktpersoner.Firmanavn = Firmaer.Firmanavn SET Kontaktpersoner.FirmaID = Firmaer.FirmaID
08. september 2003 - 12:55 #4
Forinden skal du selvfølgelig oprette et nyt felt i Kontaktpersoner, som hedder FirmaID og som er langt heltal

Efter kørslen kan firmanavn slettes fra kontaktpersoner
Avatar billede -42- Nybegynder
08. september 2003 - 12:58 #5
Se det ser rigtigt ud! kan man køre den i access eller skal man køre det via asp?
Avatar billede overchord Nybegynder
08. september 2003 - 12:58 #6
ok thomas' foreslag er nok det bedste. Jeg er lidt mere paranoid og ville oprette en separat udgave som en forespoergsel foerst saa der ikke blivet skramlet ved eksisterende data :-)
Avatar billede terry Ekspert
08. september 2003 - 12:58 #7
1: Make a new field in firmaer table type autonumber. This will give each record a number strating from 1.

2:  Make a new field in kontaktpersonertable type LONG INTEGER.

3: Make an update query something like this

UPDATE kontaktpersonertable  SET YourNEWLongInt = (SELECT ID FROM firmaer F  WHERE F.firmanavn = kontaktpersonertable.firmanavn )
Avatar billede terry Ekspert
08. september 2003 - 13:00 #8
You obviously need to change table and field names, but it should give you some ideas!
Avatar billede terry Ekspert
08. september 2003 - 13:00 #9
Does your Firma table have an ID?
08. september 2003 - 13:00 #10
42->Du opretter en tom forespørgsel, hvorefter du går i menuen Vis->SQL visning. Her indsætter du SQL'en
Avatar billede -42- Nybegynder
08. september 2003 - 13:03 #11
Yes I have an ID... It's a autonumber
Avatar billede terry Ekspert
08. september 2003 - 13:06 #12
OK, then you start from 2 above (2:  Make a new field in kontaktpersonertable type LONG INTEGER.)
Avatar billede terry Ekspert
08. september 2003 - 13:06 #13
Then you can either run the SQL in ASP or directly in the dB with Access
Avatar billede terry Ekspert
08. september 2003 - 13:16 #14
OH! and when that is done you can obviously DELETE the field kontaktpersonertable.firmanavn
08. september 2003 - 13:34 #15
Terry why is it, that you tell him everything I just said?

42-> Har du prøvet at køre min forespørgsel, som beskrevet 12:54:17 og 12:55:22?
Avatar billede -42- Nybegynder
08. september 2003 - 13:37 #16
Thomasjepsen >> Nej for problemet er at jeg aldrig har prøvet at bruge access før... Og jeg kan ikke ummidelbart se, hvor jeg kan fyre en query af uden at skulle igennem det store microsoft wizard helvede
08. september 2003 - 13:39 #17
42-> Du vælger ny forespørgsel i designvisning. Herefter dukker der ganske rigtigt en dialogboks frem, som hedder noget med "Tilføj tabel". Den lukker du bare. Herefter er du i query-generatoren. Menuen Vis->SQL visning giver dig adgang til at skrive SQL'en direkte.
Avatar billede terry Ekspert
08. september 2003 - 13:40 #18
I dont Thomas
Can you see that he has a field FirmaID on Kontaktpersoner?
Can you see that he has a field FirmaID on Firmaer?

I dont see anywhere that these fields exist UNTIL I ASK and get an answer!
Avatar billede -42- Nybegynder
08. september 2003 - 13:48 #19
terry >> What is the F in this query: UPDATE kontaktpersonertable  SET YourNEWLongInt = (SELECT ID FROM firmaer F  WHERE F.firmanavn = kontaktpersonertable.firmanavn )
Avatar billede terry Ekspert
08. september 2003 - 13:49 #20
Thomas>Just to clear a couple of points up! When I placed amn answer 08/09-2003 12:58:56 I had NOT seen your comment 08/09-2003 12:55:22 only 08/09-2003 12:54:17 and this is also why I asked Does your Firma table have an ID?

Then BECAUSE I got a responce Yes I have an ID... It's a autonumber I answered it! Sorry if you think I'm copying your solution!
Avatar billede terry Ekspert
08. september 2003 - 13:50 #21
-4->Thomas seems to be doing a great job, I think he should continue assisting you
Avatar billede -42- Nybegynder
08. september 2003 - 13:53 #22
both of you help me so if I get this done I'll split the points
Avatar billede terry Ekspert
08. september 2003 - 13:54 #23
I'm sure Thomas will help and he also needs the points :o)
Avatar billede terry Ekspert
08. september 2003 - 13:54 #24
I dont want to get my head bit off again :o)
Avatar billede -42- Nybegynder
08. september 2003 - 13:54 #25
Ok jeg er du der, hvor jeg kan køre min sql...
Avatar billede -42- Nybegynder
08. september 2003 - 13:59 #26
mit ene table hedder Kunder og den indeholder Name og ID

Den anden hedder kontaktperson og indeholder name og companyID

companyID har jeg lige oprettet som Long integer. Name er i begge tables firmanavnet.
Avatar billede -42- Nybegynder
08. september 2003 - 14:02 #27
Så det må blive sådan her ik?

UPDATE kontaktperson SET companyID = (SELECT ID FROM kunder F  WHERE F.Name = kontaktperson.name )
Avatar billede terry Ekspert
08. september 2003 - 14:05 #28
Looks OK
Avatar billede -42- Nybegynder
08. september 2003 - 14:05 #29
når jeg køre

UPDATE kontaktperson SET companyID = (SELECT ID FROM kunder F  WHERE F.Name = kontaktperson.name )


Får jeg meddelsen "operation must use an updateable query"
Avatar billede terry Ekspert
08. september 2003 - 14:06 #30
NO wait!
08. september 2003 - 14:08 #31
Try mine:
UPDATE kontaktperson INNER JOIN kunder ON kontaktperson.Name = kunder.Name SET kontaktperson.companyID = kunder.companyID
Avatar billede terry Ekspert
08. september 2003 - 14:08 #32
Yes, its OK, I was getting confuse with the table names.

F is just an alias for the table Kunder.
Avatar billede -42- Nybegynder
08. september 2003 - 14:13 #33
Thomas >> det må være sådan her ik?

UPDATE kontaktperson INNER JOIN kunder ON kontaktperson.name = kunder.Name SET kontaktperson.companyID = kunder.ID
Avatar billede -42- Nybegynder
08. september 2003 - 14:15 #34
Tak nu fik jeg det til at virke... -Og tilmed korrekt! Mange tak, og ryg så lige den fredspibe!
08. september 2003 - 14:19 #35
:o)

Terry og jeg er skam fine venner...derfor kan man jo godt stikke lidt til hinanden, ikk'? :o)

Men det var godt, at du fik løst problemet!
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