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