Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Update-Anweisung in Access

Frage Entwicklung Datenbanken

Mitglied: cranach

cranach (Level 1) - Jetzt verbinden

27.09.2008, aktualisiert 28.09.2008, 3996 Aufrufe, 6 Kommentare

Hallo,

Ich programmiere Game of Life mit Access.

Zellen, die sterben sollen stehen in der Query "die".
Nun muß ich in meiner Tabelle "zelle" den Zustand jener Zellen , die sterben sollen, auf "tot" setzen.
x,y sind Koordinaten der Zellen in "die" und in "zelle".

UPDATE zelle SET zelle.zustand = "tot"
WHERE zelle.x,zelle.y EXISTS (SELECT * FROM zelle AS z INNER JOIN die AS d ON (z.x=d.x AND z.y=d.y))

so oder ähnlich wird intuitiv die Anfrage lauten.

danke schon mal für eure Hilfe
Mitglied: filippg
28.09.2008 um 03:39 Uhr
Hallo,

und, was sagt er zu deinem "intuitiven" Ansatz?

Über die SQL-Fähigkeiten von Access bin ich mir ja nie ganz im klaren, aber in T-SQL (MS SQL Server) gäbe es wohl zwei Ansätze:

1. WHERE ... IN. Wie sieht's bei dir denn mit Primärschlüsseln aus? Die kann man eigentlich gut zusammensetzen (also x und y bilden den Schlüssel der Tabelle zelle), bei diesem Ansatz brauchst du aber einen einattributigen. Dann geht: UPDATE zelle SET... WHERE zelle.zelle_ID in (SELECT zelle.zelle_ID FROM zelle INNER JOIN die ON...)

2. Deutlich eleganter: Du kannst JOINS auch direkt in das Update-Statement einbauen. Grob: UPDATE zelle SET ... FROM zelle INNER JOIN die ON ... Zugegeben: ich muss die Ansätze auch immer erstmal ausprobieren, um zu sehen, ob sie funktionieren. Sollte es obiges (wider Erwarten) nicht tun würde ich ein UPDATE zelle SET ... FROM zelle LEFT JOIN die ON ...WHERE NOT die.x IS NULL probieren.

Gruß

Filipp
Bitte warten ..
Mitglied: cranach
28.09.2008 um 10:39 Uhr
Hallo Filipp

schon mit dem einattributigen Primärschlüssel hat es funktioniert. Deine anderen Vorschläge habe ich noch nicht ausprobiert.

hast mein Restwochenende gerettet

Gruß
Bitte warten ..
Mitglied: cranach
28.09.2008 um 14:28 Uhr
UPDATE zelle SET zelle.zustand = "tot"
WHERE zelle.id IN
(SELECT z.id FROM zelle AS z INNER JOIN die AS d ON z.x=d.x AND z.y=d.y);

So funktioniert es.

Ich habe eine weitere Frage...Kann ich die SELECT- Anweisung so erweitern, dass gleichzeitig tupel bezüglich einer dritten Tabelle "born" rausgeschmissen werden?
Weil ich nämlich in die Tabelle "zelle" Tupel aus "born" einfüge. Diese neuen Tupel dürfen aber bei der unteren Anweisung nicht involviert werden.

intuitiv:
(SELECT z.id FROM zelle AS z INNER JOIN die AS d ON z.x=d.x AND z.y=d.y)
MINUS
(SELECT z.id FROM zelle AS z INNER JOIN born AS b ON z.x=b.x AND z,y=b.y)

Danke

Gruß
Bitte warten ..
Mitglied: filippg
28.09.2008 um 14:46 Uhr
Hallo,

ich habe nicht so ganz verstanden, was du willst. Aber vielleicht erfüllt
UPDATE zelle SET ... WHERE zelle.ID IN (SELECT.... JOIN die ON...) AND NOT zelle.ID IN (SELECT zelle.id FROM zelle INNER JOIN born ON...) deine Wünsche.

Gruß

Filipp
Bitte warten ..
Mitglied: cranach
28.09.2008 um 16:18 Uhr
hallo Filipp

die= ermittelt die Tupel, deren Zustand in zelle auf "tot "gestzt werden müssen.
born= setzt den zustand auf "lebendig" ,wenn die tupel bereits in "zelle" sind, Oder fügt neue Tupel ein.

dieUPDATE und bornINSERT realisieren eben diese Aktualisierung in "zelle" anhand der Queries born und die.

Wenn ich bornQuery aufrufe verändert diese also "zelle".
Ich muß aber dieQuery auf die ursprüngliche "zelle" anwenden.
Deswegen dachte ich, ich könnte die neuen Tupel aus zelle wieder abziehen, so hätte ich ja die ursprüngliche zelle wieder und darauf "die" bzw. dieUPDATE ausführen.

Aaaber es geht nicht: Ich kann nicht verhindern, dass "dieQuery" auf die veränderte "zelle" angewendet wird.
müßte UPDATE und INSERT gleichzeitig laufen lassen, damit keiner von beiden früher zum Zuge kommt.

Da habe ich also den salat

Gruß

Ebru (mein wahres Ich)
Bitte warten ..
Mitglied: Biber
28.09.2008 um 18:23 Uhr
Moin cranach/Ebru,

willkommen im Forum.
Wir können es handwerklich doch nur dann lösen, wenn wir alle erforderlichen Rahmenbedingungen Deiner Game-of-Life-Implementierung kennen.
Insbesondere fehlt mir die folgende Info:

Du hast nach einer Möglichkeit gefragt, alle vorhandenen Zellen auf Deinem Spielfeld (=komplette Tabelle "Zelle") per Update des Felds "Zustand" zu aktualisieren - allerdings nur auf den Zustand "tot". Was sind denn die anderen möglichen Zustände? Bzw. wäre es nicht einfacher, statt "UPDATE" ein DELETE From" zu nehmen?

müßte UPDATE und INSERT gleichzeitig laufen lassen, damit keiner von beiden früher zum Zuge kommt
Kann ich nicht nachvollziehen. Egal, ob Du es über eine Sequenz "DELETE died", danach "insert born" oder zuerst insert, dann delete machen würdest- NIEMALS kann eine Zelle(x,y) gleichzeitig/in der gleichen Generation in beiden Untermengen enthalten sein.

Es sei denn, Du hast es ganz anders implementiert...

Skizziere doch bitte kurz den Gesamtalgorithmus.

Danke
Biber
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Microsoft Office
Access 2013 - Beispiel für mehrfach Update und Insert (2)

Frage von evolution zum Thema Microsoft Office ...

LAN, WAN, Wireless
Freifunk über vorhandene Access Points ausstrahlen (2)

Frage von Uwoerl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Direct Access mit VPN aufbau (6)

Frage von geocast zum Thema Windows Netzwerk ...

Heiß diskutierte Inhalte
DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (9)

Frage von JayyyH zum Thema Switche und Hubs ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...