Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Feldupdate über 2 Datenbanken (https://www.delphipraxis.net/189358-feldupdate-ueber-2-datenbanken.html)

waldforest 4. Jun 2016 19:28

Datenbank: Firebird • Version: 2.5 • Zugriff über: Zeos

Feldupdate über 2 Datenbanken
 
Hallo,
ich möchte mit einem SQL Update ein Feld "Preis" in meiner Artikeltabelle mit den kalkulierten Preisen aus einer Exceltabelle updaten.

Ich habe jeweils eine Connection (Firebird über fbclient und die Excel über Zeos ADO) verbunden.
In beiden Tabellen ist das Verknüpfungsfeld die ArtikelNr.

Wie muss mein SQL Updatebefehl Datenbankübergreifend aussehen um die Preise zu übernehmen ?
Geht dies überhaupt über einen direkt Updatebefehl oder muss ich mir den Preis je Datensatz aus der der Excel holen, und in der Firebirdtabelle korrigieren ?

mkinzler 4. Jun 2016 19:34

AW: Feldabdate über 2 Datenbanken
 
Meinst Du wirklich Datenbanken oder eher Tabellen?

waldforest 4. Jun 2016 19:46

AW: Feldupdate über 2 Datenbanken
 
Die Inhalte stehen in den Tabellen, allerdings einmal in Firebird, und die zweite in Excel.


Aktuell sieht mein SQL wie folg aus, aber die Daten werden nicht übertargen.

Artikel ist die Tabelle in der Firebirddatenbank
Basisdaten ist die Tabelle in der Exceltabelle, con1 meine ADO Connection auf die Exceltabelle


Delphi-Quellcode:
update artikel a
set a.ARTIKEL_PREIS = (select b.NeuVK_Preis from Con1.[Basisdaten$] b where a.ARTIKELNR= b.ARTIKELNR)

haentschman 5. Jun 2016 04:11

AW: Feldupdate über 2 Datenbanken
 
Moin...8-)
Zitat:

oder muss ich mir den Preis je Datensatz aus der der Excel holen, und in der Firebirdtabelle korrigieren ?
...und exakt so wird es laufen. Mit einem SQL ist es nicht möglich. Selbst mit 2 Datenbanken unter einem Datenbankserver ist es, von DBMS zu DBMS unterschiedlich, mit diversen Schwierigkeiten / Einschränkungen verbunden.
Dafür baut man sich eine Zwischenschicht die beide DB (Excel als DB zu bezeichnen ist...Jehova :zwinker:) kennt und der das Programm die Befehle erteilt. (z.B. Übertrage die Daten der ID 42)

waldforest 5. Jun 2016 07:00

AW: Feldupdate über 2 Datenbanken
 
Hallo,
danke, ich hatte es befürchtet. Gut, dann gehe ich den Umweg über Querys und skipe die Datensätze durch.

@Gut Excel ist keine DB, wäre besser gewesen 2 unterschiedliche Datenquellen.

nahpets 5. Jun 2016 08:28

AW: Feldupdate über 2 Datenbanken
 
Also mein erster Ansatz wäre in der FireBird-DB eine Tabelle anzulegen, die mit der Exceltabelle übereinstimmt.

Diese Tabelle in der FireBird-DB ist normalerweise leer.

Dann wird ein Import gestartet, mit dem diese Tabelle mit den Exceldaten befüllt wird.

Anschließend kann das Update per SQL erfolgen und zum Schluss wird die Tabelle mit den Exceldaten wieder geleert.

Für die Datenübernahme aus Excel gäbe es mehrere Möglichkeiten.

Einmal per while not eof über die Tabelle laufen und jeweils die Daten feldweise in die FireBird-Tabelle kopieren.

Alternative wäre z. B.:
Wiederum while not EoF über die Exceltabelle und pro Datenzeile ein Insertstatement erstellen und dann die Insertstatement am Ende per "Block" in die FireBird-Tabelle "jagen".

jobo 5. Jun 2016 17:21

AW: Feldupdate über 2 Datenbanken
 
Hat nicht irgendein MS OLEDB Treiber so eine Möglichkeit, heterogene Datenquellen einzubinden? Das geht doch sogar direkt im SQL, also die Angabe der fremden Datenquelle.
Weiß leider grad nicht, was das war und wie es mit FB zusammengeht. War es der MSSQL Treiber selbst?


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:28 Uhr.

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