Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   ADOQuery SQL Parameter keine Übergabe (https://www.delphipraxis.net/158895-adoquery-sql-parameter-keine-uebergabe.html)

Sir Rufo 7. Mär 2011 16:56

AW: ADOQuery SQL Parameter keine Übergabe
 
Zitat:

Zitat von DeddyH (Beitrag 1086573)
Und laut Hilfe sollte man dafür wohl ein TADOCommand statt einer Query benutzen.

Es sei denn er möchte da auch mit Parametern arbeiten :mrgreen:

DeddyH 7. Mär 2011 17:05

AW: ADOQuery SQL Parameter keine Übergabe
 
Ich mache nix mit ADO, aber
Zitat:

TADOCommand führt den in der Eigenschaft CommandText angegebenen Befehl aus. Es kann immer nur ein Befehl aufgerufen werden. Die Parameter des Befehls werden in der Eigenschaft Parameters übergeben. Die eigentliche Ausführung wird von Methode Execute durchgeführt.
Parameters scheint es ja zu geben.

Sir Rufo 7. Mär 2011 17:12

AW: ADOQuery SQL Parameter keine Übergabe
 
Zitat:

Zitat von DeddyH (Beitrag 1086577)
Ich mache nix mit ADO, aber
Zitat:

TADOCommand führt den in der Eigenschaft CommandText angegebenen Befehl aus. Es kann immer nur ein Befehl aufgerufen werden. Die Parameter des Befehls werden in der Eigenschaft Parameters übergeben. Die eigentliche Ausführung wird von Methode Execute durchgeführt.
Parameters scheint es ja zu geben.

jo, stimmt ... habe ich mit
Delphi-Quellcode:
TADOConnection.Execute
verwechselt (Augen auf beim Eierkauf :mrgreen: )

daredd 7. Mär 2011 17:13

AW: ADOQuery SQL Parameter keine Übergabe
 
Das mit dem Update funktioniert ganz gut. Nun noch ein kleines Problem, in der Tabelle einen Tabelle sind Einkaufspreise gegeben. Ich muss nun in die neue Tabelle die berechnten Verkaufspreise übergeben.

Bis jetzt habe ich das hier:
Delphi-Quellcode:
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Update Warenbestand set products_price = :price');
ADOQuery1.Parameters.ParamByName('price').Value := FloatToStr(PreisKalkulieren(table1.FieldByName('EK_EUR').AsFloat));
ADOQuery1.ExecSQL;
Das Problem liegt auf der Hand, für jede Zeile in der Tabelle Warenbestand wird immer der selbe Preis-Wert ermittelt. Komm ich mit eine while not table1.Eof... table1.next weiter?

DeddyH 7. Mär 2011 17:27

AW: ADOQuery SQL Parameter keine Übergabe
 
Dann musst Du die alten Datensätze wohl durchgehen. Das bedeutet, dass das ADOCommand noch eine WHERE-Klausel benötigt, um den neuen Datensatz eindeutig zu identifizieren.

[edit] Es sei denn, der neue Preis wird immer gleich berechnet, dann kannst Du das auch per SQL in einem Rutsch machen. [/edit]

daredd 7. Mär 2011 18:02

AW: ADOQuery SQL Parameter keine Übergabe
 
Ich denke nicht, dass es so richtig ist. Hab mir das mal mit Where angeschaut und das query scheint nicht den nächsten Wert aus der Ausgangs-Tabelle zu ziehen.

Mit AdoTable sah das so aus:
Delphi-Quellcode:
while not table1.eof do
begin
table2.fieldbyname('products_price').AsFloat := CalcVerkaufsPreis(table1.fieldbyname('einkauf_price').AsFloat);
table2.post;
table1.next;
table2.next;
end;
Wo springt das Query mit Where auf die nächste Zeile in table1 ?

jobo 7. Mär 2011 18:08

AW: ADOQuery SQL Parameter keine Übergabe
 
Wenn ich das richtig verstanden habe, willst Du die Daten aus der neuen Tabelle updaten und dabei Werte aus der anderen, alten Tabelle nutzen?
Das Stichwort ist "correlated subquery" also korrelierte Unterabfrage.

Hier gibts ein schönes Beispiel, fast schon die passenden Felder, auf Deutsch und in Farbe :)
http://www.sql-und-xml.de/sql-tutori...er-zeilen.html

Unter "Beispiel" Punkt 6 dürfte das stehen, was Du brauchst.

EDIT: Hab Dein letztes Post übersehen, aber ich denke, Du kannst es mit einem einzigen update machen.
EDIT2: Dein Beispiel sieht sehr eigenartig aus. Tabelle 1 und Tabelle 2 werden überhaupt nicht nach irgendeinem Schlüssel "synchronisiert", das wär höchstens Glückssache, wenn das klappt

daredd 7. Mär 2011 18:10

AW: ADOQuery SQL Parameter keine Übergabe
 
jobo, danke für denk link... sieht vielversprechend aus! wenns klappt melde ich mich ))

jobo 7. Mär 2011 18:17

AW: ADOQuery SQL Parameter keine Übergabe
 
wenn's nicht klappt vermutlich erst recht ;)

daredd 7. Mär 2011 18:25

AW: ADOQuery SQL Parameter keine Übergabe
 
haha )) ... so hat geklappt, danke!
hier mal ein beispiel aus meinem code:

Delphi-Quellcode:
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('UPDATE Warenbestand As W INNER JOIN KOMSA As K On W.external_id = K.KOMSANUMMER SET W.products_weight = K.GEWICHT/1000');
ADOQuery1.ExecSQL;
Das mit dem Preis ist noch komplizierter, weil ich dort unterschiedliche prozent-kategorien haben...
gibts eigentlich so was wie ein if then in sql?


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:49 Uhr.
Seite 4 von 5   « Erste     234 5      

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