• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Ошибка Relational Operators Are Not Supported In Text Fields

  • Автор темы oleg7
  • Дата начала
O

oleg7

Делаю печать по указанным критериям. При :
Код:
			If (Doc.Data1(0)<>"") And (Doc.Data2(0)<>"") And (Doc.Problema(0)="") Then				
Query = {[Date11]>=} & Doc.Data1( 0 ) & { AND } & {[Date12]<=} & Doc.Data2( 0 ) 
End If
Ищет нормально. При:

Код:
			If (Doc.Data1(0)="") And (Doc.Data2(0)="") And (Doc.Problema(0)<>"") Then				
Query = {[Problem]=} & Doc.Problema(0) 
End If

Ищет нормально.
а при:
Код:
If (Doc.Data1(0)<>"") And (Doc.Data2(0)<>"") And (Doc.Problema(0)<>"") Then				
Query = {[Data11]>=} & Doc.Data1( 0 ) & { AND } & {[Date12]<=} & DialogDoc.Data2( 0 ) & { AND } & {[Problem]=} & Doc.Problema(0) 
End If

выдает ошибку "relational operators are not supported in text fields "
в
Код:
If CurrentDb.IsFTIndexed Then
Set ndc = CurrentDb.FTSearch(Query, 0 )
If ndc.Count=0 Then
из-за чего это может быть.
 
H

hosm

Query = {[Date11]>=} & Doc.Data1( 0 ) & { AND } & {[Date12]<=} & DialogDoc.Data2( 0 ) & { AND } & {[Problem]=} & Doc.Problema(0)
 
O

oleg7

да {[Date11]>=} есть просто неудачно скопировалось
 
O

oleg7

"[Date11]>=04.12.2009 AND [Date12]<=11.12.2009 AND [Problem]=Программное"
да поля написаны правильно, я просто уже и переименовывать пытался и ... короче с ума начал сходить

Добавлено: извеняюсь, вопрос снят. Пересоздал базу, заново ее индексировал. Запустил поиск и О ЧУДО ЗАРАБОТАЛО
 
N

nvyush

"[Date11]>=04.12.2009 AND [Date12]<=11.12.2009 AND [Problem]=Программное"
да поля написаны правильно, я просто уже и переименовывать пытался и ... короче с ума начал сходить

Добавлено: извеняюсь, вопрос снят. Пересоздал базу, заново ее индексировал. Запустил поиск и О ЧУДО ЗАРАБОТАЛО
/Программное/ должно быть в кавычках, кмк
 
A

Akupaka

ребята, вы упустили суть самой проблемы. такая ошибка указывает на то, что итемы Date11 и Date12 - не дата, а текст.
 
T

TIA

звеняюсь, вопрос снят. Пересоздал базу, заново ее индексировал. Запустил поиск и О ЧУДО ЗАРАБОТАЛО

Это чудо до поры до времени. Дело в том, что в БД хранится таблица полей и их тип. Значения этой таблицы вы видите в дизайнере слева в панели со списком полей или при формировании FT-запроса во вьюшке по кнопке "Fields...".

Поле в эту таблицу добавляется при первом сохранении документа. При выполнении FT-запроса Нотес проверяет типы данных по таблице. Если в таблице сказано, что поле текстовое, значит операции сравнения в FT-запросе не разрешены. У новой БД без документов таблица полей пуста (или определяется по формам, точно не помню)

Ваше поле с датой очень просто может попасть в таблицу как текст. Достаточно при сохранении первого документа не заполнить поле с датой. Защититься можно только если самому явно в новой БД сохранить документ со всеми не текстовыми полями, участвующими в FT-запросах.
 
A

Akupaka

Ваше поле с датой очень просто может попасть в таблицу как текст.
а мне казалось, что запись соответствия происходит при сохранении формы в дизайнере... если сохранить форму с типом поля ТЕКСТ, а потом сменить его на ДАТА, то в таблице будет все-равно ТЕКСТ и фт-поиск не будет работать с датой.
правда, я не пытался разобраться, посему это лишь предположение было...
интересно, есть ли где это описано нормально?..

к стати, а что будет, если создавать программно доки, а соотв формы с полями нет. будет искать?
 
T

TIA

а мне казалось, что запись соответствия происходит при сохранении формы в дизайнере... если сохранить форму с типом поля ТЕКСТ, а потом сменить его на ДАТА, то в таблице будет все-равно ТЕКСТ и фт-поиск не будет работать с датой.
Тоже думаю, что при СОХРАНЕНИИ формы поля в таблицу помещаются. Главное, что проблема точно есть для новой БД.
 
H

hosm

Поле в эту таблицу добавляется при первом сохранении документа. При выполнении FT-запроса Нотес проверяет типы данных по таблице. Если в таблице сказано, что поле текстовое, значит операции сравнения в FT-запросе не разрешены. У новой БД без документов таблица полей пуста (или определяется по формам, точно не помню)

Ваше поле с датой очень просто может попасть в таблицу как текст. Достаточно при сохранении первого документа не заполнить поле с датой. Защититься можно только если самому явно в новой БД сохранить документ со всеми не текстовыми полями, участвующими в FT-запросах.
интересно...
Но в данном случае, имхо, это не причина ошибки, так как иначе не работал бы 1й пример - имена полей ведь те же.
имхо, здесь может влиять только невнимательность или то, что в документах, подпадающих под 2й поиск, поля дат - текстовые. Это уже обсуждалось на форуме, поищите, кому надо.

Добавлено: ...или вообще отсутствуют :ph34r:
 
T

TIA

противеречит этому и этому сообщению автора.
Вот зануда. :) Думаю, что всё объясняется человеческим фактором. Тем более, что после второго поста (где выражение верно) ошибка исчезла. И ещё уверен, что топикстартер не был в курсе описыванных мной нюансов и моя инфа ему пригодится.
 
H

hosm

интересно, есть ли где это описано нормально?..
TIA, откуда вы все знаете?=)
интересно в общем, вот на этот вопрос подробней: Inside Notes? опыт? или надо найти в хелпе очередное мааааленькое Note, на которое не обращаешь внимание, пока на грабли не наступишь?


Добавлено: да, я зануда )
 
Z

Zeka

Дело в том, что в БД хранится таблица полей и их тип. Значения этой таблицы вы видите в дизайнере слева в панели со списком полей или при формировании FT-запроса во вьюшке по кнопке "Fields...".

Поле в эту таблицу добавляется при первом сохранении документа. При выполнении FT-запроса Нотес проверяет типы данных по таблице. Если в таблице сказано, что поле текстовое, значит операции сравнения в FT-запросе не разрешены. У новой БД без документов таблица полей пуста (или определяется по формам, точно не помню)

Ваше поле с датой очень просто может попасть в таблицу как текст. Достаточно при сохранении первого документа не заполнить поле с датой. Защититься можно только если самому явно в новой БД сохранить документ со всеми не текстовыми полями, участвующими в FT-запросах.
А есть возмодность как-нибудь узнать (дизайнером/администратором/кодом) с каким типом сохранилось поле в этой таблице?


Нашёл один способ - в расширенном поиске текстовое поле может искаться по принципу "Contains/Not contains", а поле с датой - "Before/After/..."
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!