AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi TField.Size zur Laufzeit anpassen ohne doppeltes Öffnen der Query
Thema durchsuchen
Ansicht
Themen-Optionen

TField.Size zur Laufzeit anpassen ohne doppeltes Öffnen der Query

Ein Thema von RSE · begonnen am 15. Feb 2013 · letzter Beitrag vom 20. Feb 2013
Antwort Antwort
Seite 2 von 2     12   
RSE

Registriert seit: 26. Mär 2010
254 Beiträge
 
Delphi XE Enterprise
 
#11

AW: TField.Size zur Laufzeit anpassen ohne doppeltes Öffnen der Query

  Alt 16. Feb 2013, 11:46
@Furtbichler: Das ist mal ein radikaler Ansatz, den werde ich definitiv am Montag testen und mich dann hier wieder melden. Es wird aber wohl gegen Feierabend werden, da der Vormittag bereits verplant ist und daraus meist neue dringende Aufgaben entstehen... Aber der Ansatz ist es auf alle Fälle Wert die Sache noch einmal anzufassen!

Danke und schönes Wochenende!
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."
  Mit Zitat antworten Zitat
RSE

Registriert seit: 26. Mär 2010
254 Beiträge
 
Delphi XE Enterprise
 
#12

AW: TField.Size zur Laufzeit anpassen ohne doppeltes Öffnen der Query

  Alt 19. Feb 2013, 11:50
Gestern hatte ich keine Zeit mehr diese Sache anzugehen. Soeben habe ich das Vorgehen etwas genauer unter die Lupe genommen und bin auf folgende Schwierigkeiten gestoßen:
  • Es gibt mehrere Referenzen auf die Instanz von T(String)Field: Einmal Query.Fields['MEINFELD'] und einmal die persistenten Objekte im Datenmodul (QueryMEINFELD). Beide müssten auf das neue Objekt umgebogen werden. Ich glaube auch, dass dann jedes mit diesem Feld verbundene datensensitive Steuerelement (wovon wir viele in vielen verschiedenen anderen Units haben) neu verbunden werden muss. Soweit ich mich erinnere, werden diese Verknüpfungen beim Instanzieren vorgenommen.
  • Es gibt einige Eigenschaften von TField, die bei der Aktion nicht verloren gehen dürfen. Dazu zählen z.B. die Ereignisse und DisplayLabel.
Den zweiten Punkt sehe ich als weniger kritisch an, vorausgesetzt die Assign-Methode ist ordentlich implementiert (das unterstelle ich bei diesen Klassen einfach mal). Allerdings ist der erste Punkt für mich ein Killerkriterium, das wird mir einfach zu heiß. Wahrscheinlich lauern auch noch mehr versteckte Fallen. Da das Programm bereits zum Tode verurteilt ist, werde ich diesen Weg nicht umsetzen, da er potenziell zu viel Arbeit macht und zu viele Fallen bereithält. Wir werden bis zum Tod des Programms die Umsetzung mit der Meldung behalten.

Trotzdem danke für die Idee.
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.351 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: TField.Size zur Laufzeit anpassen ohne doppeltes Öffnen der Query

  Alt 19. Feb 2013, 12:00
Hi,

IBObjects erstellt die Felder ja schon beim Prepare, nicht erst nach dem Öffnen.
So könnte man nach dem Prepare den Check durchführen.

U.U. den Select in eine Temporäre Query, Preparen und mit der richtigen Query vergleichen.

Frank
Frank Reim
  Mit Zitat antworten Zitat
RSE

Registriert seit: 26. Mär 2010
254 Beiträge
 
Delphi XE Enterprise
 
#14

AW: TField.Size zur Laufzeit anpassen ohne doppeltes Öffnen der Query

  Alt 19. Feb 2013, 16:30
Wie ich im ersten Beitrag schrieb, sind die FieldDefs, die die wahren Stringlängen aus der DB enthalten, erst nach dem Öffnen der Query verfügbar. Ich will die Query auch nicht zweimal öffnen - auch keine temporäre Query. Da ich das Ganze nicht für jede Query extra programmiere, sondern zentral für alle Queries, kenne ich auch das ausgeführte SQL nicht. Sollte dieses mal kein reines SELECT enthalten, wäre eine mehrfache Ausführung u.U. schlichtweg falsch.
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.351 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: TField.Size zur Laufzeit anpassen ohne doppeltes Öffnen der Query

  Alt 20. Feb 2013, 06:44
Wie ich im ersten Beitrag schrieb, sind die FieldDefs, die die wahren Stringlängen aus der DB enthalten, erst nach dem Öffnen der Query verfügbar.
Und wie ich schrieb, ist es bei IBObjects anders.
Setz doch einfach mal das Ereignis AfterPrepare.
Und dann eine Schleife durch die Felder:

Delphi-Quellcode:
for ...
  if qry.Fields[2].Size <> qry.FieldDefs[2].Size then
    qry.Fields[2].Size := qry.FieldDefs[2].Size;
Frank
[EDIT]
Kann natürlich Probleme geben, wenn das Active der Query auch schon zur Entwurfszeit gesetzt ist.
Aber das kann ich ja nicht wissen.
[/EDIT]
Frank Reim

Geändert von dataspider (20. Feb 2013 um 06:53 Uhr)
  Mit Zitat antworten Zitat
RSE

Registriert seit: 26. Mär 2010
254 Beiträge
 
Delphi XE Enterprise
 
#16

AW: TField.Size zur Laufzeit anpassen ohne doppeltes Öffnen der Query

  Alt 20. Feb 2013, 18:40
Dann ist das offenbar in einer neueren Version geändert worden. Wir haben eine etwas ältere, welche genau kann ich auf die Schnelle nicht sagen. Jedenfalls habe ich alle Ereignisse selbst ausprobiert mit unserer Version der IBObjects, bevor ich diesen Thread begonnen habe. Bei unserer Version sind sie im AfterPrepare noch nicht verfügbar.
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 02:46 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