Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Wie Änderungen bei berechneten Feldern in Table schreiben? (https://www.delphipraxis.net/75230-wie-aenderungen-bei-berechneten-feldern-table-schreiben.html)

Drop Table 16. Aug 2006 10:44

Datenbank: Paradox • Zugriff über: TQuery -TDBGrid - TUpdateSQL

Wie Änderungen bei berechneten Feldern in Table schreiben?
 
Moijn,

ich bin gerade dabei mich in die Verwendung von SQL unter D5-prof einzuarbeiten, und bin jetzt an einem Punkt wo ich nicht mehr weiter weiß.

Ich habe eine Paradox-Tabelle, die u.a. Längen- / Breitengradfelder (Lat./Lon.)im Longinteger-Format enthält. Die Datensätze sollen per SQL in einem DBGrid angezeigt, und ggfs modifiziert (update/insert) werden können. Die Lat./Lon.-Spalten werden beim Ereignis OnCalcFields in Benutzer lesbare Formate konvertiert. DD.DDDDDD -> DD° MM.MMM'
Delphi-Quellcode:
procedure TWPViewDB.Query1CalcFields(DataSet: TDataSet);
begin
  Query1Lat.AsString := SingleCoordString(Query1.FieldByName('Latitude').AsFloat, True);
  Query1Lon.AsString := SingleCoordString(Query1.FieldByName('Longitude').AsFloat, False);
end;
Das funktioniert schonmal.

Im 2.Schritt habe ich eine UpdateSQL Komponente hinzugefügt, und in Query1 die entspr. Properties CachedUpdates und UpdateObject gesetzt.
Soweit so gut, ich kann jedes Feld mit Ausnahme der Lat/Lon Felder ändern, und die Änderungen werden auch in die Datenbank übernommen.

Im DBGrid sind jetzt allerdings berechneten Lat/Lon-Felder für Änderungen gesperrt, was nun :?:

Wie lassen sich diese Felder im Grid editieren.
Würde mich sehr freuen, wenn mir hier jemand helfen kann :P

Angel4585 16. Aug 2006 10:49

Re: Wie Änderungen bei berechneten Feldern in Table schreibe
 
nun ein berechnetes Feld - wie der Name schon sagt- berechnet sich selbst und kann daher denk ich nicht geänedert werden, da es in der Datenbank nicht existiert.
Oder hab ich dich jetzt nur falsch verstanden?

shmia 16. Aug 2006 10:59

Re: Wie Änderungen bei berechneten Feldern in Table schreibe
 
berechnete Felder sind hier die falsche Technik.
Du möchtest einzelne Felder vom internen Maschinenformat in ein menschenlesbares Format umwandeln; un zwar in beide Richtungen.
Für diese Aufgabe hat jedes Feld die Events: OnGetText und OnSetText.

Drop Table 16. Aug 2006 11:01

Re: Wie Änderungen bei berechneten Feldern in Table schreibe
 
Zitat:

Zitat von Angel4585
nun ein berechnetes Feld - wie der Name schon sagt- berechnet sich selbst und kann daher denk ich nicht geänedert werden, da es in der Datenbank nicht existiert.

Der neue Wert muss ja erst in das Gitter eingegeben werden können, bevor er anschließend reformatiert - und wie auch immer - in die Datenbank geschrieben werden kann. Zunächst habe ich also erstmal das Problem, den neuen Wert in das Gitter einzugeben.

Die Tabellenfelder heissen Latitude/Longitude, die berechneten im Gitter übrigens Lat/Lon.

Drop Table 16. Aug 2006 11:08

Re: Wie Änderungen bei berechneten Feldern in Table schreibe
 
Zitat:

Zitat von shmia
berechnete Felder sind hier die falsche Technik.
Für diese Aufgabe hat jedes Feld die Events: OnGetText und OnSetText.

Besten Dank für den Hinweis! Werde mich erstmal mit diesen neuen Stichwörtern zum Literaturstudium zurückziehen, und mich je nach Ergebnis mit dem Erfolg :mrgreen: , oder einer weiteren Frage melden :roll: .


Mille Grazie

shmia 16. Aug 2006 11:14

Re: Wie Änderungen bei berechneten Feldern in Table schreibe
 
Zitat:

Zitat von Drop Table
Werde mich erstmal mit diesen neuen Stichwörtern zum Literaturstudium zurückziehen

Fein, wenn dann alles geklappt hat, dann könntest du die Funktion SingleCoordString() und die Umkehrfunktion dazu in die Code-Library stellen (Längen-/Breitengrade lesbar formatieren).
Das könnten andere wahrscheinlich auch gut gebrauchen.

Drop Table 16. Aug 2006 14:31

Re: Wie Änderungen bei berechneten Feldern in Table schreibe
 
[quote="shmia"]
Zitat:

Zitat von Drop Table
Fein, wenn dann alles geklappt hat, dann könntest du die Funktion SingleCoordString() und die Umkehrfunktion dazu in die Code-Library stellen (Längen-/Breitengrade lesbar formatieren).

Done! :-D zumindest der erste Teil, die Rückkonvertierung kommt noch erstmal müssen die Daten ins Gitter.

Leider komme ich mit dem OnGetText Ereignis nicht weiter. Der Latitude-Typ in der DB ist ja Float, der Ergebnistyp meiner Funktion ist String, d.h. aus 47.5594 wird N 47° 33.564', bei der Wertzuweisung gibt es eine Exception weil ein Floatwert erwartet wird. Muß da eventuell noch eine Editmaske definiert werden? Wenn ja, wie muß diese aussehen? Es ist ja keine Formatänderung wie bei einem Datum oder Währung.

shmia 16. Aug 2006 14:51

Re: Wie Änderungen bei berechneten Feldern in Table schreibe
 
Zitat:

Zitat von Drop Table
Leider komme ich mit dem OnGetText Ereignis nicht weiter.

Hier ein Beispiel:
Delphi-Quellcode:
procedure TForm1.Feld4711GetText(Sender: TField; var Text: String; DisplayText: Boolean);
begin
   // man liest das Feld "Sender" aus
   // und schreibt die Textdarstellung in Variable "Text" rein
   if Sender.IsNull then
      Text := '[leer]'
   else
      Text := UmwandelnLaditudeInString(Sender.AsFloat, False);
end;

Drop Table 16. Aug 2006 15:46

Re: Wie Änderungen bei berechneten Feldern in Table schreibe
 
Zitat:

Zitat von shmia
Hier ein Beispiel:
[...]

Klasse! funktioniert Einwandfrei, und in beide Richtungen :hello:

Vielen Dank für die schnelle und kompetente Hilfe!


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:20 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