Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Эта статья поможет устранить проблему, из-за которой сетка на основе курсоров пуста, если команда SELECT-SQL сбрасывает курсор в Visual FoxPro.
Исходная версия продукта: Visual FoxPro
Исходный номер базы знаний: 140653
Симптомы
В Microsoft Visual FoxPro, если RecordSource для свойства сетки задано значение курсора, а затем команда SELECT-SQL сбрасывает курсор, сетка появляется пустой, если свойство RecordSource не задано для себя.
Следующая команда будет правильно обновлять сетку, если для перестроения курсора выполняется SELECT-SQL, но если свойства столбца или заголовка сетки настроены, эти настраиваемые изменения будут потеряны, а свойства столбца и заголовка сетки будут изменены обратно на их параметры по умолчанию:
THISFORM.GRID1.RECORDSOURCE=THISFORM.GRID1.RECORDSOURCE
Такая настройка может быть заголовками с разными именами, большей длиной столбцов и кодом, размещенным в событиях столбцов или заголовков. Дополнительные сведения см. в следующей статье базы знаний Майкрософт: 131836 PRB: таблица не обновляет отображение при применении курсора из запроса.
Причина
При перестроении курсора, основанного на сетке с помощью команды SELECT-SQL, исходный курсор должен быть уничтожен до создания нового курсора. В этом случае столбцы и заголовки сетки также очищаются, а затем повторно создаются. Даже когда свойство RecordSource сетки возвращается в исходное состояние, пользовательские настройки столбцов и заголовков сетки теряются.
Решение
Чтобы обновить сетку без потери настраиваемых свойств столбцов и заголовков, установите свойство RecordSource на фиктивный курсор, который уже создан с теми же полями, что и курсор, на котором основана сетка. После выполнения SELECT-SQL измените свойство RecordSource обратно на восстановленный курсор. Это позволяет свойствам столбцов и заголовков оставаться неизменными при перестроении курсора.
Состояние
Такое поведение предусмотрено программой.
Дополнительные сведения о шагах по воспроизведению поведения
Откройте таблицу Customer.dbf, расположенную в каталоге \Vfp\Samples\Data, и создайте форму с именем GridForm.
Поместите следующий код в событие загрузки формы:
SELECT cust_id, city, country FROM customer INTO CURSOR Temp1 SELECT cust_id, city, country FROM customer WHERE country = "" ; INTO CURSOR Temp2Поместите следующий код в событие формы Destroy:
SELECT Temp1 USE SELECT Temp2 USEПоместите сетку в форму и присвойте сетке следующие параметры свойств:
ColumnCount=3 RecordSourceType=Alias RecordSource=Temp1Измените заголовок grid1.Column1.header1 на "Идентификатор клиента" и установите свойство ширины Column1 равным 100.
Добавьте текстовое поле в форму.
Добавьте кнопку команды и поместите следующий код в событие Click:
THISFORM.GRID1.RECORDSOURCE = "Temp2" SELECT cust_id, city, country FROM customer ; WHERE country = Thisform.text1.value ; INTO CURSOR Temp1 THISFORM.GRID1.RECORDSOURCE = "Temp1"Запустите форму. Введите Испанию в текстовом поле и нажмите кнопку команды. Сетка должна отображать все записи, в которых поле страны равно Испании. Имя заголовка столбца 1 остается неизменным, а ширина столбца не изменяется. При изменении источника данных сетки на курсор под названием Temp2, свойства столбцов и заголовков не сбрасываются при перестроении курсора Temp1.
Измените две строки
THISFORM.GRID1.RECORDSOURCEв событии Click кнопки управления на комментарии и добавьте следующую строку в качестве последней строки кода:THISFORM.GRID1.RECORDSOURCE = THISFORM.GRID1.RECORDSOURCE
После запуска формы введите имя страны в текстовом поле и нажмите кнопку команды, обратите внимание, что имя столбца изменяется и ширина меньше.