Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / CursorAdapter и Grid / 12 сообщений из 12, страница 1 из 1
19.08.2004, 11:23
    #32656263
T0lik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CursorAdapter и Grid
Уважаемые специалисты!
Решил поиграться с CursorAdapter, создал на его основе класс.
В методе Init формы пишу:
o_Cursor = CreateObject("MyCursorAdapter")
WITH o_Cursor
.Alias = "AssortCurs"
.SelectCmd = "Select * FROM Assort"
o_Cursor.CursorFill
ENDWITH
This.Grid1.RecordSource = "AssortCurs"

Грид выводится пустой.
При замене последней строчки на:
SELECT * From AssortCurs INTO CURSOR Curs1
This.Grid1.RecordSource = 'Curs1'
всё работает.
А как можно ли отобразить данные без этого промежуточного курсора?
...
Рейтинг: 0 / 0
19.08.2004, 16:28
    #32657317
sar99
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CursorAdapter и Grid
Добрый день!
Код создания курсора-адаптера необходимо перенести
в load формы
после этого кода:
select ('алиас курсора-адаптера')
go top
связывание с grid нужно оставить в init
(или привязать визуально при создании grid на форме)
...
Рейтинг: 0 / 0
19.08.2004, 17:08
    #32657447
T0lik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CursorAdapter и Grid
Может я неправильно создаю CursorAdapter?
Перенёс его создание в Load, когда дохожу до Init курсора уже нету :(.
...
Рейтинг: 0 / 0
20.08.2004, 08:09
    #32658021
sar99
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CursorAdapter и Grid
В ВАШЕЙ ГОЛОВНОЙ ПРОГРАММЕ:
PUBLIC O_CURSOR
ИЛИ ДРУГИМ ДОСТУПНЫМ ВАМ СПОСОБОМ ОБЕСПЕЧИТЬ
ОБЛАСТЬ ВИДИМОСТИ O_CURSOR В ПРЕДЕЛАХ НУЖНЫХ ВАМ!!!
...
Рейтинг: 0 / 0
20.08.2004, 08:27
    #32658031
T0lik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CursorAdapter и Grid
Public помог, извините, мог бы и сам дойти.
Теперь работает даже без переноса создания курсора в Load.
Только вот непонятно, почему он изчезает даже в пределах текущей формы :(.
Ну да ладно, главное от дополнительного курсора избавился :).
...
Рейтинг: 0 / 0
20.08.2004, 09:14
    #32658084
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CursorAdapter и Grid
В FoxPro если область видимости переменной не указана явно, то все новые переменные создаются с областью видимости PRIVATE (в командном окне - PUBLIC)

Когда Вы написали строку

o_Cursor = CreateObject("MyCursorAdapter")

Вы создали переменную o_Cursor с областью видимости PRIVATE, которая и была благополучно удалена по окночании метода Init. Т.е. просто не осталось объекта CursorAdapter. Нет источника для Grid

При работе с формами логичнее создавать не переменные, а свойства формы

Работа с PUBLIC-переменными - требует повышенной бдительности от программиста. Если Вы начинающий, то ни в коем случае их НЕ ИСПОЛЬЗУЙТЕ. Получите кучу проблем, причем не зная из-за чего.

Создать свойство формы можно в дезайнере через пункт Forms->Add Property

или программно, через метод ThisForm.AddProperty()

Например, Вы создали свойство ThisForm.CursorAdapter, тогда в методе Init так и пишите:

Код: plaintext
1.
2.
3.
4.
5.
6.
ThisForm.CursorAdapter = CreateObject("MyCursorAdapter")
WITH ThisForm.CursorAdapter
	.Alias = "AssortCurs"
	.SelectCmd = "Select * FROM Assort"
	.CursorFill()
ENDWITH
ThisForm.Grid1.RecordSource = "AssortCurs"

Правда, в последнем присовении (RecordSource) я не уверен. Надо поэкспериментировать.
...
Рейтинг: 0 / 0
20.08.2004, 09:21
    #32658097
sar99
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CursorAdapter и Grid
без переноса в load у Вас все работает ,так как Вы
явно тут же связываете GRID и o_cursor
если связывание выполнено в конструкторе формы,
объявление o_cursor должно быть только в load.

в общем случае все базы лучше открывать или ранее
чем создается экземпляр класса для формы или
в load этой формы.(init и activate не подходят для этого)
...
Рейтинг: 0 / 0
20.08.2004, 09:29
    #32658113
T0lik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CursorAdapter и Grid
Замечательно, как раз то что надо.
Спасибо.
...
Рейтинг: 0 / 0
20.08.2004, 09:35
    #32658118
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CursorAdapter и Grid
sar99в общем случае все базы лучше открывать или ранее
чем создается экземпляр класса для формы или
в load этой формы.(init и activate не подходят для этого)
Проблема в том, что параметры переданные в форму попадают в нее в методе Init. Собственно, именно поэтому часть источников данных создается (модифицируется) именно в Init-формы. В зависимости от переданных параметров.

Особой проблемы прицепить источник данных в Init-формы нет. Просто потребуется чуть больше кода. Хотя, конечно, при открытии таблиц в Load потребуется меньше кодить.
...
Рейтинг: 0 / 0
20.08.2004, 11:04
    #32658376
sar99
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CursorAdapter и Grid
Eще почему удобно в load:
если в многопользовательской среде для формы открываем
например 5 файлов и при открытии 4-го он занят
то вариант инициализации формы очень удобен:

contropen=0
wop1=createobject('wop')
if contropen=0
wop1.show()
else
wop1.release
endif

в load организуем открытие и проверку(например вдруг тот же
cursor_adapter почему-то сбой даст)
в этом случае пользователю выдастся соответствующее сообщение
contropen=1 (в load) - и форма даже не визуализируется!!!

(при этом в unload организуется автоматическое закрытие файлов.)
...
Рейтинг: 0 / 0
20.08.2004, 11:11
    #32658397
T0lik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CursorAdapter и Grid
Форму я открываю с параметрами, так что однозначно мне всё надо в Init делать.
авторОсобой проблемы прицепить источник данных в Init-формы нет. Просто потребуется чуть больше кода. Хотя, конечно, при открытии таблиц в Load потребуется меньше кодить.
Имеется в виду
ThisForm.Grid1.RecordSource = ''
Перед
ThisForm.Grid1.RecordSource = 'AssortCurs'?
...
Рейтинг: 0 / 0
20.08.2004, 11:42
    #32658514
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CursorAdapter и Grid
sar99в load организуем открытие и проверку(например вдруг тот же
cursor_adapter почему-то сбой даст)
в этом случае пользователю выдастся соответствующее сообщение
contropen=1 (в load) - и форма даже не визуализируется!!!

Надеюсь, Вы в курсе, что если дать команду RETURN .F. в методе LOAD-формы ИЛИ в методе INIT-формы, то процесс открытия формы будет прерван? Т.е. с точки зрения отказа в открытии формы эти 2 метода абсолютно равноправны.

T0likФорму я открываю с параметрами, так что однозначно мне всё надо в Init делать.
авторОсобой проблемы прицепить источник данных в Init-формы нет. Просто потребуется чуть больше кода. Хотя, конечно, при открытии таблиц в Load потребуется меньше кодить.
Имеется в виду
ThisForm.Grid1.RecordSource = ''
Перед
ThisForm.Grid1.RecordSource = 'AssortCurs'?
Да. Для LOAD такой необходимости нет, поскольку Grid к этому моменту не инициализирован. А в INIT это необходимо.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / CursorAdapter и Grid / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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