Entwickler-Ecke

Datenbanken - AsDate?


D. Annies - Mi 05.09.07 06:55
Titel: AsDate?
Hi, Delpher,

der Compiler meckert, wenn ich die neu angelegte Tabelle SyncTab füllen will:


Delphi-Quelltext
1:
2:
3:
4:
            TbSynctab.fieldbyname('WPK4NAME').asstring := TbSchueler.fieldbyname('WPK4NAME').asstring; 
            TbSynctab.fieldbyname('GESCHLECHT').asstring := TbSchueler.fieldbyname('GESCHLECHT').asstring;
            TbSynctab.fieldbyname('GEBDAT').asdate := TbSchueler.fieldbyname('GEBDAT').asdate;  // <- Fehler
            TbSynctab.fieldbyname('TELEFON').asstring := TbSchueler.fieldbyname('TELEFON').asstring;


Das Feld gebdat ist vom Datentyp date.
Wenn ich statt asdate asstring einsetze, geht es.
Muss die Zuweisung immer mit asstring erfolgen?

Dank für Hilfe,
Detlef


mkinzler - Mi 05.09.07 07:35

Wenn der zuzuweisende Typ identisch mit dem Zieltyp ist ist besser .Value zu nehmen:

Delphi-Quelltext
1:
TbSynctab.fieldbyname('GEBDAT').Value := TbSchueler.fieldbyname('GEBDAT').Value;                    


alzaimar - Mi 05.09.07 08:27

Ich habe schon in meinen Delphi-Anfängen aufgehört, an 'AsDate' auch nur zu denken, so viel unverständliche Probleme habe ich damit bekommen. Ich verwende nur noch 'AsDateTime' und bekomme damit weniger schlaflose Nächte. Zudem wachsen meine Kopfhaare wieder (da ich sie mir nicht mehr vor Wut ausreiße).


D. Annies - Mi 05.09.07 08:32

Danke, ihr zwei.

@[quote]markus: Sollte ich dann immer, auch wenn beide string sind .value nehmen?

Gruß, Detlef


mkinzler - Mi 05.09.07 08:39

Imho ja.


alzaimar - Mi 05.09.07 08:41

.Value ist ein Variant und wird kleinere Typkonvertierungen automatisch vornehmen. Wenn Du weisst, das die Feldtypen kompatibel sind, kannst Du auch gleich


Delphi-Quelltext
1:
DstTable['FieldName'] := SrcTable['OtherFieldName']                    

schreiben. Das ist imho hübscher. Aber bei Variants ist immer Vorsicht geboten, denn Zuweisungen inkompatibler Typen werden gnadenlos mit einer Exception bestraft. Auch sollte man Feldwerte vor der weiteren verarbeitung immer explizit in konkrete Typen (Integer, String, etc.) umwandeln, sonst fliegen einem die Exceptions nur so um die Ohren.


D. Annies - Mi 05.09.07 10:17

Nochmals vielen Dank für eure Erklärungen!
Detlef