E2015 В Delphi с помощта на полета за редактиране

Имам три полета за редактиране, те се използват за подаване на параметри в заявка за моята база данни, която в замяна се изпълнява и връща желаните резултати. Всичко това работи, проблемът, който имам е следният:

 if ((DayOfWeekSCH.Text) and (EndTimeSCH.Text) and (StartTimeSCH.Text)) <> '' then

DayOfWeekSCH, EndTimeSCH и StartTimeSCH са полета за редактиране, това, което се опитвам да направя, е да се уверя, че тези полета не са празни, преди да изпълня кода за изпълнение на заявката. Но получавам E2015 Error, което не разбирам защо го вземам.

РЕДАКТИРАНЕ: Това е пълният код на грешката:

[dcc32 грешка] PAvailableForm.pas(37): Операторът E2015 не е приложим за този тип операнд


person Community    schedule 26.02.2016    source източник


Отговори (1)


E2015: Операторът не е приложим за този тип операнд

където <string> and <string> няма смисъл, тъй като and се интерпретира като булев или побитов оператор, в зависимост от неговите операнди: оттук и грешката.

Вижте Булеви оператори и Логически (побитови) оператори.

Изглежда, че искате да постигнете нещо подобно:

if DayOfWeekSCH.Text + EndTimeSCH.Text + StartTimeSCH.Text <> '' then

Както и да е, горното е грешен начин за извършване на сравнение на низове.
Може да искате да видите този отговор за това как да проверите дали даден низ е празен.

Във връзка с въпроса, тъй като поле за редактиране, да речем TEdit, произлиза от TControl, GetTextLen може да се използва за проверка на размера на текстовия буфер: ако 0 текстът е празен.

if (DayOfWeekSCH.GetTextLen > 0) and (EndTimeSCH.GetTextLen > 0) and (StartTimeSCH.GetTextLen > 0) then
person fantaghirocco came to Rome    schedule 26.02.2016
comment
if DayOfWeekSCH.Text + EndTimeSCH.Text + StartTimeSCH.Text <> '' thenе ужасно. Разпределение/манипулиране на низове по време на изпълнение, за да се избегнат няколко натискания на клавиши по време на кодиране??? - person Uli Gerhardt; 26.02.2016
comment
@UliGerhardt Вашият код трябва да бъде както следва: е подвеждащ: ще се промени - person fantaghirocco came to Rome; 26.02.2016
comment
Питащият със сигурност не иска да се свързва и трябва да премахнете това от отговора си. - person David Heffernan; 26.02.2016
comment
Помислете да използвате това вместо това: if (DayOfWeekSCH.GetTextLen > 0) and (EndTimeSCH.GetTextLen > 0) and (StartTimeSCH.GetTextLen > 0) then. Няма смисъл да губите памет или изчисления за разпределяне на String обекта, които няма да се използват за нищо друго освен за проверка на дължините им. Контролите за редактиране знаят собствената си дължина на текста, така че просто попитайте директно. - person Remy Lebeau; 26.02.2016
comment
@RemyLebeau Не знаех за GetTextLen преди и никога не съм го използвал. Както и да е, примерът за конкатенация на текст, в моето намерение очевидно беше пример за как-не-да-го, но не изглеждаше така за начина, по който го записах, тъй като всички коментари го сочат навън. Отговорът е редактиран, благодаря на всички. - person fantaghirocco came to Rome; 27.02.2016