20. april 2004 - 14:22 Der er 8 kommentarer og
2 løsninger

Oprette Kaskadevis Sletning på relation vha VBA

jeps, lige præcis som overskriften beskriver:

Hvordan kan jeg eksekvere en VBA funktion, som sætter Kaskadevis sletning mellem 2 tabeller.

Jeg er selvfølgelig klar over, at der kan være nogle låsningsproblemer. Men dem skal jeg nok komme uden om.

Jeg har følgende DAO-metode til f.eks. at ændre en datatype i Backenden:
    Dim db As Database
    Dim tdef As TableDef
    Set db = OpenDatabase(GetStiTilBackend)
    db.Execute "Alter table [Min tabel] ALTER [Mit Felt] Text(10)


på tilsvarende måde vil jeg altså ændre relationen.

pfh tak
/Thomas
Avatar billede trer Nybegynder
20. april 2004 - 14:29 #1
Kender ikke så meget til access-sql - men noget i denne stil:

alter table t1 drop constraint xyz
alter table t1 add constraint xyz on (col) references t2 ( col ) on cascade delete
20. april 2004 - 15:18 #2
hmm, jeg kan godt få slettet relationen (efter at have prøvet mig lidt frem med relationsnavnene - de er jo ikke lige så tilgængelige som på f.eks. SQL Server).

Men når jeg skal oprette igen får jeg en Syntaksfejl:
db.Execute "alter table MinTabel1 add constraint xyz on ( ID ) references MinTabel2( ID ) on cascade delete"

Nogen ide?
20. april 2004 - 15:20 #3
NB: Se bort fra det manglende mellemrum i sidste del af sætningen
Avatar billede trer Nybegynder
20. april 2004 - 15:32 #4
prøv:

alter table mintabel1 alter column col add constraint xyz references mintabel2(id) on cascade delete

I øvrigt - du kan få meta data ud ved at lave en

dim c, rs
set c = createobject("adodb.connection")
c.open "bla bla bla"
set rs = c.openschema(N)

recordsættet indeholder så metadata. Du afprøver forskellige værdier for N (1-42) - kan ikke huske hvilken der giver relationer - men der er en. Du kan sikkert finde en oversigt på MSDN...
Avatar billede trer Nybegynder
20. april 2004 - 15:34 #5
hmm prøv også:

alter table mintabel add constraint xyz foreign key (col) references mintabel2(id) on cascade delete
20. april 2004 - 16:05 #6
Nå, efter selv at have gransket MSDN fandt jeg dette eksempel (som minder meget om dit)
ALTER TABLE tblShipping
  ADD CONSTRAINT FK_tblShipping
  FOREIGN KEY (CustomerID) REFERENCES
      tblCustomers (CustomerID)
  ON UPDATE CASCADE
  ON DELETE CASCADE

Men der var en lille bagatel af en notits, som jeg først fandt efter at have kigget 742 linier gennem og efter at have prøvet utallige gange at køre SQL'en fra en data definition-forespørgsel, som bare blev ved at melde syntaksfejl:
"The statement can only be executed through the Jet OLE DB provider and ADO. It will return an error message if used through the Access SQL View user interface."
20. april 2004 - 16:08 #7
Smid et svar og de skal få point, selvom du ikke kom med det fulde svar. Du bragte mig dog på sporet og din sidste SQL var også tæt på at være rigtig (du havde byttet om på cascade og delete)
Avatar billede trer Nybegynder
20. april 2004 - 21:08 #8
Ok, et svar - men lad os dele points'ne når min løsning ikke var fuldt korrekt.
20. april 2004 - 21:48 #9
halvdelen af 111 er vist ca 100, ikk'?

Tak for hjælpen :o)
Avatar billede trer Nybegynder
20. april 2004 - 21:52 #10
Du er for god af dig, thomas :-)

Men tak alligevel

mvh
Troels
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