![]() |
Datenbank: Firebird • Version: 2.1 • Zugriff über: FIBPlus 6.9.5
Lookup-Field Size bei Strings automatisch anpassen
... wie versprochen das nächste Problemchen:
wenn ich nun meine Lookup-Felder erstellt habe, wie kann ich erreichen, dass Size bei Strings die gleiche Größe hat wie in der Lookup-Quelle? Gibt es einen Automatismus bzw. muss ich Ihn selber implementieren oder reicht es, den Wert manuell zu setzen (hinsichtlich späterer Datenbankanpassungen und der Softwarepflege ...)? Danke für Eure Tipps. Grüße Martin |
Re: Lookup-Field Size bei Strings automatisch anpassen
Wie meinst du das welche Strings?
|
Re: Lookup-Field Size bei Strings automatisch anpassen
Ich habe in einem Datensatz ein Fremdschlüssel (ID, Integer), der auf
eine andere Tabelle verweist. Aus dieser Tabelle hole ich mir ja per Lookup sagen wir mal den Namen des Mitarbeiters. Beim Erstellen des Feldes zur Designtime muss ich ja eine Länge (Size) angeben, damit irgendetwas ausgegeben wird, wenn ich dieses LookupFeld in einem DBGrid anzeigen lassen möchte. Der Wert TFIBStringField.Size wird also manuell auf einen Wert gesetzt, der nicht unbedingt der Feldgröße des Originals entsprechen muss. Gibt es hier eine Art Automatik, dass immer die Größe des Feldes aus der Original-Tabelle kommt? Grüße Martin |
Re: Lookup-Field Size bei Strings automatisch anpassen
Hallo nochmal,
noch einigen Tests habe ich folgendes herausbekommen: Ändert man in der Datenbank die Größe von Stringfeldern, so wird deren Änderung automatisch von den FIBPlus-TField-Abkömmlingen beim Aufrufen des Datasets in die Fields übernommen. Warum klappt das nicht bei den LookUp-Feldern? Grüße Martin |
Re: Lookup-Field Size bei Strings automatisch anpassen
Es gibt "automatische" Felder und persistente Felder.
Automatische Felder werden aufgrund der unterliegenden Datenmenge erzeugt (Feldname, -typ, länge, Nachkommastellen, ...) . Persistente Felder werden vom Programmierer zur Entwicklungszeit angelegt. Leider verfolgt die VCL eine Alles-oder-Nichts-Strategie. Entweder werden alle Felder automatisch erzeugt oder es gibt nur persistente Felder. Sobald du ein Lookupfield willst werden persistente Felder gebraucht. Sind persistente Felder erst einmal angelegt, dann werden sie nicht mehr an Änderungen der unterliegenden Datenmenge angepasst. Das kann gemeine Probleme nach sich ziehen, wenn z.B. ein Datenbankfeld verlängert wird, aber die Anwendung dies ignoriert. => es gibt keinen Automatismus bezüglich der Lookupfelder. Du kannst ja versuchen, im Event AfterOpen ein Lookupfield aus dem Code heraus hinzuzufügen. Nicht ganz einfach, denn die VCL zickt da etwas. |
Re: Lookup-Field Size bei Strings automatisch anpassen
Hallo und vielen Dank für die Antwort,
so wie es scheint, werden bei FIBPlus die persistenten Felder bei Änderungen in der Größe (Strings als Domain) automatisch angepasst. Allerdings nicht bei LookUp-Feldern. Arbeitet man nur mit persistenten Feldern, habe ich das Problem so umgangen (im OnCreate-Ereignis des Datasets):
Delphi-Quellcode:
Bei automatischen Felder muss zuerst das Dataset geöffnet werden
pFIBDataSet1TEAM_LEADER_.Size := pFIBDataSet2FULL_NAME.Size; // LookUp-Feld.Size anpassen
(auch im OnCreate-Ereignis des Datasets), da sonst der Feldname nicht bekannt ist:
Delphi-Quellcode:
Allerdings scheint es bei Firebird problematisch zu sein, nachträglich
pFIBDataSet2.Open;
pFIBDataSet1TEAM_LEADER_.Size:=pFIBDataSet2.FieldByName('FULL_NAME').Size; pFIBDataSet12.Close; Felder (in der Breite) zu verändern, wenn es Verknüpfungen innerhalb der DB gibt. - Kann auch sein das es am EMS SQL Manager liegt ... Grüße Martin |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:43 Uhr. |
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-2025 by Thomas Breitkreuz