Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL: JOIN und UPDATE (https://www.delphipraxis.net/131804-sql-join-und-update.html)

mkinzler 2. Apr 2009 17:59

Re: SQL: JOIN und UPDATE
 
Nein, weil bei einem modernen DBMS ein TTable ein Query mit der Abfrage
SQL-Code:
select * from <Tabelle>;
ist.

hoika 2. Apr 2009 19:26

Re: SQL: JOIN und UPDATE
 
Hallo ts-d,

ich meinte, dass du mindestens zum Schreiben eine TTable,
und keine TQuery benutzen sollst.


Heiko

mkinzler 2. Apr 2009 19:28

Re: SQL: JOIN und UPDATE
 
@Heiko: Warum? Sehe da keine Notwendigkeit

hoika 2. Apr 2009 19:32

Re: SQL: JOIN und UPDATE
 
Hallo minzler,

siehe #13

Wir reden wie gesagt von Paradox.

TQuery: lahm
TTable: schnell

Naja, meistens.


Heiko

mkinzler 2. Apr 2009 19:37

Re: SQL: JOIN und UPDATE
 
Ich habe mich durch den Verlauf der Diskussion auf eine falsche Fährte begeben. Bei Patadox wird ja der Query auf Tables abgebildet. Bei "richtigen" DBMS umgekehrt.

ts-d 3. Apr 2009 07:12

Re: SQL: JOIN und UPDATE
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich will's noch nicht ganz wahr haben. Die Krücke Access schafft's, und Delphi / Paradox nicht???

Testweise habe ich Delphi mal eine Aktualisierungsabfrage mit JOIN angelegt. Sie funktioniert:

UPDATE _auftragpos INNER JOIN _Rabatte ON [_auftragpos].Auftrnum = [_Rabatte].Auftrnum and [_auftragpos].Pos_h = [_Rabatte].Pos_h SET [_auftragpos].RABATTSATZ = [_Rabatte].[Rabattsatz] WHERE [_auftragpos].[pos_u] = 0;

wobei Tabelle 1 = auftragpos.db (Paradoxtabelle in Access importiert) und
Tabelle 2 = rabatte.db (ebenso)

und in Tabelle 2 Auftrnum + pos_h eindeutige Datensätze darstellen,
während in Tabelle 1 das nicht der Fall ist, weil die Unterpositionen noch mit dabei sind (daher die WHERE-Klausel "WHERE pos_u = o").

Ich schicke mal die Dateien mit (kleiner Auszug von ein paar Datensätzen):

1. Datenbank Access mit beiden Tabellen und der funktionierenden Abfrage
2. beide Tabellen im Paradoxformat

mkinzler 3. Apr 2009 07:17

Re: SQL: JOIN und UPDATE
 
Paradox ist halt total veraltet! Die BDE ist auch schon seit D6(!) als verlatet bezeichnet und wird seither nicht mehr weiterentwickelt. Nimm was gescheites und es geht. ( Access würde ich auch nicht verwenden)

Bernhard Geyer 3. Apr 2009 07:56

Re: SQL: JOIN und UPDATE
 
Zitat:

Zitat von ts-d
Ich will's noch nicht ganz wahr haben. Die Krücke Access schafft's, und Delphi / Paradox nicht???

Wenn Access eine Krücke (benötigt) dann benötigt man für Paradox einen Rollstuhl. Auch wenn Access keine optimale Engine darstellt, ist es doch um Welten bessser als Paradox. Paradox hat sein (merkbaren) Wurzeln in den 80ern und ist damit eher schon ein Dinosaurier der noch eingesetzten SW.

ts-d 3. Apr 2009 12:40

Re: SQL: JOIN und UPDATE
 
Ich habe jetzt selber eine Lösung gefunden, wenn auch keine sonderlich geniale - aber sie funktioniert und braucht nur ca. 10 Sekunden gegenüber der vorgeschlagenen, die hochgerechnet 4,5 Stunden braucht (500 Datensätze pro Minute bei ca. 118.000 Datensätzen !!!):

Durch SELECT eine Abfrage erzeugen, die die Werte beider Tabellen zusammenfasst:

SQL-Code:
SELECT

a.Auftrnum,
a.positnum,
a.menge,
a.modellnum,
a.ARTIKELBESCHR,
a.LPREISMSTOFF,
a.DIFFSOLLPREIS,
a.ZUBEHOER,
a.BESTAETPREIS,
a.EPREISRAB,
a.fz1,
a.mzbh,
a.bestpreis,
a.fz,
a.rabatt,
a.BETRAG,
a.RABATTBETRAG,
a.pos_h,
a.pos_u,
b.rabattsatz

FROM "auftragpos.db" a
   INNER JOIN "Rabatte.db" b
   ON a.Auftrnum = b.Auftrnum
   and a.Pos_h = b.Pos_h

WHERE a.pos_u = 0
Dieser Selectbefehl ist zu lang für SQL.Text := ... usw.
Daher mache ich's mit dem Befehl
Abfrage.SQL.LoadFromFile(Verzeichnis + Dateiname);

Dann erzeuge ich eine neue Instanz Batchmove, wähle die eben erzeugte Abfrage als Source und lasse den Batchmove über die Option batCopy (Mode) eine neue Tabelle erzeugen, die dann genau so aussieht, wie ich sie haben möchte.

[edit=mkinzler]SQL-Tag eingefügt Mfg, mkinzler[/edit]
Danke schön - ich lern's auch noch, vg Thomas


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:20 Uhr.
Seite 3 von 3     123   

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