![]() |
Datenbank: Advantage • Version: 9 • Zugriff über: SQL
Advantage, SQL und BatchMove
Hallo Zusammen,
ich bin dabei ein Programm von Paradox/BDE auf Advantage umzustellen. Ich habe über die Suchfunktion keine Hinweise auf das funktionieren von Batchmove in Verbindung mit einer SQL-Abfrage gefunden. Ich möchte das Ergebnis einer SQL-Abfrage mit BatchMove+batAppendUpdate in eine Tabelle schreiben. Leider läßt sich der AdsBatchMove.Soure die AdsQuery nicht zuordnen. Unter der BDE hat das funktioniert. Es werden von AdsBatchMove.Soure nur TAdsTable akzeptiert. Hat jemand einen Vorschlag? |
Re: Advantage, SQL und BatchMove
Kopiere die Daten manuell von einem DataSets in das andere
|
Re: Advantage, SQL und BatchMove
daran habe ich auch schon gedacht.
Ich müßte aber vorher bei jedem Datensatz prüfen ob er schon in der Zieltabelle enthalten ist. Diesen dann löschen und den neuen eintragen. Ich denke da ist die Datenbank etwas beschäftigt. Oder gibt es dafür einen SQL-Befehl der das erledigen kann? |
Re: Advantage, SQL und BatchMove
Statt zu Löschen, könntest du auch ändern
|
Re: Advantage, SQL und BatchMove
Hallo,
Zitat:
![]() Tobias |
Re: Advantage, SQL und BatchMove
jetzt habe ich mich mit dem Merge Befehl intensiv beschäftigt und auch im Internet nach Beispielen gesucht. Meiner Meinung nach müßte folgender Befehl funktionieren
Delphi-Quellcode:
tut er aber nicht. Der Fehler muß in der Definition von
MERGE AdsTabZiel AS ta USING AdsTabQuelle AS tb ON ( ta.Index = tb.Index)
WHEN NOT MATCHED THEN INSERT (Index , Name) VALUES (tb.Index+ tb.Name) WHEN MATCHED THEN UPDATE SET ta.Index = tb.Index WHEN NOT MATCHED THEN INSERT (Index , Name) VALUES (tb.Index+ tb.Name) WHEN NOT MATCHED THEN INSERT VALUES (tb.Index+ tb.Name) WHEN NOT MATCHED THEN INSERT (tb.Index+ tb.Name) liegen. Alle drei Varianten gehen nicht Was mache ich falsch? |
Re: Advantage, SQL und BatchMove
Zitat:
SQL-Code:
übergibst dann aber im Values Teil nur einen Wert
INSERT (Index , Name)
SQL-Code:
Wenn Index und Name in 2 Felder sollen, dann müsste das so aussehen
(tb.Index+ tb.Name)
SQL-Code:
und insgesamt dann so
(tb.Index, tb.Name)
SQL-Code:
Wobei ich noch denke, dass die Update Anweisung
MERGE AdsTabZiel AS ta USING AdsTabQuelle AS tb ON ( ta.Index = tb.Index)
WHEN NOT MATCHED THEN INSERT (Index , Name) VALUES (tb.Index, tb.Name) WHEN MATCHED THEN UPDATE SET ta.Index = tb.Index
SQL-Code:
heissen sollte oder? Das ist aber eine inhaltliche Sache und sollte mit der Ausführbarkeit der gesamten Anweisung nichts zu tun haben.
UPDATE SET ta.Name = tb.Name
Tobias |
Re: Advantage, SQL und BatchMove
Hallo Tobias,
danke für Deine detaillierte Erklärung. Mein Beispiel funktioniert leider trotzdem nicht. Bin fast verzweifelt. Ich wollte mein Beipiel einfach gestalten und habe die Feldnamen Index und Name verwendet. Dann bin ich darauf gekommen, dass man nie einen Feldnamen mit Index und Name verwenden darf. Nachdem ich die Felder umbenannt habe funktioniert Deine berichtigte Version. |
Re: Advantage, SQL und BatchMove
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:50 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-2025 by Thomas Breitkreuz