![]() |
*.dfm bedingt compilieren / TStringfield - TWidestringffield
Hallo Delphianer,
so je nach freien Zeitabschnitten versuche ich mich ja ab und an daran, meine bestehenden Apps auf D2010 zu konvertieren. Bisher läuft bei mir alles auf D2006 und IBX/Firebird. Da IBX und FB nicht mehr zusammen tun (ich weiss, es war nie unterstützt, aber mit D2006 hats noch funktioniert, warum jetzt nicht mehr?), habe ich ein wenig mit dbExpress rumprobiert. In D2006 kann ich FB-Tabellen auch mit dem Interbase-Treiber öffnen, und für D2010 habe ich mir den freien FB-Treiber von ![]() Allerdings habe ich in der Kombi das Problem, dass Stringfelder einmal als TStringfield, und einmal als TWidestringfield eingebaut werden. Gibt es eine Möglichkeit, diese unterschiedlichen Typen bedingt zu compilieren (würde ja aber auch die *.dfm betreffen). Oder kann ich irgendwie alle Felder auf TString- bzw. TWidestringfield zwingen (was mir in Versuchen bis jetzt nicht gelungen ist). Ich weiss, dass es noch andere Treiber gibt, aber das ist meist Löhnware, und da fehlen mir erst mal die zwingenden Argumente, um mich selbst und Chef zu überzeugen, Geld für etwas auszugeben, was im Moment mit D2006 wunderbar tut und wo ich selbst noch nicht weiss, wieviel mir ein Umstieg auf D2010 bringen würde (zumal es ja noch weitere Probleme mit dem Hochkonvertieren gibt, z.b. Reports). Gruß Rainer |
Re: *.dfm bedingt compilieren / TStringfield - TWidestringff
Hallo,
du benutzt also persistente Felder. Das würde ich einfach mal zu vermeiden zu versuchen. Unter D2010 ist halt jetzt jeder normale String ein Unicode-String. Heiko |
Re: *.dfm bedingt compilieren / TStringfield - TWidestringff
Zitat:
Jetzt aber zweifle ich daran, z.B. da sie auch eine Unicode-Migration einer InterBase Datenbank erschweren. Aus dem gleichen Grund wie oben: TStringField geht nicht mehr, es muss TWideStringField sein. Ein Workaround, der mir das Überarbeiten von ca. sechzig Datenmodulen ersparen würde, wäre herzlich willkommen... |
Re: *.dfm bedingt compilieren / TStringfield - TWidestringff
Zitat:
Ist doch nun mal das einfachste, wenn ich Daten bearbeiten will: Query-Clientdataset-Datasource-DBEdit. Alle DBEdit von Hand im Quellcode zuweisen? ORM? (bis jetzt hab ich noch nix gefunden, was mich überzeugt hat) Sonstiges? Gruß Rainer |
Re: *.dfm bedingt compilieren / TStringfield - TWidestringff
Evtl. ist es ja möglich, zwei verschiedene DFMs pflegen und bedingt einzubinden.
Delphi-Quellcode:
statt
{$IFDEF FOO}
{$R foo.dfm} {$ELSE} {$R bar.dfm} {ENDIF}
Delphi-Quellcode:
Das mal so als Gedanke, nicht getestet und keine Erfahrungen damit.
{$R *.dfm}
|
Re: *.dfm bedingt compilieren / TStringfield - TWidestringff
Den Gedanken mit unterschiedlichen *.dfm Files hatte ich auch schon kurz, aber das erscheint mir bei der Quelltextpflege zu umständlich, bei jeder kleinen Änderung muss ständig die zweite dfm mit geändert werden, und was bei der Formularvererbung dann passiert, ist auch eine Frage, die untersucht werden müsste.
Rainer |
Re: *.dfm bedingt compilieren / TStringfield - TWidestringff
Zitat:
Das Problem mit den persistenten Felder ist dieses "Alles oder nichts"-Verhalten. Man möchte vielleicht nur den Feldern ein DisplayLabel geben. Wenn man dann persistente Felder verwendet, dann sind die Feldlängen aller Stringfelder quasi zementiert. Werden dann die Stringfelder in der unterliegenden Datenbank verlängert spiegelt sich dies nicht in der Anwendung wieder. Man sollte also wann immer möglich auf persistente Felder verzichten und Anpassungen der Felder im Event AfterOpen vornehmen. Kleines Beispiel:
Delphi-Quellcode:
So kann man die Feldeigenschaften der unterliegenden Abfrage übernehmen und nur gezielt einige Eigenschaften verändern.
procedure TDataModule1.Query1AfterOpen(Dataset:TDataset);
begin (dataset.FieldByName('BPreis') as TNumericField).DisplayFormat := '##0.00'; dataset.FieldByName('BPreis').DisplayLabel := 'Brutto Preis'; end; Leider ist das nicht so bequem wie mit persistenten Feldern aber man kommt damit weiter. |
Re: *.dfm bedingt compilieren / TStringfield - TWidestringff
Das Problem beim zusammenklicken von Anwendungen mit DBEdits ist doch eher der, das alle Bezüge verloren gehen, wenn das Datenmodul mal nicht geladen ist. Mir geht das gehörig auf den Keks, und zwar so, das ich die Zuweisung wirklich per Hand im FormCreate bzw. FormActivate vornehme. Der Designer hilft mir, meine Formulare zu gestalten und datensensitive Steuerelemente mit Beispieldaten anzupassen, aber ich hüte mich davor, die Life-Einstellungen im Code beim Start als gegeben vorauszusetzen.
So sind z.B. alle Datenverbindungen beim Start per se (GExpert sei dank) geschlossen, alle Tabellen nicht verbunden usw. So kann ich kontrolliert eine Verbindung aufbauen und bei Problemen gezielt Aktionen starten. Die TDatasource ist im Bearbeitungsformular. Dann öffne ich die Tabellen und Queries kontrolliert. Wenn die Daten geladen sind, verbinde ich die Query mit dem TDatasource und fertig. Der Bezug vom TDatasource zu den Steuerelementen ist ja gegeben, da geht also nichts verloren. Ich würde also die Felder wirklich per Hand erzeugen. Das ist eine einmalige Arbeit und dauert in der Umsetzung 1-2 Tage. Hier sind dir die GExperts (Component to Code) vielleicht eine kleine Hilfe. Das Zusammenklicken von Anwendungen ist toll fürs Prototyping und auch für Anwendungen bis zu einer gewissen Komplexität. Und eben zum Designen von Formularen. Aber sonst sollte man wirklich alles per Hand machen. Gut, die persistenten Felder... die sind auch praktisch... :gruebel: :zwinker: ... und wenn Du nur die Stringfelder manuell erzeugst? Kopiere die Deklaration des persistenten Feldes in den Public-Bereich deines Datenmoduls, entferne den Eintrag aus der DFM und erzeuge diese Felder dann per Hand (im DatamoduleCreate). Das wäre für den Rest der Anwendung völlig transparent und Du reduzierst gleichzeitig den Aufwand auf ein Minimum. Da reicht schon eine projektweite Suche nach 'TStringField'... |
Re: *.dfm bedingt compilieren / TStringfield - TWidestringff
Zitat:
|
Re: *.dfm bedingt compilieren / TStringfield - TWidestringff
Zitat:
Viele Grüße, |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:57 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