AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Problem mit Abfangen von ner Datumseingabe
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Abfangen von ner Datumseingabe

Ein Thema von The_Tremendous · begonnen am 3. Jun 2005 · letzter Beitrag vom 5. Jun 2005
Antwort Antwort
Seite 1 von 2  1 2      
The_Tremendous

Registriert seit: 10. Nov 2004
65 Beiträge
 
#1

Problem mit Abfangen von ner Datumseingabe

  Alt 3. Jun 2005, 14:09
Hi habe aktuelles Problem:

Ich möchte 3 Arten Datum einlesen lassen können:
- 1.1.2005
- 2005-01-01
- 1. Januar 2005


Das Erste ist mit der Funktion StrToDate kein Problem. Aber die anderen werden von der Funktion nicht akzeptiert. Wie kann ich das Problem lösen??


Delphi-Quellcode:
procedure TfrmDatum.BitBtn1Click(Sender: TObject);
begin
  try
   EinleseDatum := editDatumEingabe.Text;
   Datum:=StrToDate(EinleseDatum);
   // wenns nicht zu except springt, ist alles in ordnung
   lbltest.Caption := DateToStr(Datum);
  except
   // der string war keine gültige Datumseingabe
   editDatumEingabe.Text := '';
   ShowMessage('Der Eingegebene Wert ist kein Zulässiges Datum! Bitte geben Sie ein gültiges Datum ein');
  end;
end;
Gruß The_Tremendous
  Mit Zitat antworten Zitat
Benutzerbild von XHelp
XHelp

Registriert seit: 12. Jul 2004
Ort: Duisburg
172 Beiträge
 
Delphi 6 Enterprise
 
#2

Re: Problem mit Abfangen von ner Datumseingabe

  Alt 3. Jun 2005, 14:35
Ich weiss nicht, ob man das wie bei php mit 1. Januar 2005 machen kann...
vielleicht hilft dir ein parser:
Du guckst, was in EinleseDatum ist:
wenn in EinleseDatum zwei punkte sind, dann ist es 1.1.2005 und du kannst ganz normal StrToDate machen,
wenn zwei '-' da sind, dann ist es 2005-01-01, du kannst dann einzelne zahlen rauslesen und in 1.1.2005 umwandeln,
wenn in EinleseDatum leerzeichen (oder 1 punkt und buchstaben) ist, dann kannst du es auch manuel in 1.1.2005 umwandeln...
Alex
Von allen Dingen die mir verloren gegangen,
hab ich am meisten an meinem Verstand gehangen
  Mit Zitat antworten Zitat
The_Tremendous

Registriert seit: 10. Nov 2004
65 Beiträge
 
#3

Re: Problem mit Abfangen von ner Datumseingabe

  Alt 3. Jun 2005, 14:50
Das wäre auch eine Idee. Ich habe leider nur keine Ahnung, wie ich nen String nach 2 Minuszeichen durchsuchen kann. Bin halt noch ein Anfänger!!

Wäre gut wenn ich da noch Hilfe bekommen könnte.

Gruß. The Tremendous
  Mit Zitat antworten Zitat
Benutzerbild von XHelp
XHelp

Registriert seit: 12. Jul 2004
Ort: Duisburg
172 Beiträge
 
Delphi 6 Enterprise
 
#4

Re: Problem mit Abfangen von ner Datumseingabe

  Alt 3. Jun 2005, 15:15
da ist dein beispiel:

Delphi-Quellcode:
function TForm1.pars(s:string):TDate;
var
  i,i2:integer;
  s1,s2:string;
begin
if (pos('.',s)>0) and (pos(' ',s)<=0) then begin
  //wenn es 01.01.2005 ist
  result:=StrToDate(s);
end;
if (pos('-',s)>0) then begin
  //wenn es 2005-01-01 ist
  i:=pos('-',s);
  s1:=copy(s,1,i-1);
  Delete(s,1,i);
  i:=pos('-',s);
  s2:=copy(s,1,i-1);
  Delete(s,1,i);
  result:=StrToDate(s + '.' + s2 + '.' + s1);
end;
if (pos('.',s)>0) and (pos(' ',s)>0) then begin
  //wenn es 1. Januar 2005 ist
  i:=pos(' ',s);
  s1:=Copy(s,1,i-2);
  Delete(s,1,i);
  i:=pos(' ',s);
  s2:=Copy(s,1,i-1);
  Delete(s,1,i);
  if LowerCase(s2)='januarthen s2:='1';
  if LowerCase(s2)='ferbuarthen s2:='2';
  //...
  if LowerCase(s2)='dezemberthen s2:='12';
  result:=StrToDate(s1 + '.' + s2 + '.' + s);
end;

end;


procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption:=DateToStr(pars(Edit1.Text));
end;
Die funktion klappt nur, wenn man das datum genau so eingibt, wie du es beschrieben hast...
Alex
Von allen Dingen die mir verloren gegangen,
hab ich am meisten an meinem Verstand gehangen
  Mit Zitat antworten Zitat
The_Tremendous

Registriert seit: 10. Nov 2004
65 Beiträge
 
#5

Re: Problem mit Abfangen von ner Datumseingabe

  Alt 3. Jun 2005, 16:04
Also das System ist Klar, allerdings ist da wohl irgendwo noch ein kleiner Fehler drinne. Beim Ablauf wird die funktion zwar aufgerufen, aber die if-anweisungen gekonnt übersprungen.

Ich weis net ob es jetzt ein Fehler von mir ist, oder ob er in deinem Quelltext liegt.?


Delphi-Quellcode:
unit UDatumsberechnung;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Buttons;

