AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Advantage, SQL und BatchMove

Advantage, SQL und BatchMove

Ein Thema von oldie · begonnen am 28. Nov 2008 · letzter Beitrag vom 1. Dez 2008
Antwort Antwort
oldie

Registriert seit: 18. Jul 2006
36 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

Advantage, SQL und BatchMove

  Alt 28. Nov 2008, 20:32
Datenbank: Advantage • Version: 9 • Zugriff über: SQL
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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Advantage, SQL und BatchMove

  Alt 28. Nov 2008, 20:35
Kopiere die Daten manuell von einem DataSets in das andere
Markus Kinzler
  Mit Zitat antworten Zitat
oldie

Registriert seit: 18. Jul 2006
36 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

Re: Advantage, SQL und BatchMove

  Alt 28. Nov 2008, 21:18
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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Advantage, SQL und BatchMove

  Alt 28. Nov 2008, 21:38
Statt zu Löschen, könntest du auch ändern
Markus Kinzler
  Mit Zitat antworten Zitat
Leonard

Registriert seit: 12. Okt 2005
Ort: Lutherstadt Eisleben
64 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Advantage, SQL und BatchMove

  Alt 28. Nov 2008, 22:08
Hallo,

Zitat von oldie:
Oder gibt es dafür einen SQL-Befehl der das erledigen kann?
da du ja scheinbar die Version 9 des ADS verwendest, könnte dir der neue SQL Befehl merge weiterhelfen.

Tobias
Tobias
  Mit Zitat antworten Zitat
oldie

Registriert seit: 18. Jul 2006
36 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

Re: Advantage, SQL und BatchMove

  Alt 30. Nov 2008, 16:55
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:
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
tut er aber nicht. Der Fehler muß in der Definition von

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?
  Mit Zitat antworten Zitat
Leonard

Registriert seit: 12. Okt 2005
Ort: Lutherstadt Eisleben
64 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Advantage, SQL und BatchMove

  Alt 1. Dez 2008, 08:54
Zitat von oldie:

Delphi-Quellcode:
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
In der Insert Anweisung sprichst du die Felder Index und Name an
INSERT (Index , Name) übergibst dann aber im Values Teil nur einen Wert
(tb.Index+ tb.Name) Wenn Index und Name in 2 Felder sollen, dann müsste das so aussehen
(tb.Index, tb.Name) und insgesamt dann so
SQL-Code:
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
Wobei ich noch denke, dass die Update Anweisung
UPDATE SET ta.Name = tb.Name heissen sollte oder? Das ist aber eine inhaltliche Sache und sollte mit der Ausführbarkeit der gesamten Anweisung nichts zu tun haben.

Tobias
Tobias
  Mit Zitat antworten Zitat
oldie

Registriert seit: 18. Jul 2006
36 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

Re: Advantage, SQL und BatchMove

  Alt 1. Dez 2008, 18:46
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.
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
674 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Advantage, SQL und BatchMove

  Alt 1. Dez 2008, 20:05
Zitat von oldie:
habe die Feldnamen Index und Name verwendet
Feldnamen, die reservierten Wörtern entsprechen, packt man in Quotes "Index" oder [Index]
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 09:40 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