Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL: Update aus zweiter Liste (https://www.delphipraxis.net/124310-sql-update-aus-zweiter-liste.html)

alphaflight83 18. Nov 2008 14:42

Datenbank: Access • Zugriff über: ADO/SQL

SQL: Update aus zweiter Liste
 
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. :gruebel:
Wäre schön wenn mir jemand helfen könnte.

DeddyH 18. Nov 2008 17:12

Re: SQL: Update aus zweiter Liste
 
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.

omata 18. Nov 2008 19:49

Re: SQL: Update aus zweiter Liste
 
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

alphaflight83 19. Nov 2008 11:09

Re: SQL: Update aus zweiter Liste
 
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 :stupid:
Vielen Dank nochmal an euch.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz