AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Werte in Query ändern und committen
Thema durchsuchen
Ansicht
Themen-Optionen

Werte in Query ändern und committen

Ein Thema von messie · begonnen am 6. Apr 2015 · letzter Beitrag vom 12. Apr 2015
Antwort Antwort
Seite 1 von 2  1 2      
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#1

Werte in Query ändern und committen

  Alt 6. Apr 2015, 18:34
Datenbank: Firebird • Version: 2.51 • Zugriff über: IBDAC
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
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#2

AW: Werte in Query ändern und committen

  Alt 6. Apr 2015, 18:41
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.
Gruß, Jo
  Mit Zitat antworten Zitat
Texas

Registriert seit: 15. Jul 2005
Ort: Laatzen
56 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

AW: Werte in Query ändern und committen

  Alt 6. Apr 2015, 18:54
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;
Michael
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Werte in Query ändern und committen

  Alt 6. Apr 2015, 19:00
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
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
  Mit Zitat antworten Zitat
Texas

Registriert seit: 15. Jul 2005
Ort: Laatzen
56 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

AW: Werte in Query ändern und committen

  Alt 6. Apr 2015, 19:15
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.
Michael
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Werte in Query ändern und committen

  Alt 6. Apr 2015, 20:01
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.
Markus Kinzler
  Mit Zitat antworten Zitat
Texas

Registriert seit: 15. Jul 2005
Ort: Laatzen
56 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#7

AW: Werte in Query ändern und committen

  Alt 6. Apr 2015, 20:37
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 ,
solange kann man auch messie bei seiner Frage nicht richtig weiterhelfen
Michael
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Werte in Query ändern und committen

  Alt 6. Apr 2015, 20:48
Zitat:
aber nicht wenn der Zeitstempel neu geschrieben werden soll oder?
Das macht aber Deine Lösung nicht.
Markus Kinzler
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#9

AW: Werte in Query ändern und committen

  Alt 7. Apr 2015, 05:31

Genau da schwimme ich wie gewöhnlich
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.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Werte in Query ändern und committen

  Alt 7. Apr 2015, 10:48
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 07:38 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