Zbyt wiele rzeczy jest tutaj źle!
TDateTime dataod=Rez_rokodCB->Text+"-"+Rez_miesiacodCB->Text+"-"+Rez_dzienodCB->Text;
|
Jak to możliwe, że kompilator nie zgłasza błędu przy próbie skompilowania tego kodu?! Jak możesz przypisywać typ AnsiString lub UnicodeString bezpośrednio do obiektu typu TDateTime?! Kiedyś używałem środowiska C++Builder 6, ale nawet w tamtej wersji nie można tego tak zrobić! |
Jeżeli chcesz przypisać datę do obiektu typu
TDateTime to musisz ją enkodować, a format daty też nie jest dowolny, czyli to nie jest tak, że Ty sobie użyjesz jako separatora kreski.
TDateTime data = EncodeDate(Rez_rokodCB->Text.ToInt(),
Rez_miesiacodCB->Text.ToInt(),
Rez_dzienodCB->Text.ToInt());
datado i
datadzis też jest źle, przy czym aktualną datę można pobrać na dwa sposoby:
TDateTime datadzi = Now();
TDateTime datadzi = TDateTime::CurrentDate();
Jeżeli w swoim programie bazujesz tylko na dacie, bez czasu to nie ma sensu używanie typu
TDateTime, zamiast tego użyj typu
TDate.
ShowMessage("Nie można rezerwowac wstecz!" + datadzis)
Nie można typu
TDateTime dodawać do typu
String, gdyż to się wogóle nie powinno skompilować. Trzeba dokonać formatowania za pomocą funkcji
FormatString,
Prawidłowo ten pierwszy kod to powinien wyglądać tak:
TDate dataod = EncodeDate(Rez_rokodCB->Text.ToInt(), Rez_miesiacodCB->Text.Toint(), Rez_dzienodCB->Text.ToInt());
TDate datado = EncodeDate(Rez_rokdoCB->Text.ToInt(), Rez_miesiacdoCB->Text.ToInt(), Rez_dziendoCB->Text.ToInt());
TDate datadzis = Now();
USHORT year, month, day;
datadzis.DecodeDate(&year, &month, &day);
if(Rez_rokodCB->Text < year ||
(Rez_rokodCB->Text == year && Rez_miesiacodCB->Text < month) ||
(Rez_rokodCB->Text == year && Rez_miesiacodCB->Text == month && Rez_dzienodCB->Text <= day) )
ShowMessage("Nie można rezerwowac wstecz!\nAktualna data: " + datadzis.FormatString("dddd dd-mmmm-yyyy"));
String cena1=Query3->FieldByName("cena_p")->AsString;
int cena = atoi(cena1.c_str());
Kombinujesz jak koń pod górę. Można to zrobić tak:
int cena1 = Query3->FieldByName("cena_p")->AsString.ToInt();
lub ze zdefiniowaniem wartości domyślnej. Jeżeli tabela zwróci wartość inną od liczby lub nic nie zwróci, by nie generować wyjątku:
int cena1 = Query3->FieldByName("cena_p")->AsString.ToIntDef(0); // wartość domyślna 0
lub podobnie jak Ty:
String cena1 = Query3->FieldByName("cena_p")->AsString;
int cena = cena1.ToInt();
lub tak:
String cena1 = Query3->FieldByName("cena_p")->AsString;
int cena = IntToStr( cena1 );
Proponuję byś się zapoznała z tym:
dział:
porady
zmienne.