AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL: Update aus zweiter Liste
Thema durchsuchen
Ansicht
Themen-Optionen

SQL: Update aus zweiter Liste

Ein Thema von alphaflight83 · begonnen am 18. Nov 2008 · letzter Beitrag vom 19. Nov 2008
Antwort Antwort
Benutzerbild von alphaflight83
alphaflight83

Registriert seit: 5. Jun 2008
Ort: Würzburg
147 Beiträge
 
Delphi 10.4 Sydney
 
#1

SQL: Update aus zweiter Liste

  Alt 18. Nov 2008, 13:42
Datenbank: Access • Zugriff über: ADO/SQL
Hallo an alle.
Ich hab momentan ein Problem beim Zusammenstellen einer Tabelle.
Zwei Listen liegen vor, Access und Operator.
Ich möchte nun die Datensätze in Access um die Operatoreinträge erweitern.
Mit der Join-Anweisung kann ich über eine Buffertabelle die Liste erstellen,
ich hätte aber gerne nur die Tabelle Access upgedated, ohne eine Buffertabelle zu benutzen.

SQL-Code:
SELECT
  a.Index,
  a.MachineID,
  a.MachineName,
  a.OperatorID,
  o.OperatorName,
  o.OperatorSurname,
  o.OperatorDesc,
  a.LoginTime,
  a.LogoutTime,
  a.AccessLevel,
  a.Equipment_ID
FROM Access a, Operator o
WHERE a.OperatorID = o.OperatorID
Mein Problem besteht darin, dass ich nicht (mehr) raffe, wie (ob) ich eine Join- in eine Updateanweisung umbauen kann.
Hab mittlerweile schon recht viel durchgelesen, aber alle Funde wollten entweder Festwerte, oder Parameter,
für die ich dann auch wieder buffern müsste.
Momentan nimmt mit zunehmender Lektüre nur noch der grad meiner Verwirrung zu.
Wäre schön wenn mir jemand helfen könnte.
Make me a sandwich! - What? Make it yourself. - Sudo make me a sandwich! - Okay
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: SQL: Update aus zweiter Liste

  Alt 18. Nov 2008, 16:12
Wenn ich das noch richtig im Kopf habe, könnte das so gehen:
SQL-Code:
UPDATE Access SET OperatorName =
    SELECT OperatorName
    FROM Operator
    WHERE Operator.Operator.ID = Access.OperatorID,
OperatorSurname =
    SELECT OperatorSurname
    FROM Operator
    WHERE Operator.Operator.ID = Access.OperatorID,
...
Inwieweit das allerdings performant ist, vermag ich nicht zu sagen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: SQL: Update aus zweiter Liste

  Alt 18. Nov 2008, 18:49
SQL-Code:
UPDATE access
SET OperatorName = o.OperatorName,
    OperatorSurname = o.OperatorSurname,
    OperatorDesc = o.OperatorDesc
FROM access a
LEFT JOIN operator o
  ON a.OperatorID = o.OperatorID
  Mit Zitat antworten Zitat
Benutzerbild von alphaflight83
alphaflight83

Registriert seit: 5. Jun 2008
Ort: Würzburg
147 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: SQL: Update aus zweiter Liste

  Alt 19. Nov 2008, 10:09
Vielen Dank mal für die Antworten.

Leider kommt bei beiden Versionen noch ein Syntaxfehler.
Habe jetzt noch eine Seite gefunden,
die Unterschiede zwischen MS-SQL und Access beim Verwenden von JOINs beim UPDATE beschreibt.

Wenn ich das nun alles richtig verstanden habe, funktioniert mein Vorhaben mit Access gar nicht:
Zitat:
Eine ernstzunehmende Einschränkung bei Ms-Access ist die Unmöglichkeit, zwischen SET und WHERE einen JOIN festzulegen, mit welchem entweder gewisse Zeilen zur Aktualisierung ausgewählt werden oder mit welchem zusätzliche Spalten zur Berechnung des neuen Wertes herangezogen werden können.
Nichtsdestotrotz: Das waren nun meine letzten Versuche:
SQL-Code:

Nummer 1:
UPDATE Access AS a, Operator AS o
SET a.OperatorName = o.OperatorName,
    a.OperatorSurname = o.OperatorSurname,
    a.OperatorDesc = o.OperatorDesc
WHERE a.OperatorID = o.OperatorID

Nummer 2:
UPDATE Access AS a
LEFT JOIN Operator AS o
ON a.OperatorID = o.OperatorID
SET a.OperatorName = o.OperatorName,
    a.OperatorSurname = o.OperatorSurname,
    a.OperatorDesc = o.OperatorDesc
Beide bringen zwei Fehler nacheinander:
EOleException: Der aktuelle Provider unterstützt nicht die Wiedergabe mehrfacher Recordsets bei einer einzelnen Ausführung.
EDatabaseError: ADOQueryAccess: CommandText gibt keine Ergebnismenge zurück.

Edit: Das Problem ist gelöst:
Unter Verwendung von Nummer 2 und einem ADOQueryAccess.ExecSQL statt ADOQueryAccess.Open tuts nun.
Tja, das kommt eben davon wenn man Access verwendet
Vielen Dank nochmal an euch.
Make me a sandwich! - What? Make it yourself. - Sudo make me a sandwich! - Okay
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz