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, 4013 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 ..
Ähnliche Inhalte
Microsoft Office
gelöst Nach Office 2010 SP2 Update - Kein Sharepoint export zu Access möglich (1)

Frage von paddl82 zum Thema Microsoft Office ...

Datenbanken
Access 2010 Pivot Table Export keine Werte (2)

Frage von Dr.Cornwallis zum Thema Datenbanken ...

Microsoft Office
gelöst Microsoft Office 2013 Update-Frage (4)

Frage von WinWord zum Thema Microsoft Office ...

LAN, WAN, Wireless
Rogue Access Point (21)

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

Neue Wissensbeiträge
Windows 10

Windows 8.x oder 10 Lizenz-Key aus dem ROM auslesen mit Linux

(6)

Tipp von Lochkartenstanzer zum Thema Windows 10 ...

Tipps & Tricks

Wie Hackt man sich am besten in ein Computernetzwerk ein

(40)

Erfahrungsbericht von Herbrich19 zum Thema Tipps & Tricks ...

Heiß diskutierte Inhalte
Windows 10
gelöst Windows 10 Home "Netzlaufwerk nicht bereit" (19)

Frage von Oggy01 zum Thema Windows 10 ...

DNS
gelöst Komplette TLD Überschreiben bzw eigene Definieren (10)

Frage von Herbrich19 zum Thema DNS ...

Exchange Server
gelöst RU 17 Exchange 2010 . Erfahrungen? (10)

Frage von keine-ahnung zum Thema Exchange Server ...

Datenbanken
gelöst MySQL Zeiterfassungs-Problematik (wer ist eingecheckt) (9)

Frage von NativeMode zum Thema Datenbanken ...