powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Непонятки с курсором и set filter.
8 сообщений из 8, страница 1 из 1
Непонятки с курсором и set filter.
    #38651860
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется форма отображающая данные о материалах: таблица(грид) + кнопки (добавления, редактирования, удаления) + поле поиска и кнопка поиска. Данные для грида берутся из курсора. В кнопке поиска код типа
Код: plsql
1.
set filter to cursor.field == (поле поиска).(значение) in cursor.


Пока не включается поиск все работает, а как только сделаешь поиск и попытаешся отредактировать одну из отфильтрованных записей выдает ошибку -
Код: plsql
1.
function argument value, type or count is invalid.

Выполнение останавливается на командах формы редактирования (метод init)-
Код: plsql
1.
2.
select cursor
go top


В чем может быть проблема ?
...
Рейтинг: 0 / 0
Непонятки с курсором и set filter.
    #38651873
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreen,

Судя по ошибке - несовпадение типов данных.
...
Рейтинг: 0 / 0
Непонятки с курсором и set filter.
    #38651904
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В кнопке редактирования такой код :
Код: plsql
1.
2.
3.
select cursor
copy to d:/a1
do form frmEdit with ...



В методе Init формы frmEdit код:
Код: plsql
1.
2.
3.
lparameters ....
select cursor 
copy to d:/a2



В итоге в a1 есть записи, а в а2 - нет.
???
...
Рейтинг: 0 / 0
Непонятки с курсором и set filter.
    #38651966
SoftwareBoy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Load формы выполняется раньше, чем Init, там может быть записан другой курсор с тем же именем. А если у формы private datasession, то и условие отбора (если оно вида "(поле поиска).(значение)") в момент открытия формы может измениться.
...
Рейтинг: 0 / 0
Непонятки с курсором и set filter.
    #38651980
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreenИмеется форма отображающая данные о материалах: таблица(грид) + кнопки (добавления, редактирования, удаления) + поле поиска и кнопка поиска. Данные для грида берутся из курсора. В кнопке поиска код типа
Код: plsql
1.
set filter to cursor.field == (поле поиска).(значение) in cursor.


Пока не включается поиск все работает, а как только сделаешь поиск и попытаешся отредактировать одну из отфильтрованных записей выдает ошибку -
Код: plsql
1.
function argument value, type or count is invalid.

Выполнение останавливается на командах формы редактирования (метод init)-
Код: plsql
1.
2.
select cursor
go top


В чем может быть проблема ?Как обычно, в неправильном понимании.
SET Filter - НЕ ПОИСК. Это НАСТРОЙКА. Что легко определяется по ключевому слову этой команды. И это настройка конкретной таблицы. Глобальная. И непрерывная. То есть она остается включенной и записанное в ней условие проверяется в том числе и при переключении форм, где может не быть (поле поиска).(значение) или это поле там может быть другого типа. В результате получаем вроде как "непонятное" сообщение об ошибке несовпадения типов.
...
Рейтинг: 0 / 0
Непонятки с курсором и set filter.
    #38652051
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, немного попонятнее стало. Дальше буду сам копать.
...
Рейтинг: 0 / 0
Непонятки с курсором и set filter.
    #38652089
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все заработало! Проблема была в том, как было задано условие для фильтра:
Код: plsql
1.
SET FILTER TO AT(UPPER(ALLTRIM(thisform.textX.value)), UPPER(ALLTRIM(cursor.field))) != 0 IN cursor


Заменил thisform на наименование формы
Код: plsql
1.
SET FILTER TO AT(UPPER(ALLTRIM(formName.textX.value)), UPPER(ALLTRIM(cursor.field))) != 0 IN cursor


, и все пошло.
Получается при повторном обращении к курсору программа его "пересматривала" (с учетом фильтра), но так форма была уже другая, то нужное поле textX не находила.
...
Рейтинг: 0 / 0
Непонятки с курсором и set filter.
    #38652104
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше используй макроподстановку.
т.е. вместо
Код: sql
1.
SET FILTER TO AT(UPPER(ALLTRIM(formName.textX.value)), UPPER(ALLTRIM(cursor.field))) != 0 IN cursor


пиши
Код: sql
1.
2.
3.
local lcFilter
lcFilter = [AT("] + UPPER(ALLTRIM(ThisForm.textX.value)) + [", UPPER(ALLTRIM(cursor.field))) != 0]
set filter to &lcFilter IN cursor


AT() можно на $ заменить
Код: sql
1.
lcFilter = ["] + UPPER(ALLTRIM(ThisForm.textX.value)) + [" $ UPPER(ALLTRIM(cursor.field))]
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Непонятки с курсором и set filter.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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