20. januar 2009 - 10:56Der 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)"
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
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)
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.
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.
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 = 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.
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
Kommer tid, kommer råd, som man siger. Pøj pøj - og tak for point ;o)
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.