Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Werte in Query ändern und committen (https://www.delphipraxis.net/184564-werte-query-aendern-und-committen.html)

messie 6. Apr 2015 18:34

Datenbank: Firebird • Version: 2.51 • Zugriff über: IBDAC

Werte in Query ändern und committen
 
Moin,

ich bin nach längerer Pause mal wieder mit meiner DB-Anwendung beschäftigt.

Ich habe eine Query, die mir Messdaten aus verschiedenen Tables einsammelt. Dazu gehört auch ein Zeitstempel.

Ich würde gerne die Anwendung so erweitern, dass die Messungen zu zeitlich unterschiedlichen Zeitpunkten partiell stattfinden können. Dazu müssten die bestehenden Daten eingelesen und ihr Zeitstempel verändert werden um Kopien und damit Redundanzen zu vermeiden. Die vorherige Messung würde damit Teil einer neueren Messung.

Vermutlich fehlt mir nur eine Kleinigkeit: ich kann die Werte in der Query nicht überschreiben, da ich nicht im Editiermodus bin.

Meine Frage: wie muss ich die Query konfigurieren damit ich geänderte Werte sicher in die DB zurück bekomme? Ich bin da ein wenig unsicher weil ich dort Daten seit 2006 zerschießen könnte.

Danke, Messie

jobo 6. Apr 2015 18:41

AW: Werte in Query ändern und committen
 
dataset.edit und Du kannst den Satz editieren.

Aber vielleicht ist das auch gar nicht das Problem. Du schreibst von mehren Quellen. Eine solche Query ist idR nicht editierbar, bzw. es ist nur die Kerntabelle einer Query editierbar.

Texas 6. Apr 2015 18:54

AW: Werte in Query ändern und committen
 
Als erste erst mal die daten sichern!

Ist die Query zum lesen oder schreibt sie in die DB ?
und
man kann über Parameter mit der Query arbeiten

zB query.sql.add(select * from Tabelle where Zeitstempel = :Zeit);
dann query.parambyname('Zeit').AsVariant := Now;
query.ExecSQL;

messie 6. Apr 2015 19:00

AW: Werte in Query ändern und committen
 
Zitat:

Zitat von jobo (Beitrag 1296391)
dataset.edit und Du kannst den Satz editieren.

Aber vielleicht ist das auch gar nicht das Problem. Du schreibst von mehren Quellen. Eine solche Query ist idR nicht editierbar, bzw. es ist nur die Kerntabelle einer Query editierbar.

Moin,

Genau da schwimme ich wie gewöhnlich :oops:
Was ist wie verknotet?

Wenn ich Dich richtig verstehe sammele ich mir in der Query die Indizes der entsprechenden Datensätze der Messdatentabelle ein und mache dann ein UPDATE der jeweiligen Sätze?

@Texas: ich gehe über ein Query.open dran. Das ist nur readonly. Kann ich mit einen ExecSQL auch direkt schreiben?

Grüße, Messie

Texas 6. Apr 2015 19:15

AW: Werte in Query ändern und committen
 
ExecSQL führt die Query neu aus und zwar mit dem Wert den man über den Parameter setzt.
kannst du mal den query.sql text zeigen. Bei query.open würde ich sagen das gelesen wird.

mkinzler 6. Apr 2015 20:01

AW: Werte in Query ändern und committen
 
Zitat:

Zitat von Texas (Beitrag 1296392)
zB query.sql.add(select * from Tabelle where Zeitstempel = :Zeit);

Aber nur wenn der Abfragestring in der Komponente vorher löeer warleer ist

Besser
query.sql.Text := 'select * from Tabelle where Zeitstempel = :Zeit';
[/QUOTE]
Zitat:

query.ExecSQL;
Hier wird aber ein Open benötigt.
Zitat:

ExecSQL führt die Query neu aus und zwar mit dem Wert den man über den Parameter setzt.
kannst du mal den query.sql text zeigen.
ExecSQL führt eine Abfrage aus, ohne das eine Ergebnismenge an den Client zurückübertragen wird. das ist bei Select wenig sinnvoll.
Zitat:

Bei query.open würde ich sagen das gelesen wird.
Was man bei einem select-Statement ja auch will.

Ob eine Ergebnismenge editierbar ist hängt von der Abfrage ab. Z.B. funktioniert das bei Joins ohne Nacharbeit nicht.

Texas 6. Apr 2015 20:37

AW: Werte in Query ändern und committen
 
Zitat:

Hier wird aber ein Open benötigt.
aber nicht wenn der Zeitstempel neu geschrieben werden soll oder?

Solange man nicht weiss was die Query eigentlich macht :roll:,
solange kann man auch messie bei seiner Frage nicht richtig weiterhelfen

mkinzler 6. Apr 2015 20:48

AW: Werte in Query ändern und committen
 
Zitat:

aber nicht wenn der Zeitstempel neu geschrieben werden soll oder?
Das macht aber Deine Lösung nicht.

jobo 7. Apr 2015 05:31

AW: Werte in Query ändern und committen
 
Zitat:

Zitat von messie (Beitrag 1296393)

Genau da schwimme ich wie gewöhnlich :oops:
Was ist wie verknotet?

Wenn ich Dich richtig verstehe ..

Also es geht primär nicht um mein Verständnis, sondern um Deins.
Wie sieht das alte System aus?
Wie soll das neue aussehen?
Soll neu und alt kompatibel sein? (Stichwort "..Daten bis 2006 zerschießen..")

Angenommen Du hast:
3 Tabellen ta, tb, tc mit Messdaten,
die Daten werden über ein Kriterium gejoint und ausgegeben Messung_ID
Teile dieser Daten sollen aktualisiert werden

Dann benötigst Du 3 Update Statements, die das je Tabelle durchführen.
Update ta set m1=.., m2=.. mn=.., zeitstempel=:zsneu where Messung_ID=:id;
Nach Bedarf ebenso für tb, tc.

Das wäre ein mögliches Vorgehen zur Korrektur "einer" Messung. Kann aber auch ganz anders gemacht werden, je nach Anforderung.

p80286 7. Apr 2015 10:48

AW: Werte in Query ändern und committen
 
Zitat:

Zitat von messie (Beitrag 1296390)
Ich würde gerne die Anwendung so erweitern, dass die Messungen zu zeitlich unterschiedlichen Zeitpunkten partiell stattfinden können. Dazu müssten die bestehenden Daten eingelesen und ihr Zeitstempel verändert werden um Kopien und damit Redundanzen zu vermeiden. Die vorherige Messung würde damit Teil einer neueren Messung.

Das kommt mir seehr seltsam vor. Du hast zu irgendeinem Zeitpunkt x einen Meßwert erhalten. Dieser Meßwert liegt mit der Zeitangabe in der Datenbank. Warum willst du an der Zeitangabe "drehen"?

Warum 3 Tabellen? Werte von drei Meßstellen?

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:32 Uhr.
Seite 1 von 2  1 2      

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