Det går inte att ange flera tabellnamn i en deletesats.
Definera foreign key med on delete cascade och gör sedan delete i huvudtabellen.
Flyttas från ASP
12 svar · 634 visningar · startad av Oputres
Allå!
Detta trodde ju jag skulle gå:
Conn.Execute("Delete * From Tabell1, Tabell2, Tabell3, Tabell4 Where AnvId = '" & RSAnvandare("AnvId") & "';"),, 128
I alla tabeller finns kolumnen AnvId för att knyta posten till användaren och jag fill alltså ta bort alla poster i alla tabeller där AnvId = RSAnvandare("AnvId").
På denna rad får jag dock följande felmeddelande:
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Microsoft Access Driver] Specify the table containing the records you want to delete.
Kan man inte ta bort flera tabeller samtidigt i Access?
Det går inte att ange flera tabellnamn i en deletesats.
Definera foreign key med on delete cascade och gör sedan delete i huvudtabellen.
Flyttas från ASP
Bara en tanke, borde det inte vara delete from snarare än delete * from?
Access tillåter delete *, det går inte i andra DBMS.
LarsG skrev:
Det går inte att ange flera tabellnamn i en deletesats.
Definera foreign key med on delete cascade och gör sedan delete i huvudtabellen.
Flyttas från ASP
Eeh, hur gör man det? :q
nitro2k01 skrev:
Bara en tanke, borde det inte vara delete from snarare än delete * from?
Hmm, skall det? Anger inte * att den skall ta bort alla kolumner, precis som med Select? Det fungerar i alla fall men är det fel?
Då delete alltid tar bort hela rader så fyller * ingen funktion. Så jag tycker att du skall ta bort det. Enda problemet är att äldre versioner av Access kräver att man skriver delete *
create table pk(c1 int primary key)
create table fk(c1 int)
-- lägg till foreign key
alter table fk add foreign key(c1) references pk on delete cascade
om du nu gör en delete från pk så kommer relaterade rader i fk att tas bort.
Det finns säkert något tjusigt grafiskt interface för detta i Access.
LarsG skrev:
Då delete alltid tar bort hela rader så fyller * ingen funktion. Så jag tycker att du skall ta bort det. Enda problemet är att äldre versioner av Access kräver att man skriver delete *
create table pk(c1 int primary key) create table fk(c1 int) -- lägg till foreign key alter table fk add foreign key(c1) references pk on delete cascadeom du nu gör en delete från pk så kommer relaterade rader i fk att tas bort.
Det finns säkert något tjusigt grafiskt interface för detta i Access.
Nu är jag inte så himla duktig på databaser men är det här något i stil med Relationer? Om jag skapar relationer (är bara van att arbeta grafiskt i Access) kommer det då bli samma effekt? Man måste inte ange någon speciell delete-sats när man vill radera utan istället har man ställt in detta samband redan från början, d.v.s. att om jag tar bort en tabell så skall de andra också tas bort, eller?
Nu är jag inte så himla duktig på databaser men är det här något i stil med Relationer?
Jo.
Om jag skapar relationer (är bara van att arbeta grafiskt i Access) kommer det då bli samma effekt?
Jo.
Man måste inte ange någon speciell delete-sats när man vill radera utan istället har man ställt in detta samband redan från början, d.v.s. att om jag tar bort en tabell så skall de andra också tas bort, eller?
Jo.
Du skriver
tar bort en tabell
men jag förutsätter att du menar post.
Oki. Jag hoppas du orkar lite till, det här låter som det bästa att göra (nödlösningen blir en delete-sats för varje post men det blir jobbigt att komma ihåg att ändra i denna fil om jag gör ändringar).
Vi plockar tre tabeller: AnvDb, Lankar och Protokoll.
I tabellen AnvDb finns AnvId som primärnyckel och används för att identifiera posterna i samtliga tabeller till användaren. I alla andra tabeller återfinns således denna som referensnyckel.
Jag öppnar databasen, klickar på Relationer och lägger till ovannämnda tabeller. Skall jag nu dra primärnyckeln AnvId i tabellen AnvDb till de olika AnvId-posterna i övriga tabellerna? Jag får som standard upp 1:N, blir det bra? (jag kommer inte ihåg de olika referenstyperna. Därefter klickar jag i Referensintegritet följt av "Ta bort poster i relaterade tabeller".
Är jag fit for fight efter detta? Om jag nu anger SQL-satsen Delete From AnvDb Where AnvId = '" & strAnvId & "';"),, 128 kommer då alla relaterade tabeller raderas på poster med denna referensnyckel?
Jag har aldrig använt access men enligt din beskrivning borde det vara rätt.
Oputres, vet inte om detta löser sig för dig. Men denna VBA-kod är kanske en början?
Ta bort kommentar fnutten ' vid setwarnings för att ta bort konfirmations-rutan om radering(ar).
'DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE * FROM AnvDb WHERE AnvDb.AnvId='" & strAnvid "';"
DoCmd.RunSQL "DELETE * FROM Lankar WHERE Lankar.AnvId='" & strAnvid "';"
DoCmd.RunSQL "DELETE * FROM Protokoll WHERE Protokoll.AnvId='" & strAnvid "';"
'DoCmd.SetWarnings True
Det fungerade inte riktigt med relationerna eftersom det var olika datatyper (ReplikeringsID/räknare i AnvDb och text i övriga). Jag skrev en Delete-sats för varje tabell istället. Inte det smidigaste men jag vill inte ändra för mycket i databasen.