powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / поиск в форме-как?
9 сообщений из 9, страница 1 из 1
поиск в форме-как?
    #32633418
lenka_я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу сильно не ругаться-самоучка я...
Вставляю в форму searchform-из стандартного класса VFP- мне нужно только =, <>, >, <, включает
Изменяю свойство searchitem

авторLPARAMETERS oField,oOp,oExpr
LOCAL cExpr,cDataType,cOp,cFldName,cFldExpr,cRetExpr,aExprs,nTotExprs,i

* Check to make sure proper parameters passed
IF TYPE("m.oField")#"O" OR TYPE("m.oOp")#"O" OR TYPE("m.oExpr")#"O"
RETURN ""
ENDIF

m.cFldName = ALLTRIM(m.oField.Value)
m.cFldExpr = ALLTRIM(m.oExpr.Value)

* If empty expression return empty.
IF EMPTY(m.cFldExpr) AND !INLIST(m.oOp.listitemid,5,6)
RETURN ""
ENDIF

* Get data type of field
m.cDataType = aWizFList(m.oField.listitemid,2)

IF m.cDataType = "C" AND THIS.chkCaseSensitive.Value = 0
m.cFldName = "UPPER("+m.cFldName+")"
ENDIF

* Get the operator language equivalent
DO CASE
CASE m.oOp.listitemid = 1 && equals
m.cOp = "="
CASE m.oOp.listitemid = 2 && not equals
m.cOp = "<>"
CASE m.oOp.listitemid = 3 && more than
m.cOp = ">"
CASE m.oOp.listitemid = 4 && less than
m.cOp = "<"
CASE m.oOp.listitemid = 5 && is blank
RETURN "EMPTY("+m.cFldName+")"
CASE m.oOp.listitemid = 6 && is NULL
RETURN "ISNULL("+m.cFldName+")"
CASE m.cDataType = "L" && don't allow other options for logical type
m.cOp = "="
CASE m.oOp.listitemid = 7 && contains
m.cFldExpr = THIS.DataExpr("C",m.cFldExpr)
DO CASE
CASE m.cDataType = "T"
RETURN "AT("+m.cFldExpr+",TTOC("+m.cFldName+"))>0"
CASE m.cDataType = "D"
RETURN "AT("+m.cFldExpr+",DTOC("+m.cFldName+"))>0"
CASE INLIST(m.cDataType,"N","F","I","Y","B")
RETURN "AT("+m.cFldExpr+",ALLTRIM(STR("+m.cFldName+")))>0"
OTHERWISE
RETURN "AT("+m.cFldExpr+","+m.cFldName+")>0"
ENDCASE
OTHERWISE
nTotExprs = OCCURS(",",m.cFldExpr)+1
DIMENSION aExprs[m.nTotExprs]
FOR i = 1 TO m.nTotExprs
DO CASE
CASE m.i = m.nTotExprs
aExprs[m.i] = SUBSTR(m.cFldExpr,RAT(",",m.cFldExpr)+1)
CASE m.i =1
aExprs[m.i] = LEFT(m.cFldExpr,AT(",",m.cFldExpr)-1)
OTHERWISE
aExprs[m.i] = SUBSTR(m.cFldExpr,AT(",",m.cFldExpr,m.i-1)+1,;
AT(",",m.cFldExpr,m.i)-AT(",",m.cFldExpr,m.i-1)-1)
ENDCASE
aExprs[m.i] = THIS.DataExpr(m.cDataType,aExprs[m.i])
ENDFOR

DO CASE
CASE m.oOp.listitemid = 8 && in
m.cFldExpr = ""
FOR i = 1 TO m.nTotExprs
m.cFldExpr = m.cFldExpr + aExprs[m.i]
IF m.i # m.nTotExprs
m.cFldExpr = m.cFldExpr + ","
ENDIF
ENDFOR
RETURN "INLIST("+m.cFldName+","+m.cFldExpr+")"
CASE m.oOp.listitemid = 9 && between
IF ALEN(aExprs)=1
DIMENSION aExprs[2]
aExprs[2] = aExprs[1]
ENDIF
IF ALEN(aExprs)>2
DIMENSION aExprs[2]
ENDIF
RETURN "BETWEEN("+m.cFldName+","+aExprs[1]+","+aExprs[2]+")"
OTHERWISE
RETURN ""
ENDCASE
ENDCASE

