Avatar billede mn Nybegynder
11. februar 2002 - 15:25 Der er 7 kommentarer og
2 løsninger

Opret relation via SQL

Hejsa

Jeg skal have oprettet en relation der inddrager Referentiel integritet med opdatering.

Jeg er tæt på at have den, men kan ikke få opdateringen med...

Er der nogen der har et godt bud på hvad der skal til ??

Her er hvad jeg har (det klassiske postnr/by eksempel) :

ALTER TABLE Person
Add Constraint gchj foreign key (perspostnr)
references postnr (postnr);

Avatar billede terry Ekspert
11. februar 2002 - 19:41 #1
ALTER TABLE Person
ADD FOREIGN KEY (perspostnr)
REFERENCES postnr (postnr)

Never tried it in Access but cant see why it should work.
Avatar billede mn Nybegynder
11. februar 2002 - 20:46 #2
This isn't any different from my example above, besides - it doesn't work in access.

My example above works, but - I need a little bit more. I need the access' "Cascade Update Related Fields" in the relationships. That is what I hope I can get.
Avatar billede terry Ekspert
11. februar 2002 - 20:53 #3
This CASCADE is unique to Access (or was) so it isnt a standard SQL!
Avatar billede mn Nybegynder
11. februar 2002 - 21:14 #4
huh ! So I have to find a access-vba solution....hmm...
anybody ??

how about the currentdb.tabledefs-object ?
Avatar billede jkrons Professor
12. februar 2002 - 01:46 #5
Prøv at søge på CreateRelation i hjælpen til VBA. Der får du et udmærket eksempel, netop med kaskadevis opdatering.
Avatar billede mn Nybegynder
12. februar 2002 - 09:14 #6
Har du et helt eksempel ?
Det i hjælpen trækker på nogle prævalgte tabledefs m.v.
Avatar billede jkrons Professor
12. februar 2002 - 10:49 #7
Prøv med nedenstående kode, men husk at det er DAO, så du skal huske at tilføje DAO3.6 under Tools - References
Og det virker tilsyneladende kun på en lukket database, så koden skal nok køres fra en anden database - det er det jeg selv gør. Og husk at rette databasenavn, tabelnavne, feltnavne og relationsnavn til det du ønsker.


Sub CreateRelationY()
'Jan Kronsell, September 2000
'erklær DAO variablerne
    Dim db1 As Database
    Dim tabel1 As TableDef
    Dim tabel2 As TableDef
    Dim relNew As Relation
 
'Angiv databasen
    Set db1 = OpenDatabase("db1.mdb")

'Angiv de rigtige tabeller
    With db1
        Set tabel1 = .TableDefs!tabel1
        Set tabel2 = .TableDefs!tabel2

'Opret relationen - relationsnavn i parentes må ikke eksistere     
        Set relNew = .CreateRelation("Tabel1Tabel10", _
            tabel2.Name, tabel1.Name, _
            dbRelationUpdateCascade)
 
'Tilføj relationen og felterne til samlingen af relationer   
        relNew.Fields.Append relNew.CreateField("rnr")
        relNew.Fields!rnr.ForeignName = "nytfelt"
        .Relations.Append relNew

    End With

End Sub
Avatar billede mn Nybegynder
14. februar 2002 - 12:02 #8
Minder umiddelbart meget om den løsning jeg selv kom frem til. min fungerer dog fint på en åben base.

Mange tak for hjælpen.... Det bliver en pointdeling...


Morten


    Dim tdfUserrights As TableDef
    Dim tdfRights As TableDef
    Dim relNew As Relation

    With CurrentDb
        Set tdfUserrights = .TableDefs!tblUserrights
        Set tdfRights = .TableDefs!tblRights

        Set relNew = CurrentDb.CreateRelation("RightsUserrights", _
            tdfRights.Name, tdfUserrights.Name, dbRelationUpdateCascade)

        relNew.Fields.Append relNew.CreateField("RightID")

        relNew.Fields!RightID.ForeignName = "Rights"
        .Relations.Append relNew
End With

Set relNew = Nothing
Set tdfUserrights = Nothing
Set tdfRights = Nothing
Avatar billede jkrons Professor
14. februar 2002 - 12:05 #9
Selvfølgelig kan den køre på en åben database, det kan jeg godt se nu. Det har jeg bare ikke selv haft behov for, og derfor ikke testet.

Selv tak
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