AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Lookup-Field Size bei Strings automatisch anpassen
Thema durchsuchen
Ansicht
Themen-Optionen

Lookup-Field Size bei Strings automatisch anpassen

Ein Thema von spechto · begonnen am 23. Jun 2009 · letzter Beitrag vom 24. Jun 2009
Antwort Antwort
spechto

Registriert seit: 20. Jun 2009
28 Beiträge
 
Delphi 2007 Professional
 
#1

Lookup-Field Size bei Strings automatisch anpassen

  Alt 23. Jun 2009, 00:52
Datenbank: Firebird • Version: 2.1 • Zugriff über: FIBPlus 6.9.5
... 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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Lookup-Field Size bei Strings automatisch anpassen

  Alt 23. Jun 2009, 05:35
Wie meinst du das welche Strings?
Markus Kinzler
  Mit Zitat antworten Zitat
spechto

Registriert seit: 20. Jun 2009
28 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Lookup-Field Size bei Strings automatisch anpassen

  Alt 23. Jun 2009, 07:31
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
  Mit Zitat antworten Zitat
spechto

Registriert seit: 20. Jun 2009
28 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Lookup-Field Size bei Strings automatisch anpassen

  Alt 24. Jun 2009, 00:19
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
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Lookup-Field Size bei Strings automatisch anpassen

  Alt 24. Jun 2009, 02:00
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.
fork me on Github
  Mit Zitat antworten Zitat
spechto

Registriert seit: 20. Jun 2009
28 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Lookup-Field Size bei Strings automatisch anpassen

  Alt 24. Jun 2009, 07:39
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):
  pFIBDataSet1TEAM_LEADER_.Size := pFIBDataSet2FULL_NAME.Size; // LookUp-Feld.Size anpassen Bei automatischen Felder muss zuerst das Dataset geöffnet werden
(auch im OnCreate-Ereignis des Datasets), da sonst der Feldname nicht
bekannt ist:
Delphi-Quellcode:
  pFIBDataSet2.Open;
  pFIBDataSet1TEAM_LEADER_.Size:=pFIBDataSet2.FieldByName('FULL_NAME').Size;
  pFIBDataSet12.Close;
Allerdings scheint es bei Firebird problematisch zu sein, nachträglich
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
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:49 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