AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi *.dfm bedingt compilieren / TStringfield - TWidestringffield
Thema durchsuchen
Ansicht
Themen-Optionen

*.dfm bedingt compilieren / TStringfield - TWidestringffield

Ein Thema von Rainer Wolff · begonnen am 23. Mär 2010 · letzter Beitrag vom 27. Mär 2010
Antwort Antwort
Seite 1 von 2  1 2      
Rainer Wolff

Registriert seit: 25. Okt 2005
Ort: Bretten
321 Beiträge
 
Delphi 10.4 Sydney
 
#1

*.dfm bedingt compilieren / TStringfield - TWidestringffield

  Alt 23. Mär 2010, 08:47
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 http://groups.google.com/group/dbxfirebird geholt.

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
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: *.dfm bedingt compilieren / TStringfield - TWidestringff

  Alt 23. Mär 2010, 09:34
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
Heiko
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#3

Re: *.dfm bedingt compilieren / TStringfield - TWidestringff

  Alt 23. Mär 2010, 11:45
Zitat von hoika:
Hallo,

du benutzt also persistente Felder.
Das würde ich einfach mal zu vermeiden zu versuchen.
Sind persistente Felder auch schon ein Anti-Pattern ? ... Bisher fand ich dass ihre Vorteile die Nachteile überwogen.

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...
Michael Justin
  Mit Zitat antworten Zitat
Rainer Wolff

Registriert seit: 25. Okt 2005
Ort: Bretten
321 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: *.dfm bedingt compilieren / TStringfield - TWidestringff

  Alt 23. Mär 2010, 21:54
Zitat von hoika:
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
Wenn ich bis jetzt was besseres gefunden hätte...
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
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#5

Re: *.dfm bedingt compilieren / TStringfield - TWidestringff

  Alt 23. Mär 2010, 22:33
Evtl. ist es ja möglich, zwei verschiedene DFMs pflegen und bedingt einzubinden.
Delphi-Quellcode:
{$IFDEF FOO}
  {$R foo.dfm}
{$ELSE}
  {$R bar.dfm}
{ENDIF}
statt{$R *.dfm} Das mal so als Gedanke, nicht getestet und keine Erfahrungen damit.
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Rainer Wolff

Registriert seit: 25. Okt 2005
Ort: Bretten
321 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: *.dfm bedingt compilieren / TStringfield - TWidestringff

  Alt 23. Mär 2010, 22:55
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
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

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

Re: *.dfm bedingt compilieren / TStringfield - TWidestringff

  Alt 24. Mär 2010, 00:11
Zitat von mjustin:
Sind persistente Felder auch schon ein Anti-Pattern ? ... Bisher fand ich dass ihre Vorteile die Nachteile überwogen.
Irgendwie schon.
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:
procedure TDataModule1.Query1AfterOpen(Dataset:TDataset);
begin
  (dataset.FieldByName('BPreis') as TNumericField).DisplayFormat := '##0.00';
  dataset.FieldByName('BPreis').DisplayLabel := 'Brutto Preis';
end;
So kann man die Feldeigenschaften der unterliegenden Abfrage übernehmen und nur gezielt einige Eigenschaften verändern.
Leider ist das nicht so bequem wie mit persistenten Feldern aber man kommt damit weiter.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: *.dfm bedingt compilieren / TStringfield - TWidestringff

  Alt 24. Mär 2010, 08:00
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...

... 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'...
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Rainer Wolff

Registriert seit: 25. Okt 2005
Ort: Bretten
321 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: *.dfm bedingt compilieren / TStringfield - TWidestringff

  Alt 24. Mär 2010, 12:49
Zitat von alzaimar:
... 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'...
Das hört sich praktisch an, Danke für den Tipp
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#10

Re: *.dfm bedingt compilieren / TStringfield - TWidestringff

  Alt 27. Mär 2010, 07:55
Zitat von alzaimar:
... 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'...
Geht das? Ich denke, sobald man Felder manuell erzeugt, sind nur noch diese sichtbar und keines mehr. Darüber stolpert man zum Beispiel, wenn man ein kalkuliertes Feld benötigt. Allein dieses 'zu Fuss' erzeugen, geht nicht, alle anderen Felder des Datasets sind dann unsichtbar - man muss alle erzeugen, die benötigt werden. (Also entweder alle persistent, oder alle selbst erzeugen). Oder ist das in neueren Delphi Versionen geändert worden?

Viele Grüße,
Michael Justin
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:54 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