Avatar billede jind Nybegynder
20. januar 2009 - 10:56 Der er 7 kommentarer og
1 løsning

oprette lookup-kolonne i extern tabel

Gæve experter,
Jeg har søgt at finde nogle eksempler på at oprette en kolonne i en extern .mdb via sql eller brug af dbs.Execute. Den nye kolonne skal have lookupværdier fra en tredie database.

dvs i databasen test.mdb skal jeg opdatere tabellen "MedarbejderTBL" med en kolonne "medarbejderprofilTBL". Denne kolonne skal hente sine værdier fra tabellen "profilTBL" i databasen admin.mdb.

-noget i stil med
Set dbs = OpenDatabase(db)
dbs.Execute "Alter table MedarbejderTBL add medarbejderprofilTBL LookupTable (admin.mdb, ProfilTBL)"

Tak for jeres tid.
Avatar billede fdata Forsker
20. januar 2009 - 23:29 #1
Opret først link til alle relevante tabeller (via Sammenkædede tabeller)

... og så er du nok nødt til at hakke den over i to:

- Opret kolonnen medarbejderprofilTBL (du har allerede koden)
- Kør en opdateringsforspørgsel, hvor du kobler MedarbejderTBL sammen med ProfilTBL (de har formodentlig en fælles nøgle) og opdaterer medarbejderprofilTBL
Avatar billede jind Nybegynder
21. januar 2009 - 09:18 #2
Hej fdata
Tak for hurtig hjælp.
Jeg er ikke helt sikker på at jeg forstår det. Jeg skal ikke have en relation mellem tabellerne med derimod skal den nye post bruge opslag fra profilTBL.
Hvis det også er det du mener må du meget gerne uddybe hvordan opdaterings forespørgslen ser ud og hvordan jeg får den ind i lookupfeltet i medarbejderTBL.
Hvis det ikke er at bede om for meget....:o)
Avatar billede fdata Forsker
21. januar 2009 - 22:08 #3
OK. Nu forstår jeg. Jeg går ud fra, at du har fået oprettet det nye felt.

Opret et link (Filer/Hent eksterne data/Sammenkædede tabeller) til ProfilTBL i admin.mdb. Herefter kan du bruge denne tabel som om den lå lokalt i test.mdb.

Åben MedarbejderTBL i designvisning, og hop ned til medarbejderprofilTBL.

Nederst på skærmen ser du egenskaberne for feltet. Fanen Generelt er vist. Skift til Opslag.

Her ændrer du Rækkekildetype til "Tabel/forespørgsel" og Rækkekilde til "ProfilTBL".

Så skal du måske lege lidt med Bundet kolonne, Antal kolonner og Kolonnebredder. Bundet kolonne er den kolonne, der indeholder den værdi, du vil lægge i medarbejderprofilTBL.

Håber, opgaven er forstået rigtigt denne gang  ;o)
Avatar billede jind Nybegynder
22. januar 2009 - 08:56 #4
Hej Igen,
desværre ikke helt. Sorry. :o)
Jeg skal lave en kode der gør dette, da programmet er distribueret til en masse mennesker. Det vil ikke være muligt at tilgå disse programmer for mig. Det er så at sige en opdatering til programmet som de selv skal installere. Jeg kan lave tabellerne, mit eneste problem er - via kode - at lave et opslag/lookup felt.

normalt vil denne kode være noget med
dbs.Execute "Alter table MedarbejderTBL add medarbejderprofilTBL memo"
men istedet for datatypen memo skal det så være en lookup. - altså noget med:
dbs.Execute "Alter table MedarbejderTBL add medarbejderprofilTBL LookupTable (admin.mdb, ProfilTBL)"
Mit problem er at jeg ikke aner om det hedder lookup, og i givet fald hvilke parametre der skal gives mere.
Håber du er med.
Avatar billede fdata Forsker
22. januar 2009 - 17:01 #5
OK, så er jeg med. Du skal til at lægge puslespil nu. Her får du brikkerne:

Koden, der opretter et link til admin.mdb:

Sub OpretLink()
  Dim tdf As TableDef
 
  Set tdf = CurrentDb.CreateTableDef("ProfilTBL")
  tdf.Connect = ";DATABASE=C:\Temp\admin.mdb"
  tdf.SourceTableName = "ProfilTBL"
  CurrentDb.TableDefs.Append tdf
End Sub

(husk at tilrette stien)

Koden til at oprette feltet med indbygget opslag:

Sub OpretFelt()
  Dim dbs As DAO.Database
  Dim tdf As DAO.TableDef
  Dim Fld As DAO.Field
  Dim prp As DAO.Property

  Set dbs = CurrentDb
  Set tdf = dbs.TableDefs("MedarbejderTBL")
  Set Fld = tdf.CreateField("medarbejderprofilTBL", dbText)          ' Opret tekstfelt
  tdf.Fields.Append Fld
 
  Set prp = Fld.CreateProperty("DisplayControl", dbInteger, 111)      ' Type: Dropdown
  Fld.Properties.Append prp
 
  Set prp = Fld.CreateProperty("RowSourceType", dbText, "Table/Query") ' Kildetype: Tabel/Query
  Fld.Properties.Append prp
 
  Set prp = Fld.CreateProperty("RowSource", dbText, "ProfilTBL")      ' Kilde: Tabelnavn
  Fld.Properties.Append prp
 
  Set prp = Nothing
  Set Fld = Nothing
  Set tdf = Nothing
  Set dbs = Nothing
End Sub

Det kan godt være, du får brug for at nørkle lidt med de øvrige parametre. For at finde deres navne, kan du lege med nedenstående kode. Fremgangsmådeen er altså, at du først opretter feltet manuelt med alle korrekte værdier, og derefter kører du nedenstående kode. Det kan også være at feltnummeret ligger udenfor 21-30; men det var her jeg fandt de sjove ;o)

Sub ListProps()
  Dim i As Integer
  For i = 21 To 30
    Debug.Print i, CurrentDb.TableDefs("MedarbejderTBL").Fields("medarbejderprofilTBL").Properties(i).Name, _
                  CurrentDb.TableDefs("MedarbejderTBL").Fields("medarbejderprofilTBL").Properties(i).Value
  Next i
End Sub

... og så skal du vel også runde af med en eller anden form for tjek, der sikrer at det hele kun bliver afviklet én gang. Altså tjek på om f.eks. den linkede tabel findes.

Håber, du kan bruge stumperne ;o)
Avatar billede fdata Forsker
22. januar 2009 - 17:06 #6
OK, så får du også lige koden til at tjekke, om tabellen findes:

Function TjekTabel() As Boolean
  Dim i As Integer
  TjekTabel = False
  CurrentDb.TableDefs.Refresh
  For i = 0 To CurrentDb.TableDefs.Count - 1
    If CurrentDb.TableDefs(i).Name = "ProfilTBL" Then
      TjekTabel = True
      Exit For
    End If
  Next i
End Function
Avatar billede jind Nybegynder
19. august 2010 - 09:22 #7
Jeg er sikker på at det nok skal kunne virke. Men har desværre ikke haft tid til at finde ud af det. Mange, mange tak for hjælpen fdata.

Vh
Jind
Avatar billede fdata Forsker
19. august 2010 - 23:12 #8
Kommer tid, kommer råd, som man siger.
Pøj pøj - og tak for point ;o)
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