powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Cursor Adapter - полезные "фишки" - на основе набитых "шишек"
25 сообщений из 26, страница 1 из 2
Cursor Adapter - полезные "фишки" - на основе набитых "шишек"
    #33973867
-=AlexiS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Продолжая освоения Cursor Adapter все больше убеждаюся что штука весьма полезная , хотя и достаточно капризная.
НО для того чтобы сделать что-то быстро и не особо напрягаясь - просто незаменимая.
Вот решил поделится кое-каким опытом, полученным в "борьбе за правое дело"

1. Если вы работаете через один конект - ОБЯЗАТЕЛЬНО устанавливайте
Код: plaintext
1.
2.
FetchSize=- 1 
FetchAsNeeded=.f.
если этого несделать то возникает проблема с занятостью конекта при загрузке данных.
2. Если вам все-же нужно пользоваться загрузкой по частям :
Если такой курсор один - он должен загружаться последним.
Перед обновлениями других CA вы должны быть уверены что все данные в него загружены.

НО все-же лучше использовать несколькоь "конектов" или "шаредконектов"

3. Если CA по какой-то причине не "заполнился" т.е. не отработал метод CursorFill - ошибка не генерируется :-(
Чтобы отловить ее - в методе AfterCursorFill помешаем код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Local lERR[ 1 ]

If lResult=.F.
	Aerror(lERR)
	If Type('lErr[1,1]')<>'U'
		lcErr= Substr(lERR[ 1 , 2 ], Rat("]", lERR[ 1 , 2 ]) +  1 )
	Else
		lcErr="Unknown error"
	Endif
	Messagebox("Can not load data in CA-"+This.Name+Chr( 13 )+;
		'-------------------------------------------------------'+Chr( 13 )+;
		lcErr+Chr( 13 )+;
		'-------------------------------------------------------';
		, 16 ,'Data Load error')
Endif

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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Local lERR[ 1 ]

If lResult =.F.
	Aerror(lERR)
	If Type('lErr[1,1]')<>'U'
		lcErr= Substr(lERR[ 1 , 2 ], Rat("]", lERR[ 1 , 2 ]) +  1 )
	Else
		lcErr="Unknown error"
	Endif
	Messagebox("Can not load data in CA-"+This.Name+Chr( 13 )+;
		'-------------------------------------------------------'+Chr( 13 )+;
		lcErr+Chr( 13 )+;
		'-------------------------------------------------------';
		, 16 ,'Data Load error')
	If Type('This.parent.Data_load_ok')<>'U'
                 * Data_load_ok - это свойство моего класса DE - 
                 * Вы можете работать с чем хотите 
                 *       - например с глобальной переменной
		This.Parent.Data_load_ok=.f.
	Endif
Endif 

В Form.Init

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
lcDENam='this.'+ALLTRIM(this.DEClass)
loDE=EVALUATE(lcDENam)

IF !loDE.Data_load_ok
  MESSAGEBOX('Data load error', 16 ,'Error!')
  RETURN .f.
endif  

Вот - если кому интересно , спрашивайте поделюсь опытом.
Ежели кто еще что-то важное знает - пишите.

PS Все вышесказанное относится к работе с MSSQL 2000
...
Рейтинг: 0 / 0
Cursor Adapter - полезные "фишки" - на основе набитых "шишек"
    #33974391
Проходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если CA по какой-то причине не "заполнился" т.е. не отработал метод CursorFill - ошибка не генерируется :-(
Зато сам этот метод возвращает логическое выражение, показывающее успешность выполнения метода.

Код: plaintext
1.
2.
3.
4.
If CursorFill()
  *успешно
else
  *неудачно, есть ошибки
endif
...
Рейтинг: 0 / 0
Cursor Adapter - полезные "фишки" - на основе набитых "шишек"
    #33974527
-=AlexiS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To проходящий
метод то возвращает - если вызывать его "ручками".
А ежели CA в DE - и ошибка при "первичной" загрузке ?
где его (возврат) проверять - только в aftercursorfill.
...
Рейтинг: 0 / 0
Cursor Adapter - полезные "фишки" - на основе набитых "шишек"
    #33974551
-=AlexiS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и в догонку
естественно , если я вызываю fill CA "ручками" , например делая это при составлении динамического WHERE,
у меня работает проверка возврата и откат (по возможности ) к последнему "правильному" значению SelectCmd или выход( ежели ошибка "фатальная").
...
Рейтинг: 0 / 0
Cursor Adapter - полезные "фишки" - на основе набитых "шишек"
    #33974844
Недоходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 -=AlexiS=-

Вопрос таков. Не получаеться после создания СА переделать запрос. Т.е. создаю СА с таким условием select * from requests where kod=5, а потом хочу изменить на такой select * from requests where kod=3 and kod=8. Не работает. Как осуществить этоу процедурку?
...
Рейтинг: 0 / 0
Cursor Adapter - полезные "фишки" - на основе набитых "шишек"
    #33974845
Проходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотри хелп по курсор-адаптеру про свойство BreakOnError.
...
Рейтинг: 0 / 0
Cursor Adapter - полезные "фишки" - на основе набитых "шишек"
    #33974859
Проходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Недоходящий:

where kod=3 and kod=8
А что, существут записи, в которых одновременно kod равен и 3, и 8? Может или 3 или 8? Тогда заменить and на or.
...
Рейтинг: 0 / 0
Cursor Adapter - полезные "фишки" - на основе набитых "шишек"
    #33974880
Недоходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 проходящий

Опечатка. Надо OR. Это просто уточнение мое проблемы что есть один запрос и нужно переделать его на другой. Использовал св-ва СА по изменению запросов, ниче не получаеться.
...
Рейтинг: 0 / 0
Cursor Adapter - полезные "фишки" - на основе набитых "шишек"
    #33974895
Проходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда поясни термин "не получается". Что, где и как делаешь и какой результат получаешь и ожидаешь. Можно код здесь показать, чтоб не гадать что на самом деле там у тебя написано.
...
Рейтинг: 0 / 0
Cursor Adapter - полезные "фишки" - на основе набитых "шишек"
    #33974970
-=AlexiS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проходящийПосмотри хелп по курсор-адаптеру про свойство BreakOnError.
Ха, а то не смотрел ...
Кин-дза-дза"Я не бездействовал , я капу сразу нажал "
BreakOnError BreakOnError applies only when the cursor adapter executes an event or an SQL INSERT, UPDATE, or DELETE command.
BreakOnError применяется только в случае, если cursor adapter исполняет код в методах, ассоциированных с событиями или командамиSQL INSERT, UPDATE, или DELETE

и из хелпа по cursorfill
Note
If CursorFill returns False (.F.), the cursor is discarded. In this case, the BeforeCursorClose Event and AfterCursorClose Event events do not occur. To retrieve error information when CursorFill returns False (.F.), you must call the AERROR( ) Function function because Visual Foxpro error handling, such as the ON ERROR command, Error event, and TRY...CATCH...FINALLY command, does not capture this error information.

Т.е. BreakOnError непомогает .

ТО Недоходящий
если ты хочешь изменить текст запроса ,
то должен сделать после этого CursorFill
можно изменять текст в BeforeCursorFill меняя параметр сSelectCmd- тогда исходный текст SelectCmd не измениться, либо менять сам текст SelectCmd
но полюбому для того чтобы новый текст отработал , нужно вызывать CursorFill
CursorRefresh не поможет.
например
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
замена исходного запроса
*********
oCA=Getcursoradapter('CA')
oCA.SelectCmd='SELECT'
oCA.CursorFill(.T.,.F.)
********
замена в методе BeforeCursorFill - исходный запрос не трогаем
******
If Param1= 1 
	cSelectCmd='Select1'
endif
RETURN .t.

и где-то в проге
Param1= 1 
oCA=Getcursoradapter('CA')
oCA.CursorFill(.T.,.F.)
выполниться Select1

Param1= 2 
oCA=Getcursoradapter('CA')
oCA.CursorFill(.T.,.F.)
выполниться 'исходный ' Select
*******

почитай тут очень подробно и на русском языке
...
Рейтинг: 0 / 0
Cursor Adapter - полезные "фишки" - на основе набитых "шишек"
    #33976120
Недоходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 -=AlexiS=-

Ага вот как. А я пробывал изменить сам селектцмд и делать курсор рефреш
...
Рейтинг: 0 / 0
Cursor Adapter - полезные "фишки" - на основе набитых "шишек"
    #34019722
Worman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Проблема у меня следующая:
Есть приложение, написанное на vfp 8.0. Для работы с SQL сервером использую нескольо CA. Время от времени возникает такая ошибка:

Невозможно обновить объект ADODB.RecordSet пока курсор вызванный методом CursorAdapter.CursorFill не будет вложен в объект CursorAdapter.

Причём мой обработчик ошибок это не ловит. Сообщение выскакивает в стандартном виндоусовском окошке, в котором, если я не ошибаюсь, 2 кнопочки: 'OK' и 'help'(или 'cancel') Вообщем куда ни жми, окошко появляется опять, и так до бесконечности. Остановить это через диспетчер задач невозможно. В итоге помогает только перезагрузка компьютера.

Искуственно смоделировать ситуацию, когда возникает ошибка, не получается. Просто не понимаю от чего и в каком случае это случается.

Может у кого-нибудь случалось подобное или хотя бы есть какие-нибудь предположения?

Заранее спасибо.
...
Рейтинг: 0 / 0
Cursor Adapter - полезные "фишки" - на основе набитых "шишек"
    #34020089
ооророро
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А откуда там взялся ADODB.RecordSet ?
...
Рейтинг: 0 / 0
Cursor Adapter - полезные "фишки" - на основе набитых "шишек"
    #34020094
-=AlexiS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Worman
а там ошибка не генерится - ловите через Aerror() в Aftercursorfill
...
Рейтинг: 0 / 0
Cursor Adapter - полезные "фишки" - на основе набитых "шишек"
    #34020153
oppoppoppp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Надо просто посмотреть настройки CA. Где там ссылка на ADO ?
...
Рейтинг: 0 / 0
Cursor Adapter - полезные "фишки" - на основе набитых "шишек"
    #34020171
Worman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-=AlexiS=-to Worman
а там ошибка не генерится - ловите через Aerror() в Aftercursorfill

Спасибо, попробую.
Но желательно конечно устранить источник ошибок. Нет никаких идей, что это может быть?
...
Рейтинг: 0 / 0
Cursor Adapter - полезные "фишки" - на основе набитых "шишек"
    #34020257
-=AlexiS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
к сожалению с ADO не работаю , поэтому ничего подсказать не смогу .
Чуть выше я давал ссылку - там есть и про ADO - попробуйте задать вопрос непосредственно Юрию - он ту тоже частенько "появляется" под ником Jurisfox
...
Рейтинг: 0 / 0
Cursor Adapter - полезные "фишки" - на основе набитых "шишек"
    #34020347
Проходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, раз топик продолжает жить, дадим еще пищу для размышления.
CursorFill - метод. И далеко не всегда возвращающий одно и тоже.
...
Рейтинг: 0 / 0
Cursor Adapter - полезные "фишки" - на основе набитых "шишек"
    #34020594
Адаптер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СА -одно из самых и бестолковых введений в фоксе от MS , как и репорт листен.
Удачи.
...
Рейтинг: 0 / 0
Cursor Adapter - полезные "фишки" - на основе набитых "шишек"
    #34020611
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У MS в первой версии ни один продукт еще не был толковым ;-)
Глядишь, если это дело не забросят, в следующей версии CA станет уже нормальным рабочим инструментом.
...
Рейтинг: 0 / 0
Cursor Adapter - полезные "фишки" - на основе набитых "шишек"
    #34020872
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Адаптер, а обосновать сможешь?
...
Рейтинг: 0 / 0
Cursor Adapter - полезные "фишки" - на основе набитых "шишек"
    #34020888
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
http://forum.foxclub.ru/read.php?29,227595

интересно, а как можно
это сделать без репортлистнера

http://www.daquas.cz/fox/devcon2006/materialy/FOX22.zip
...
Рейтинг: 0 / 0
Cursor Adapter - полезные "фишки" - на основе набитых "шишек"
    #34020901
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А, да забыл еще

do form - это тоже отстой

define window - это круто


хоть стой, хоть падай
...
Рейтинг: 0 / 0
Cursor Adapter - полезные "фишки" - на основе набитых "шишек"
    #34020917
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WormanЕсть приложение, написанное на vfp 8.0. Для работы с SQL сервером использую нескольо CA. Время от времени возникает такая ошибка:

Искуственно смоделировать ситуацию, когда возникает ошибка, не получается. Просто не понимаю от чего и в каком случае это случается.
Как насчет того, чтобы перейти на 9 версию + SP1 (Там CA сильно улучшили)...
...
Рейтинг: 0 / 0
Cursor Adapter - полезные "фишки" - на основе набитых "шишек"
    #34021289
-=AlexiS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АдаптерСА -одно из самых и бестолковых введений в фоксе от MS , как и репорт листен.

Как говорят у нас - "Опять за рыбу грошы... "

Я бы все-же сказал так
СА -одно из самых и ТОЛКОВЫХ введений в фоксе от MS , неговоря уже об репорт листен.
Тем более что в 9 многое доведено до ума.

CA - являющийся по своей сути "оберткой" для SQLEXEC - весьма облегчает работу при построении простых интерфейсов.
Причем что удобно - CA объеденяет в себе и "конект" и способ модификации данных , поэтому изменение источника данных или способа добавления/изменения/удаления необходимо произвести только в самом CA и не надо лазить по коду формы.
Ну и возможность создания классов на основе CA и DE так-же позволяет облегчить себе жизнь.

Насчет превращения репорта в объект вообще промолчу - тут все удобства очевидны.

Кстати - нашел еще одно хитрое применение CA.
Поскольку данные у меня на MSSQL - многие курсоры получаю с помощью SQLEXEC. Гриды и прочие контролы на форме приходиться прописывать ручками - а это как-то лениво.
Для облегчения себе жизни делаем :
1. создаем в DE курсорадаптер , возвращающий курсор нужной структуры.
2. Пользуемся драг&дропом для создания контролов на форме.
3. Если CA не нужен - сносим его .
Получаеться очень быстро и удобно.
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Cursor Adapter - полезные "фишки" - на основе набитых "шишек"
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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