Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - String-Formatierung


D. Annies - Fr 23.08.13 08:07
Titel: String-Formatierung
Hi, Delpher,

warum gibt es zur Laufzeit hier eine Fehlermeldung?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
               if T_SL.FieldByName('gebdat').DataType = ftString then
               begin
                 Q_SL.SQL.Text := Format('select Ident_Nr, Name, Vorname, Klasse, Geschlecht, Gebdat, Telefon from "%s" ' +
                                         'where gebdat like "%s" ' +
                                         'order by Klasse, Name, Vorname', [TbName, TgMos]);
                 showmessage(Q_SL.SQL.Text);
                 Q_SL.Open;
                 praefix := format('%.02d', [TgMos]) + '_';    <--- an dieser Stelle. TgMos ist String
               end;


Die Fehlermeldung lautet: EConvertError Format '%02d' ungültig oder nicht kompatibel mit Argument

Danke für Hilfe,
Detlef


WasWeißDennIch - Fr 23.08.13 08:20

Die Antwort hast Du ja selbst gegeben: TgMos ist ein String, für %d brauchst Du aber eine ganze Zahl. Sollte TgMos eine solche darstellen, musst Du sie zuerst umwandeln.

Delphi-Quelltext
1:
praefix := format('%.02d_', [StrToInt(TgMos)]);                    


D. Annies - Fr 23.08.13 08:50

Danke, schon besser,

aber die Fehlermeldung ist noch da.

Ich versuche ja, z.B. den String 23.08. umzuwandeln und da hakt es noch.

Kannst du noch einmal weiter helfen?

LG, Detlef


WasWeißDennIch - Fr 23.08.13 08:55

Du hast da ein Datum ohne Jahresangabe, wenn ich das richtig sehe. Was soll denn am Ende herauskommen? Suchst Du evtl. eher FormatDateTime [http://docwiki.embarcadero.com/Libraries/XE3/de/System.SysUtils.FormatDateTime]?


Gammatester - Fr 23.08.13 08:59

user profile iconD. Annies hat folgendes geschrieben Zum zitierten Posting springen:
Ich versuche ja, z.B. den String 23.08. umzuwandeln
Was ist das? Ein Datum? Wenn es 23.08 wäre, ist eh StrToInt völlig ungeeignet. Nimm StrToFloat (aber dann kannst Du eigentlich gleich FormatFloat benutzen). Wenn der Punkt hinter der 8 kein Zufall/Artefakt ist, wirst Du auch dann wahrscheinlich Probleme haben.


jaenicke - Fr 23.08.13 09:49

user profile iconD. Annies hat folgendes geschrieben Zum zitierten Posting springen:
Ich versuche ja, z.B. den String 23.08. umzuwandeln und da hakt es noch.
Worin denn umzuwandeln? In einen Integerwert? Suchst du vielleicht DayOf?
http://docwiki.embarcadero.com/Libraries/XE4/de/System.DateUtils.DayOf

Und woher kommt der String eigentlich? Wenn du es wie user profile iconWasWeißDennIch meinte als String brauchst, kannst du das nicht gleich so formatieren?


D. Annies - Fr 23.08.13 11:57

Hi,

ich will den Geburtstag einer Person erkennen können, also unabhängig vom Jahr.

Bisher hatte ich natürlich auch den Datentyp Date dafür vorgesehen. Aber meine
Schule hat mal wieder "professionell" [ha, ha] rumgebastelt und deshalb entstand
mein heutiges String-Problem.

LG, Detlef


jasocul - Fr 23.08.13 12:51

Meintest du vielleicht sowas?

Delphi-Quelltext
1:
2:
3:
  DecimalSeparator := '.'// Sonst bekommst du als Ergebnis ein Komma
  TgMos := '23.08';
  praefix := format('%2.2f', [StrToFloat(TgMos)]);

Ist nur ein Code-Fragment. Du solltest natürlich hinterher den DecimalSeparator wieder auf den richtigen Wert setzen.


D. Annies - Fr 23.08.13 14:44

Hi, Delpher,

einmal festhalten: ich habe jetzt geprüft, wo die Variable praefix im Prg vorkommt: nur in dieser
Prozedur! Ich habe sie gelöscht und gut war's. :oops:

So kann's gehen. Danke (mal wieder) für eure Mühe

Detlef


WasWeißDennIch - Fr 23.08.13 14:47

user profile iconD. Annies hat folgendes geschrieben Zum zitierten Posting springen:
ich will den Geburtstag einer Person erkennen können, also unabhängig vom Jahr.

Je nach DBMS könnte man dazu aber dessen Funktionen nutzen, in Pseudo-SQL etwa so:

SQL-Anweisung
1:
2:
3:
4:
5:
6:
7:
8:
SELECT
  FeldListe
FROM
  Tabelle
WHERE
  MONTH(GebDatum) = CURRENT_MONTH
AND
  DAY(GebDatum) = CURRENT_DAY

Ob es die Funktionen gibt und wie sie ggf. heißen, hängt aber wie gesagt von der verwendeten Datenbank ab.