type
  TfrmDatum = class(TForm)
    editDatumEingabe: TEdit;
    comboDatumAuswahl: TComboBox;
    RadioGroup1: TRadioGroup;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    lbltest: TLabel;
    BitBtn1: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
    function CheckString(EinleseDatum:string):TDate;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  frmDatum: TfrmDatum;

implementation

{$R *.dfm}

var EinleseDatum, test: string;
    Datum : TDateTime;

procedure TfrmDatum.BitBtn1Click(Sender: TObject);
begin
  try
   // wenns nicht zu except springt, ist alles in ordnung
   CheckString(EditDatumEingabe.Text);

   lbltest.Caption := DateToStr(Datum);
  except
   // der string war keine gültige Datumseingabe
   editDatumEingabe.Text := '';
   ShowMessage('Der Eingegebene Wert ist kein Zulässiges Datum! Bitte geben Sie ein gültiges Datum ein');
  end;
   
end;

function TFrmDatum.CheckString(EinleseDatum:string):TDate;
var
  i,i2:integer;
  s1,s2:string;
begin
if (pos('.',EinleseDatum)>0) and (pos(' ',EinleseDatum)<=0) then begin
  //wenn es 01.01.2005 ist
  result:=StrToDate(EinleseDatum);
end;
if (pos('-',EinleseDatum)>0) and (pos('-',EinleseDatum)<=2) then begin
  //wenn es 2005-01-01 ist
  i:=pos('-',EinleseDatum);
  s1:=copy(EinleseDatum,1,i-1);
  Delete(EinleseDatum,1,i);
  i:=pos('-',EinleseDatum);
  s2:=copy(EinleseDatum,1,i-1);
  Delete(EinleseDatum,1,i);
  result:=StrToDate(EinleseDatum + '.' + s2 + '.' + s1);
end;
if (pos('.',EinleseDatum)>0) and (pos(' ',EinleseDatum)>0) then begin
  //wenn es 1. Januar 2005 ist
  i:=pos(' ',EinleseDatum);
  s1:=Copy(EinleseDatum,1,i-2);
  Delete(EinleseDatum,1,i);
  i:=pos(' ',EinleseDatum);
  s2:=Copy(EinleseDatum,1,i-1);
  Delete(EinleseDatum,1,i);
  if LowerCase(s2)='januarthen s2:='1';
  if LowerCase(s2)='februarthen s2:='2';
  //...
  if LowerCase(s2)='dezemberthen s2:='12';
  result:=StrToDate(s1 + '.' + s2 + '.' + EinleseDatum);
end;

end;

end.
  Mit Zitat antworten Zitat
Benutzerbild von XHelp
XHelp

Registriert seit: 12. Jul 2004
Ort: Duisburg
172 Beiträge
 
Delphi 6 Enterprise
 
#6

Re: Problem mit Abfangen von ner Datumseingabe

  Alt 3. Jun 2005, 16:20
welche if abfrage meinst du denn?
Alex
Von allen Dingen die mir verloren gegangen,
hab ich am meisten an meinem Verstand gehangen
  Mit Zitat antworten Zitat
The_Tremendous

Registriert seit: 10. Nov 2004
65 Beiträge
 
#7

Re: Problem mit Abfangen von ner Datumseingabe

  Alt 4. Jun 2005, 04:53
Jede der If-Abfrage die sich jeweils auf die Datumabfrage (also die drei If-Anweisungen) in der Funktion CheckString wird zwar gelesen, dann aber übersprungen. Also er liest jeweils die Bedingung und springt beim nächsten Schritt gleich zur Bedingung der nächsten If-Abfrage.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#8

Re: Problem mit Abfangen von ner Datumseingabe

  Alt 4. Jun 2005, 08:48
Das kommt mir bekannt vor :
http://www.delphipraxis.net/internal...ct.php?t=55241
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Urmel

Registriert seit: 23. Mai 2004
Ort: Titiwu
28 Beiträge
 
#9

Re: Problem mit Abfangen von ner Datumseingabe

  Alt 4. Jun 2005, 08:54
Hallo,

ich würde auf keinen Fall versuchen das Datum mit StrToDate zu konvertieren. In den Beispielen oben wird immer davon ausgegangen das das Datumsformat des OS auf "dd.mm.yyyy" eingestellt ist.
Bei mir ist dies z.B. yyyy-mm-dd und damit würde die Funktion nicht gehen. Zerlege lieber wie gezeigt den String und erzeuge dann mit Delphi-Referenz durchsuchenEncodeDate() ein TDatetime.
Urmel aus dem Eis
  Mit Zitat antworten Zitat
Benutzerbild von XHelp
XHelp

Registriert seit: 12. Jul 2004
Ort: Duisburg
172 Beiträge
 
Delphi 6 Enterprise
 
#10

Re: Problem mit Abfangen von ner Datumseingabe

  Alt 4. Jun 2005, 09:47
Ich habe die Function getestet, bei mir war alles OK... ich habe gerade etwas gesehen:
CheckString ist ja ne function:

Delphi-Quellcode:
   // wenns nicht zu except springt, ist alles in ordnung
   CheckString(EditDatumEingabe.Text);

   lbltest.Caption := DateToStr(Datum);
Bei dir wird Datum gar nicht geschrieben und nicht die if abfrage übersprungen. Versuche mal das hier:

Delphi-Quellcode:
   // wenns nicht zu except springt, ist alles in ordnung
   Datum:=CheckString(EditDatumEingabe.Text);

   lbltest.Caption := DateToStr(Datum);
Alex
Von allen Dingen die mir verloren gegangen,
hab ich am meisten an meinem Verstand gehangen
  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 09:55 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