DO CASE
CASE INLIST(m.cDataType,"M","G","P","O","U")
RETURN ""
CASE m.cDataType = "L"
IF TYPE(m.cFldName+m.cOp+m.cFldExpr) # "L"
IF (AT(m.cFldExpr,"fFnN")#0 AND m.cOp # "<>") OR (AT(m.cFldExpr,"tTyY")#0 AND m.cOp = "<>")
m.cFldName = "!"+m.cFldName
ENDIF
RETURN m.cFldName
ENDIF
OTHERWISE
m.cFldExpr = THIS.DataExpr(m.cDataType,m.cFldExpr)
ENDCASE

IF EMPTY(m.cFldExpr)
RETURN ""
ELSE
RETURN m.cFldName+m.cOp+m.cFldExpr
ENDIF


удаляю case 5,6,7 и 8
но при запуске
при выборе "содержит"-окно ввода значения-"txtExpr" блокируется
Помогите pleese
...
Рейтинг: 0 / 0
поиск в форме-как?
    #32633496
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О каком классе идет речь?
...
Рейтинг: 0 / 0
поиск в форме-как?
    #32633589
lenka_я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Класс Wizbtns- в нем выбираю searchclass
...
Рейтинг: 0 / 0
поиск в форме-как?
    #32633688
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотри события InterActiveChange для объектов cboOperators1 и cboOperators2.

Там прописано, что если выбран элемент 5 или 6, то txtExpr блокируется.

Т.е. это штатное поведение, которое никак не зависит от содержимого метода SearchItem()

Это и логично, ведь
5 - is blank
6 - is NULL

Нет предмета для сравнения
...
Рейтинг: 0 / 0
поиск в форме-как?
    #32633906
lenka_Я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ ОГРОМНОЕ-ПРЕОГРОМНОЕ СПАСИБО- ВСЕ ПОЛУЧИЛОСЬ!!!
...
Рейтинг: 0 / 0
поиск в форме-как?
    #32636473
lenka_я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Теперь у меня выходит ошибка, ести ищу "содержит" по типу Num
Во вкладке dataexpr
* Check for case sensitive
IF THIS.chkCaseSensitive.Value = 0
m.cTmpExpr= "UPPER("+m.cTmpExpr+")"
ENDIF
RETURN m.cTmpExpr

А если ищу символ через >,<,=
Во вкладке searchitem
IF m.cDataType = "C" AND THIS.chkCaseSensitive.Value = 0
m.cFldName = "UPPER("+m.cFldName+")"
ENDIF


Так как у меня в базе некоторые поля с цифрами заданы как символы
...
Рейтинг: 0 / 0
поиск в форме-как?
    #32636504
lenka_я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поняла-это от того,что я удалила chkcasesensitive , а без него если, то что изменить в программе?
...
Рейтинг: 0 / 0
поиск в форме-как?
    #32636509
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что за ошибка-то? Некорректное сравнение чисел, записанных как символьные строки? Так класс тут не при чем.

Запусти тест

Код: plaintext
1.
2.
3.
4.
5.
create cursor test (f1 c( 10 ))
for i= 1  to  100 
	insert into test values (LTRIM(str(i)))
endfor
index on f1 tag f1
browse nowait

Т.е. если числа прижаты к левому краю, то ты получишь заведомо некорректное сравнение таких строк. Надо либо переводить их в числа, либо прижимать к правому краю: PADL("1",10)
...
Рейтинг: 0 / 0
поиск в форме-как?
    #32636537
lenka_я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня три цифры и длина поля тоже 3
Просто я с фармы поиска удалила chkcasesensitive и стала вылезать ошибка, что он не найден.
Вот я и хочу узнать, что нужно изменить, чтобы поиск работал без него- это конечно не принципиально,но интересно
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / поиск в форме-как?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]