Problemchen mit Datum



  • habe ein textfeld angelegt aus dem ein datum ausgelesen werden soll.
    das eingabe format tt.mm.jjjj....er schreibt mir aber zurück dass das format irgendwie falsch werde wenn ich das so ins textfeld schreibe.

    bitte wo ist der fehler???

    mandantenNummer = txt_Mandantennummer->Text;
                    date = StrToDate(txt_von->Text);
                    date_last = StrToDate(txt_bis->Text);
                    DataSource1->DataSet = Query2;
                    Query2->Close();
                    Query2->SQL->Clear();
                    Query2->SQL->Add("select sum(km0005) as ergebnis from lobu.kst_monatswerte where ma0000 =:mandantenNummer ");
                    Query2->ParamByName("mandantenNummer")->AsString = mandantenNummer;
                    Query2->ParamByName("date")->AsString = date;
                    Query2->ParamByName("date_last")->AsString = date_last;
                    Query2->Open();
    


  • Zum einen sehe ich im SQL-Select kein Datumsfeld und zum anderen, wieso übergibst Du einen Datumswert als String?



  • zum ersten teil...da haste recht!

    sieht dann so aus:

    select sum(km0005) as ergebnis from lobu.kst_monatswerte where ma0000 =:mandantenNummer and km0003=:date
    

    zum zweiten:

    was ich möchte ist das txt feld auslesen und in das sql query übergeben...

    sag mir bitte wie ich das richtig mache 😕

    ....ich caste doch den string aus dem txt feld in date oder nicht???

    date = StrToDate(txt_von->Text);
    


  • Welche Fehlermeldung erhälst Du bei welcher Eingabe?
    Was für ein Datentyp ist date?



  • Meldung: "'ist kein gültiges Datum'

    habe das so verstanden, dass

    StrToDate(txt_von->Text)
    

    eben aus "jedem" String automatisch ein date format macht...in der DB wird das format 2006-03-01 also jjjj-mm-tt benutzt.



  • Hallo

    die Fehlermeldung besagt eindeutig, das zur Laufzeit in txt_von->Text ein leerer String steht, der nicht umgewandelt werden kann.
    Entweder fängst du sowas vorher schon ab, oder du verwendest einen TDateTimePicker anstatt des TEdit.

    bis bald
    akari



  • ich habe mich jetzt für ein TMonthCalender entschieden.
    Ich komme auch an das selektierte Datum ran, allerdings kann ich das nicht als Parameter an das SQL Query übergeben wegen der Fehlermeldung:

    Query2:Typ für Feld 'castedDate' ist unbekannt...

    Diese Fehlermeldung hatte ich schon mal....
    Was bedeutet das bitte und was muss da richtigerweise stehen???

    using namespace std;
      AnsiString mandantenNummer;
    
            try
            {
                     // auslesen der eingegebenen Mandantennummer
                     mandantenNummer = txt_Mandantennummer->Text;
    
                     // das angeclickte Datum als AnsiString variable
                     AnsiString selected_Date;
    
                     // fülle die variable
                     selected_Date = MonthCalendar1->Date;
    
                     //ausgeben der Variablen zum test
                     Edit1->Text = selected_Date;
    
                     // Casten des Datums in einen String
                     AnsiString castedDate;
                     castedDate = DateToStr(selected_Date);
    
                    DataSource1->DataSet = Query2;
                    Query2->Close();
                    Query2->SQL->Clear();
    
                    // Übergabe als Parameter an das SQL Query
                    Query2->SQL->Add("select sum(km0005) as ergebnis from lobu.kst_monatswerte where ma0000 =:mandantenNummer and km0003=:castedDate");
                    Query2->ParamByName("mandantenNummer")->AsString = mandantenNummer;
                    Query2->Open();
                    Query2->First();
    


  • was soll das

    castedDate = DateToStr(selected_Date);
    

    bringen? sowohl castedDate wie auch selected_Date sind vom Typ AnsiString

    MonthCalendar1->Date liefert einen Werte vom Typ TDateTime bzw. TDate zurück und keinen AnsiString

    also übergib einfach MonthCalendar1->Date an den Parameter des Query als AsDateTime



  • @Linnea:nimms mir nicht übel bin nicht wirklich fit in c++ 😞

    habe das so probiert...aber gleiche Fehlermeldung!

    // auslesen der eingegebenen Mandantennummer
                     mandantenNummer = txt_Mandantennummer->Text;
    
                     TDate selected_Date = MonthCalendar1->Date;
    
                     //ausgeben der Variablen zum test
                     Edit1->Text = selected_Date;
    
                    DataSource1->DataSet = Query2;
                    Query2->Close();
                    Query2->SQL->Clear();
    
                    // Übergabe als Parameter an das SQL Query
                    Query2->SQL->Add("select sum(km0005) as ergebnis from lobu.kst_monatswerte where ma0000 =:mandantenNummer and km0003=:selected_Date");
                    Query2->ParamByName("mandantenNummer")->AsString = mandantenNummer;
                    Query2->Open();
                    Query2->First();
    

    ich habs...es fehlte...

    Query2->ParamByName("selected_Date")->AsString = selected_Date;
    


  • Hä? Du hast ein TDate- / TDateTime-Objekt, wandelst dieses in einen String, nur damit Du es als String an die Query übergeben kannst?!?

    Query2->ParamByName("selected_Date")->AsDateTime = MonthCalendar1->Date;
    


  • ja...also so funktioniert es im moment:
    habe jetzt nur noch das problem einen ZeitRaum angeben zu wollen in dem
    SQL Query.
    hab ich da auskommentiert hingeschrieben....plz help!

    // auslesen der eingegebenen Mandantennummer
                     mandantenNummer = txt_Mandantennummer->Text;
    
                     // Datum in variable selected_Date speichern
                     TDate selected_Date = MonthCalendar1->Date;
                     TDate end_Date = MonthCalendar1->EndDate;
    
                     //ausgeben der Variablen zum test
                     Edit1->Text = selected_Date;
                     Edit2->Text = end_Date;
    
                    DataSource1->DataSet = Query2;
                    Query2->Close();
                    Query2->SQL->Clear();
    
                    // Übergabe als Parameter an das SQL Query
                    Query2->SQL->Add("select sum(km0005) as Personalkosten from  lobu.kst_monatswerte where ma0000 =:mandantenNummer and km0003=:selected_Date 
    // hier soll jetzt ein zeitraum eingegebn werden nur fehlt mir die richtige syntax...also so nach dem motto: km0003 between selected_Date und end_Date  ");
    
                    Query2->ParamByName("mandantenNummer")->AsString = mandantenNummer;
                    Query2->ParamByName("selected_Date")->AsString = selected_Date;
                    Query2->ParamByName("end_Date")->AsString = end_Date;
                    Query2->Open();
                    Query2->First();
    


  • Hallo

    siehe BETWEEN

    bis bald
    akari



  • ja also das mit dem between kenn ich aber hier sind parameter im spiel deshalb die frage

    lobu.kst_monatswerte where ma0000 =:mandantenNummer and km0003=:selected_Date"
    

    ...
    hatte mir das so gedacht, aber ne 😞

    lobu.kst_monatswerte where ma0000 =:mandantenNummer and km0003=:between selected_Date and km0003=:end_Date"
    


  • Hallo

    offenbar solltest du doch nochmal die Syntax anschauen.

    lobu.kst_monatswerte where ma0000 =:mandantenNummer and km0003 between :selected_Date and :end_Date
    

    oder

    lobu.kst_monatswerte where ma0000 =:mandantenNummer and km0003 >=:selected_Date and km0003<=:end_Date
    

    bis bald
    akari



  • @akari:
    ja, da haste recht...aber ich lerne ja noch....

    danke dir



  • so...nächste frage :):
    wie mache ich denn aus einem datum vom format tt.mm.jjjj ein datum vom format yyyy-mm-dd in c++???



  • Hallo

    siehe TDateTime::FormatString

    bis bald
    akari



  • Wann ersetzt Du eigentlich dieses <von der Zensur gestrichen> ->AsString bei der Parameterübergabe?

    Ist die Mandantennummer in der Datenbank ein String? Wenn nicht, warum übergibst Du einen String?
    Die beiden Datumsfelder in der DB sind keine Strings. Warum übergibst Du die Parameter immer noch als String?

    Ich gehe davon aus, dass das der Grund ist, warum Du nach der Formatierung des Datumstrings fragst... Übergib die Parameter doch gleich im richtigen Format.



  • @Joe: weil ich das im Zuge geistiger Umnachtung vergessen habe *schäm*
    Du hast recht und ich danke Dir vielmals!!!!!

    Sieht jetzt so aus:

    using namespace std;
      AnsiString mandantenNummer;
    
            try
            {
                     // auslesen der eingegebenen Mandantennummer
                     mandantenNummer = txt_Mandantennummer->Text;
    
                     // Datum in variable selected_Date speichern
                     TDate selected_Date = MonthCalendar1->Date;
                     TDate end_Date = MonthCalendar1->EndDate;
    
                     //ausgeben der Variablen zum test
                     Edit1->Text = selected_Date;
                     Edit2->Text = end_Date;
    
                    DataSource1->DataSet = Query2;
                    Query2->Close();
                    Query2->SQL->Clear();
    
                    // Übergabe als Parameter an das SQL Query
                    Query2->SQL->Add("select sum(km0005) as Personalkosten from lobu.kst_monatswerte where ma0000 =:mandantenNummer and km0003 between :selected_Date and :end_Date");
                    Query2->ParamByName("mandantenNummer")->AsString = mandantenNummer;
                    Query2->ParamByName("selected_Date")->AsDateTime = MonthCalendar1->Date;
                    Query2->ParamByName("end_Date")->AsDateTime = MonthCalendar1->EndDate;
                    Query2->Open();
                    Query2->First();
    


  • ...bin jetzt soweit, dass ich in dem sql query joins nutze....
    leider findet er den parameter selected date nicht!

    wobei ich auch fragen wollte, warum es bei mandantennummer =: heissen muss und nicht nur :???

    b) Welche Exceptions sollte ich unbedingt abfangen???

    So siehts aus:

    try
            {
                     // auslesen der eingegebenen Mandantennummer
                     mandantenNummer = txt_Mandantennummer->Text;
    
                     // Datum in variable selected_Date speichern
                     TDate selected_Date = MonthCalendar1->Date;
                     TDate end_Date = MonthCalendar1->EndDate;
    
                     //ausgeben der Variablen zum test
                     Edit1->Text = selected_Date;
                     Edit2->Text = end_Date;
    
                      DataSource1->DataSet = Query2;
                      Query2->Close();
                      Query2->SQL->Clear();
    
                      // Übergabe als Parameter an das SQL Query
                      Query2->SQL->Add("select sum(a.su0005) AS summe from fibu.kontensummen a join zmis.kontenplan b on a.su0002 = b.kp0001 where a.ma0001=:mandantenNummer and a.su0003 between : selected_Date and :end_Date and b.kp0003 = '430'");
                      Query2->ParamByName("mandantenNummer")->AsString = mandantenNummer;
                      Query2->ParamByName("selected_Date")->AsDateTime = MonthCalendar1->Date;
                      Query2->ParamByName("end_Date")->AsDateTime = MonthCalendar1->EndDate;
                      Query2->Open();
                      Query2->First();
    
            }
    

Anmelden zum Antworten