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

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

oleg7

Гость
#1
Делаю печать по указанным критериям. При :
Код:
			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
из-за чего это может быть.
 

hosm

* so what *
18.05.2009
2 442
9
#3
Query = {[Date11]>=} & Doc.Data1( 0 ) & { AND } & {[Date12]<=} & DialogDoc.Data2( 0 ) & { AND } & {[Problem]=} & Doc.Problema(0)
 
O

oleg7

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

oleg7

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

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

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
#8
"[Date11]>=04.12.2009 AND [Date12]<=11.12.2009 AND [Problem]=Программное"
да поля написаны правильно, я просто уже и переименовывать пытался и ... короче с ума начал сходить

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

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
#9
ребята, вы упустили суть самой проблемы. такая ошибка указывает на то, что итемы Date11 и Date12 - не дата, а текст.
 

TIA

:-)
Lotus team
15.05.2009
790
2
#10
звеняюсь, вопрос снят. Пересоздал базу, заново ее индексировал. Запустил поиск и О ЧУДО ЗАРАБОТАЛО
Это чудо до поры до времени. Дело в том, что в БД хранится таблица полей и их тип. Значения этой таблицы вы видите в дизайнере слева в панели со списком полей или при формировании FT-запроса во вьюшке по кнопке "Fields...".

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

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

Akupaka

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

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

TIA

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

hosm

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

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

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

TIA

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

hosm

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


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

Zeka

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

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

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


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