powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Класс с IMPLEMENTS загнать в библиотеку...
68 сообщений из 68, показаны все 3 страниц
Класс с IMPLEMENTS загнать в библиотеку...
    #34595717
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые гуру FoxPro,

у меня возникла необходимость добавить в свою библиотеку классов класс,
объявляемый с IMPLEMENTS.

Код: plaintext
1.
2.
3.
4.
5.
DEFINE CLASS adoEHandler AS Form
IMPLEMENTS RecordsetEvents IN "adodb.recordset"
***************************************
* тут описание тела класса....
***************************************


Что-то по-простому не получается,
кто-нибуть пробовал?
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34598026
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или это очередное подтверждение отстойности foxpro?
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34598874
Al_fa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anton_Gusev Или это очередное подтверждение отстойности foxpro?
У меня с Implements например никаких проблем не возникает. Но я не собираюсь делать вывод об абсолютной совершенности foxpro на этом основании. Если бы чуть подробнее все описал , то возможно тебе бы что и подсказали. Мы же здесь не телепаты , чтобы брать все детали из твоей головы.
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34598952
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
то есть слова "добавить в свою библиотеку классов" ничего Вам не говорят?

... хорошо,

1. есть библиотека классов - файл my-custom-mega-class.vcx.
2. есть класс, объявленный в программе (в файле mega-main.prg) - см. мой первый пост.
3. хочу, чтобы класс из п.2 оказался в библиотеке классов из п.1
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34598998
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А теперь поясните вкладываемый Вами в слово "оказался" смысл и какое отношение в Вашем понимании к этому имеет Implements.
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34599148
Al_fa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Штатными средствами это вряд ли можно сделать. Разве што напрямую поправить vcx. Но только зачем невизуальный обработчик интерфейса вставлять в библиотеку визуальных классов ?
Это похоже на попытку почесать левое ухо правой пяткой. Тем более , что есть целая куча невизуальных классов , которые в vcx не засунуть. Так что без mega-main.prg все равно никак не обойтись.
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34599161
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ок,

обычно как я поступал - с помощь ClassBrowser-a открывал свою
библиотеку (.vcx) и создавал в ней какой-нибуть класс, прописывал
в нем поля и методы - это вы и без меня знаете :).

Теперь я пытаюсь описать в своей библиотеке тем же способом
класс, с одной лишь особенностью - ключевым словом "IMPLEMENTS".

И этто мне никак не удается, потому что я не знаю как указать
ClassBrowser-у, что класс должен имплементировать события
некоторого другого класса (в данном случае adodb.recordset),
ибо не вижу в мастере никаких полей ввода или чекбоксов,
отвечающих за это свойство.

зы:
под "оказался" я подразумевал, что в библиотеке будет
создан класс "adoEHandler" по функциональности идентичный,
описываемому в простой программе через "DEFINE CLASS adoEHandler
AS Form IMPLEMENTS RecordsetEvents IN "adodb.recordset" ...".

> Al_fa
это как же невизуальный?
"DEFINE CLASS adoEHandler AS Form ..."
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34599163
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Достал меня уже это фокс - 3 года работаю - одни западлянки - то одного нет, то другого, то через Ж.. работает.
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34599172
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жуть какая...

А Вы не пробовали понять идеологию, на которой построен фокс, а не основываться на идеологии, взятой из какой-то другой системы? На чем основана уверенность, что фокс должен вести себя всегда только в соответствии с Вашими понятиями? Ваши понятия - эталон поведения?

А хелп по теме хорошенько почитали? А там как раз и про recordset есть.
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34600391
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Благодарю за совет, но обычно я перерою весь хелп, прежде чем пишу в форум. Возможно я что-то там и упустил, если так - приведите название статьи пожалуйста.
Идею и назначение foxpro прекрасно себе представляю, так что не надо прекрывать его косяки какими-то светлыми идеями. В других системах, предназначенных для тех же целей почему-то все более гладко.

зы: так есть ли какое-то решение моей проблемы :) ?
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34600399
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Статья называется так:
Visual FoxPro and Advanced COM

Еще хотелось бы уточнить для решения какой задачи и почему был выбран такой способ?

О каких других, предназначенных для тех же целей идет речь?

Для поиска решения проблемы надо точно знать проблему. Пока же много эмоций и мало технических подробностей.

На фокс три года не с дельфы ли был переход?
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34600588
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey SizovЕще хотелось бы уточнить для решения какой задачи и почему был выбран такой способ?
+1

FoxPro лучший Framework для C++ и многие вещи в нем делаются одной простой командой, не прибегая к adodb... Как Вам правильно заметили выше - идеология у FoxPro отличается от Delphi - тут уже все для Вас сделано и очень важно просто применить правильный подход...

But anyway, good luck!
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34600606
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
- Понятно на счет статьи - собственно на ее основе и был написан мой класс. Вопрос в том - как класс поиметь в моей библиотеке? Пока у меня такое впечатление, что никак - прийдется создавать файлик с описанием класса и запускать его из главной проги, то есть - как всегда.

- Для какой задачи? Класс создан (исходник скину завтра, если надо) на основе формы с привязкой к событиям ADO. Все это для того, чтобы при загрузке большого числа записей рекордсета асинхронно показывать формочку и на ней индицировать процесс, если он длится более, чем N секунд. При необходимости процесс может быть прерван пользователем.

- Сорри за эмоции - не могли не выплеснуться, хотя место не совсем удачное - кругом одни фаны фокса - на поддержку расчитывать не приходится :) Кто-то тут даже написал типа - "фокспро это религия" - ню-ню :)

- Ранее применял для написания пользовательского интерфейса к БД под винду С++Builder, сейчас параллельно C# изучаю. Не секрет, что эти среды программирования решают широкий круг задач, в которые входят и задачи фокса.

- На фоксе вынужден прогать из-за политики партии :).
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34600608
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Ch Sergey SizovЕще хотелось бы уточнить для решения какой задачи и почему был выбран такой способ?
+1

FoxPro лучший Framework для C++ и многие вещи в нем делаются одной простой командой, не прибегая к adodb... Как Вам правильно заметили выше - идеология у FoxPro отличается от Delphi - тут уже все для Вас сделано и очень важно просто применить правильный подход...

But anyway, good luck!


Да, согласен, фокс ограничивает вашу фантазию и дает то, что он сам считает нужным. То есть нужно изрядно погемороиться, чтобы наваять что-то custom-ное.
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34600739
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton_Gusev- На фоксе вынужден прогать из-за политики партии :).
Похоже надо или партию менять, или все-таки в нее вступать :)

Зачем ADO-то? Фокс не дельфи или С#. Для 99% задач достаточно встроенных средств, потому что они эффективней, надо только пользоваться ими научиться. Рекомендую книжку почитать М.Базиян "Использование Visual FoxPro 6", там идеология хорошо описана.
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34600826
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton_Gusev Все это для того, чтобы при загрузке большого числа записей рекордсета асинхронно показывать формочку...
Вот мы и дошли до сути... Зачем "тащить на клиента" много записей? В лучшем случае 1

Теперь Вам можно рассказать, что за задача, когда требуется на клиенте много записей и какая база данных используется для их хранения...

P.S. Про религию Вы зря...
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34600839
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну что ж, ждем исходники.

Упомянутые системы на основе языка С по определению компиляторы, а фокс - интерпретатор. Одно это уже очень сильно отличает его от этих систем, как, впрочем, и от остальных. Соответственно, и мышление программиста, и применяемые подходы в фоксе иногода очень сильно отличаются от подходов в других системах. И именно это вызывает самые большие сложности у программировавших ранее на "правильных" языках и в силу каких-либо обстоятельств вынужденных перейти на фокс. Боюсь, здесь именно такой случай.
К тому же, фокс сам по себе СУБД, в отличие, опфть же, от упомянутых систем и заточен, в первую очередь, для обработки данных, а не организации взаимодействия различных программ, для чего, собственно, придуманы интерфейсы и их имплементация. Потому в нем и нет секции объявления интерфейса и секции его реализации. Не нужны они при заложенной в фокс идеологии. И это надо понять и принять как данность, а не пытаться бороться с ветряными мельницами. Если использовать предложенную однажды здесь Владимиром Максимовым аналогию с разными типами автомобильного движения в Британии и в Европе. Они разные, но ни про одну из них нельзя сказать, что они "кривые", "заморочные", "отстойные" и т.д.

Потому посоветую еще раз попытаться отбросить уже привычные по С-подобным языкам догмы и привычки и еще раз попытаться понять идеологию фокса. И тогда все сразу встанет на свои места и жизнь станет намного легче.
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34601409
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код, на данной стадии...

Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
*********************************************************
DEFINE CLASS adoEHandler AS Form
*********************************************************
IMPLEMENTS RecordsetEvents IN "adodb.recordset"
*********************************************************
*
*	Пример использования класса
*
*		
*			rsAdo = CreateObject( "ADODB.Recordset" )
*		
*			&& .....
*		
*			rsAdo.CursorLocation= adUseClient
*			rsAdo.Properties("Initial Fetch Size") =  10 		&& или другое значение >  0 
*											    &&   такое вы сможете в фоксе?
*
*			oEvents = NEWOBJECT("adoEHandler")		   && привязка обработчика
*			rsAdo.Open(,,,, adAsyncFetch)
*			EVENTHANDLER(rsAdo, oEvents)
*
*			DO WHILE .T.
*				IF	adStateOpen = rsAdo.State	;
*				OR	oEvents.isCanceled
*					EXIT
*				ENDIF
*				wPause( 0 . 3 )	&& пауза  0 . 3  сек
*				DOEVENTS
*			ENDDO
*
*			&& Дальше работаем с rsAdo
*
*********************************************************

	ADD OBJECT LabelStatus	 AS Label WITH Left= 10 , Top= 10 , AutoSize=.T., Caption="" &&, WordWrap=.T.
	ADD OBJECT ShapeProgress AS Shape WITH Left= 10 , Top= 40 , Height =  10 , Width= 0 , BackColor=RGB( 0 ,  0 ,  128 )
	ADD OBJECT LabelRCount	 AS Label WITH Left= 10 , Top= 60 , AutoSize=.T., Caption=""
	ADD OBJECT ButtonStop	 AS CommandButton WITH Left= 300 , Top= 60 , Caption="Stop", Visible=.T.
	ADD	OBJECT TimerShow	 AS Timer WITH Interval= 2000 
	
	RecordsCount 	=  0 
	isCanceled	  = .F.

	PROCEDURE Init
		This.Caption 		= "Получение данных, состояние..."
		This.WindowType		=  1  
		This.AutoCenter		= .T.
		This.AlwaysOnTop	= .T.
		This.HalfHeightCaption= .T. 
		This.ControlBox		= .F.
		This.BorderStyle	=  2  
		This.Height			=  80 
		This.Width			=  400 
		
		BINDEVENT(This.TimerShow, "Timer", ;
							This, "SetVisible" )
		BINDEVENT(This.ButtonStop, "Click", ;
							This, "StopProcess" )
							
		_Screen.MousePointer=  11 
		DOEVENTS
	*
	***


	PROCEDURE Destroy
		sbMessageStartLoad( ;
			"Загружено записей: " + ;
						TRANSFORM(This.RecordsCount) )
	*
	***

	
	PROCEDURE SetVisible
		This.Visible	= .T.
		
		This.TimerShow.Enabled = .F.
		BINDEVENT(This.TimerShow, "Timer", ;
						This, "IncrementProgressBar")
		This.TimerShow.Enabled = .T.
		
		_Screen.MousePointer=  0 
	*
	***


	PROCEDURE StopProcess
		This.isCanceled	= .T.
		This.ButtonStop.Enabled = .F.
		DOEVENTS
	*
	***


	PROCEDURE IncrementProgressBar
		This.ShapeProgress.Width = This.ShapeProgress.Width +  2 
		This.LabelRCount.Caption = "Получено записей: " + ;
									TRANSFORM(This.RecordsCount)
				
		IF	This.ShapeProgress.Width > (This.Width -  20 )
			This.ShapeProgress.Width =  0 
		ENDIF
		DOEVENTS
	*
	***
		

	PROCEDURE Recordsetevents_WillChangeField(	;
					cFields		AS Number @, 	;
					Fields		AS VARIANT @, 	;
					adStatus	AS VARIANT @, 	;
					pRecordset	AS VARIANT @) 		AS VARIANT

		This.LabelStatus.Caption = TRANSFORM(DATETIME())+', начало обновления'
	*	wPause ( 1 )
	***	
	
	PROCEDURE Recordsetevents_FieldChangeComplete(	;
					cFields 	AS Number @, 	;
					Fields 		AS VARIANT @, 	;
					pError 		AS VARIANT @, 	;
					adStatus 	AS VARIANT @, 	;
					pRecordset 	AS VARIANT @)		AS VARIANT

		This.LabelStatus.Caption = TRANSFORM(DATETIME())+', завершение обновления'
	*	wPause ( 1 )
	***
	
	PROCEDURE Recordsetevents_WillChangeRecord(	;
					adReason 	AS VARIANT @, 	;
					cRecords 	AS Number @, 	;
					adStatus 	AS VARIANT @, 	;
					pRecordset 	AS VARIANT @) 		AS VARIANT

		This.LabelStatus.Caption = TRANSFORM(DATETIME())+', обновление записи'
	*	wPause ( 1 )
	***
	
	PROCEDURE Recordsetevents_RecordChangeComplete(	;
					adReason 	AS VARIANT @, 	;
					cRecords 	AS Number @, 	;
					pError 		AS VARIANT @, 	;
					adStatus 	AS VARIANT @, 	;
					pRecordset 	AS VARIANT @) 		AS VARIANT

		This.LabelStatus.Caption = TRANSFORM(DATETIME())+', обновление записи завершено'
	*	wPause ( 1 )
	***
	
	PROCEDURE Recordsetevents_WillChangeRecordset(	;
					adReason 	AS VARIANT @, 	;
					adStatus 	AS VARIANT @, 	;
					pRecordset 	AS VARIANT @) 		AS VARIANT

		This.LabelStatus.Caption = TRANSFORM(DATETIME())+', изменение данных'
	*	wPause ( 1 )
	***
	
	PROCEDURE Recordsetevents_RecordsetChangeComplete(	;
					adReason 	AS VARIANT @, 	;
					pError 		AS VARIANT @, 	;
					adStatus 	AS VARIANT @, 	;
					pRecordset 	AS VARIANT @) 		AS VARIANT

		This.LabelStatus.Caption = TRANSFORM(DATETIME())+', изменение данных выполнено'
	*	wPause ( 1 )
	***
	
	PROCEDURE Recordsetevents_WillMove(			;
					adReason 	AS VARIANT @, 	;
					adStatus 	AS VARIANT @, 	;
					pRecordset 	AS VARIANT @) 		AS VARIANT

		This.LabelStatus.Caption = TRANSFORM(DATETIME())+', получение записи'
	*	wPause ( 1 )
	***
	
	PROCEDURE Recordsetevents_MoveComplete(		;
					adReason 	AS VARIANT @, 	;
					pError 		AS VARIANT @, 	;
					adStatus 	AS VARIANT @, 	;
					pRecordset 	AS VARIANT @) 		AS VARIANT

		This.LabelStatus.Caption = TRANSFORM(DATETIME())+', запись получена'
		This.RecordsCount = This.RecordsCount +  1 
		This.IncrementProgressBar()
	*	wPause ( 1 )
	***
	
	PROCEDURE Recordsetevents_EndOfRecordset(	;
					fMoreData 	AS LOGICAL @, 	;
					adStatus 	AS VARIANT @, 	;
					pRecordset 	AS VARIANT @) 		AS VARIANT

		This.LabelStatus.Caption = TRANSFORM(DATETIME())+', все данные загружены'
	*	wPause ( 1 )
	***
	
	PROCEDURE Recordsetevents_FetchProgress(	;
					Progress 	AS Number @, 	;
					MaxProgress AS Number @, 	;
					adStatus 	AS VARIANT @, 	;
					pRecordset 	AS VARIANT @) 		AS VARIANT

		This.LabelStatus.Caption = TRANSFORM(DATETIME())+', загрузка данных'
		DOEVENTS	
	*	wPause ( 1 )
	***
	
	PROCEDURE Recordsetevents_FetchComplete(	;
					pError 		AS VARIANT @, 	;
					adStatus 	AS VARIANT @, 	;
					pRecordset 	AS VARIANT @) 		AS VARIANT

		This.LabelStatus.Caption = TRANSFORM(DATETIME())+', данные загружены'
		DOEVENTS
	*	wPause ( 1 )
	***
ENDDEFINE
***
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34601521
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Ch
Вот мы и дошли до сути... Зачем "тащить на клиента" много записей? В лучшем случае 1


Понимаете, Сергей, теоретицки могут возникнуть условия, что вы и одну запись будете полчаса тащить с сервака. Помимо этого, существуют требования заказчиков, которым надо все записи, и сразу :) - из всего этого вытекают компромисные решения (типа моего (: ).


> Sergey Sizov

То есть вы хотите сказать, что фокс не компилирует в exe-шник? Хотя это отдельная песня.. А если серьезно - я смотрел примеры для VB, который тоже является интерпетатором - там тоже во многих моментах все проще и очевидней. И еще вы говорили, что фокс заточен под обработку информации - тогда где же в нем, например, "regular expressions" (а в VB есть), или встроенные функции форматированного i/o (аля sprintf или scanf)? А встроенные средства для трансформации xslt?

Встроенные визуальные компоненты фокса у меня тоже не вызывают доверия - вспомните про изобилие тем типа "хочу нормальный грид?" или "$%^##!, когда они меню сделают нормальное?".

Согласен только с тем, что фокс идеально подходит для работы со своими БД и с MSSQL через ODBC.
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34601602
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По основному вопросу:

А не изобретаете ли Вы велосипед? А чем не подходит курсор-адаптер?

По остальным вопросам:

Бэйсик хоть и интерпретатор был при своем рождении сейчас таким не является. К тому же он не заточен для работы с данными и не СУБД. Это язык общего назначения. Потому для сравнения с фоксом не годится.

А в MS SQL сервере есть перечисленное? Там все в одном флаконе делается? Или таки за счет расширенных хранимок функциональность наращивается? Опять мимо кассы.

Понятие "нормальности" относится в вкусовым, а они, как известно, обладают ислючительной индивидуальностью. При этом можно отметить некоторую корреляцию между отсутствием опыта и знаний фокса с одной стороны и громкостью вот таких вот криков про нормальный грид. Хорошо изучившие и понявшие принципы работы грида таких криков не издают совсем. И кричащие, в основном, базируются на опыте работы в других системах, где все это работает совершенно по-другому и, естественно, совершенно не подходит к фоксу. Возвращаясь к упомянутой уже аналогии Владимира Максимова, они пытаются ехать на леворукой машине по британской дороге и кричат, что тут все дороги сделаны неправильно и им нужна правильня дорога.
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34601647
Al_fa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все обработчики событий можно выделить в отдельный класс на основе prg , например ADOEvents.
Форму с прогрессом Вы можете создать в vcx библиотеке.
Связку обработчика с рекордсетом можно делать в спец методе или в Init,примерно так

Код: plaintext
1.
2.
3.
4.
5.
Procedur SetHandler (Init)
 Lparameters  m.orsAdo
 =This.NewObject('ADOEventHandler','ADOEvents','mega-main.prg')
 =Eventhandler(m.orsAdo,This.ADOEventHandler)
Endproc 
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34601727
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Sizov.По основному вопросу:
А не изобретаете ли Вы велосипед? А чем не подходит курсор-адаптер?


Курсорадаптер достаточно новая вещь в фоксе, поэтому я отношусь к нему с еще большим недоверием, чем к чему-то еще в фоксе (анекдот знаете? "никому нельзя доверять, даже себе") . Серьезно - к-адаптер поддерживает асинхронную работу?


Sergey Sizov.А в MS SQL сервере есть перечисленное? Там все в одном флаконе делается? Или таки за счет расширенных хранимок функциональность наращивается? Опять мимо кассы.


MSSQL - это хорошо делает свою работу и не пытается представлятья ничем другим, как СУБД, а не средством разработки клиентских приложений (за что его и уважаю). Конечно, хотелось бы там видеть RE тоже, как в MySQL сейчас.


Sergey Sizov.
При этом можно отметить некоторую корреляцию между отсутствием опыта и знаний фокса с одной стороны и громкостью вот таких вот криков про нормальный грид. Хорошо изучившие и понявшие принципы работы грида таких криков не издают совсем.

Может вы и правы - чтобы изучить фоксовый грид, нужно потратить больше времени, чем при изучении другого грида со схожей функциональностью.

> Al_fa

Спасибо, надо попробовать..
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34601789
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну и зря Вы так к нему относитесь. Оченно хорошая штука, особенно если с умом подходить. Заточен в том числе и под ADO.
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34601799
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может вы и правы - чтобы изучить фоксовый грид, нужно потратить больше времени, чем при изучении другого грида со схожей функциональностью.


Я этого не утверждал и считаю это утверждение спорным.
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34720797
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет, вынужден опять поднять эту тему..

Вопрос с IMPLEMENTS так и остался нерешенным красиво, но теперь я напоролся
еще на одни схожие грабли - есть класс:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
DEFINE CLASS MY1 AS Custom	OLEPUBLIC
	Name		= "MY1"
	lusTaskCode   = NULL
	ldtCreateDate = NULL
	
	ADD OBJECT oFoo1	AS Custom
	ADD OBJECT oFoo2	AS Collection
ENDDEFINE

и теперь я хочу, чтобы в моей библиотеке mylib.vcx появился такой класс. Проблема в том, что я не знаю как визуальными средствами добавить поля oFoo1 и oFoo2.

и еще вопрос на засыпку - почему фокс не дает объявить внутри класса член с тем же типом, что и сам класс? и можно ли это преодолеть?
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34721065
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я хочу, чтобы в моей библиотеке mylib.vcx появился такой класс. Проблема в том, что я не знаю как визуальными средствами добавить поля oFoo1 и oFoo2.


Меню Class->New property
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34723971
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Sizov я хочу, чтобы в моей библиотеке mylib.vcx появился такой класс. Проблема в том, что я не знаю как визуальными средствами добавить поля oFoo1 и oFoo2.


Меню Class->New property

ну елы-палы, Сергей! Так можно создать только поле класса неопределенного типа, а мне нужно, чтобы поле было, например типа Collection - как раз то, что достигается при использовании конструкции
Код: plaintext
1.
ADD OBJECT oFoo AS Collection
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34724051
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А такие элементы добавляются перетаскиванием или из тулбара с классами, или из проекта. Берете свою коллекцию и тАщите на свой класс.
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34724060
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cannot add object to non-container classes
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34724075
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И куда ж его пытаетесь загнать-то? В какой класс запихиваете?
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34724113
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в Custom, как уже писалось выше. Хотелось бы создавать на основе невизуального компонента для минимизации расхода ресурсов, да и сами наследуемые классы должны быть невизуальные. Класс Container, насколько я понимаю, больше памяти сожрет.. (надо будет поэксперементировать)
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34724785
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
up
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34729744
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
up
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34731207
Strong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton_Gusev Sergey Sizov я хочу, чтобы в моей библиотеке mylib.vcx появился такой класс. Проблема в том, что я не знаю как визуальными средствами добавить поля oFoo1 и oFoo2.


Меню Class->New property

ну елы-палы, Сергей! Так можно создать только поле класса неопределенного типа, а мне нужно, чтобы поле было, например типа Collection - как раз то, что достигается при использовании конструкции
Код: plaintext
1.
ADD OBJECT oFoo AS Collection



а что мешает в ините класса прописать
this.oFoo = createobject(тра та та)
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34732259
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще, ничто не мешает,
но ихмо это не есть гуд, хочется по-честному, как надо объявить все.

Я уже так даже деал, но начальство при этом начинает справедливо г...ться.
К тому же при редактировании исходников удобно было бы подсказки по
членам класса получать при нажатии "."
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34732293
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton_GusevВообще, ничто не мешает,
но ихмо это не есть гуд, хочется по-честному, как надо объявить все.

Я уже так даже деал, но начальство при этом начинает справедливо г...ться.
К тому же при редактировании исходников удобно было бы подсказки по
членам класса получать при нажатии "."
К сожалению по честному нельзя :(
Либо "визуально" кидать объект мышкой (тогда надо использовать какой-то контейнер, а не Custom) либо при каждом использовании объявлять переменную и работать с ней (что тоже не очень):
Код: plaintext
1.
2.
local loObj as 'MyClass' of 'MyLib'
loObj = this.oObj
loObj.
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34732342
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ок, с этим ясно, а есть ли мнения по моему второму вопросу

автор
почему фокс не дает объявить внутри класса член с тем же типом, что и сам класс? и можно ли это преодолеть?


как я сейчас понимаю, фокс не любит рекурсивного объявления классов.. Есть ли способы цивильно его усмирить?
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34732514
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton_Gusevпочему фокс не дает объявить внутри класса член с тем же типом, что и сам класс? и можно ли это преодолеть?


А в чем проблема? Пример класса
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
DEFINE CLASS clstest AS custom
	Name = "clstest"

	PROCEDURE Init
		this.AddProperty('Value')
		this.value =  1 
	ENDPROC

	PROCEDURE addsubclass
		this.AddProperty('oTest')
		this.oTest = NewObject('clsTest', 'testclass')
		this.oTest.value =  2 
	ENDPROC
ENDDEFINE
Используем:
Код: plaintext
1.
2.
3.
loTest = NewObject('clsTest', 'testclass')
loTest.AddSubClass()
?loTest.Value
? loTest.oTest.Value
Все работает.
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34733518
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, работает, а вот так ...

Код: plaintext
1.
2.
3.
4.
5.
6.
DEFINE CLASS man AS custom
	Name = "man"

	ADD OBJECT oFriend AS man
	ADD OBJECT oEnemy AS man
ENDDEFINE

не работает.

Код: plaintext
1.
2.
3.
dd= NEWOBJECT("man")

-----------> Cannot add OFRIEND. Class definition is cyclical



еще не работает ( :-) ) вот так почему-то:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
DEFINE CLASS man AS custom
	Name = "man"


	PROCEDURE INIT
	
		this.AddProperty( "oFriend" )
		this.AddProperty( "oEnemy" )
				
		this.oFriend = NEWOBJECT("man")
		this.oEnemy = NEWOBJECT("man")
	ENDPROC
ENDDEFINE

dd= NEWOBJECT("man")

-----------> Allowed DO nesting or expression evaluation level exceeded
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34733522
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В последнем случае, если посмотреть в Debugger-e,
фокс много раз пытается вызвать INIT для класса, и зацикливается похоже.
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34733531
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а в первом случае даже ключевое слово NOINIT не помогает:
-----------> Cannot add OFRIEND. Class definition is cyclical.

Достала уже эта кривизна..
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34733552
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пока что удовлетворился таким вариантом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
DEFINE CLASS man AS custom
	Name 	= "man"
	oFriend	= NULL
	oEnemy	= NULL
	
	
	PROCEDURE oFriend_ACCESS
		RETURN	IIF( ISNULL( this.oFriend ), NEWOBJECT("man"), oFriend )
	ENDPROC
	
	PROCEDURE oEnemy_ACCESS
		RETURN	IIF( ISNULL( this.oEnemy ), NEWOBJECT("man"), oEnemy )
	ENDPROC
ENDDEFINE

Жду недождусь того момента, когда все у нас перейдут на C#.
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34734785
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЖду недождусь того момента, когда все у нас перейдут на C#.
ты у мира спроси, что получится
(трудозатраты + фонд оплаты)
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34734834
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прошелмимоты у мира спроси, что получится
(трудозатраты + фонд оплаты)
Давно подсчитано для версии .NET 1.1 - приблизительно в 6 раз больше, чем на FoxPro...
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34734856
piva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЖду недождусь того момента, когда все у нас перейдут на C#.
ФОрум закрыт - все ушли на .NET
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34735274
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
piva авторЖду недождусь того момента, когда все у нас перейдут на C#.
ФОрум закрыт - все ушли на .NET

+1 Ж)

2 Sergey Ch

проснитесь, в сети уже .NET 3-ий выложен, а 2-ой уже вовсю юзают.
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34735284
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
при том бесплатно можно юзать (SharpDevelop + .NET FrameWork 2.0)
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34735985
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton_GusevЖду недождусь того момента, когда все у нас перейдут на C#.
Не дождешься! ;-)
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34738096
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если ты бы являлся моим руководителем, я мог бы с тобой согласиться :-p
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34749085
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чето не получается объявить adodb.connection внутри класса:

Код: plaintext
1.
2.
3.
4.
5.
DEFINE CLASS MyCustom AS Custom
     Name = "MyCustom"

     ADD OBJECT Conn AS ADODB.Connection
ENDDEFINE

При этом простое объявление
Код: plaintext
1.
LOCAL Conn AS ADODB.Connection

отрабатывает нормально. В документации написано:
мелкософт
[ADD OBJECT [PROTECTED] ObjectName AS ClassName2
Specifies to add an object from a Visual FoxPro base class, user-defined class or subclass, or an ActiveX custom control to the class definition. The PROTECTED keyword prevents access and changes to the object's properties from outside the class or subclass definition.


Врут чтоль, или я что-то не понимаю? Или не нравится точка в "ADODB.Connection"?
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34749090
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С инициализацией проблемы скорее всего?
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34749198
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LOCAL Conn AS ADODB.Connection

Это, в общем-то, просто подсказка для Intellisence и не более того. Переменные в фоксе нетипизированные и могут иметь занчение любого типа и тип присваиваемого значения может меняться во время работы программы.
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34749271
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton_Gusev...Кто-то тут даже написал типа - "фокспро это религия" - ню-ню :)Антон, про религию я писал. Поясняю. Программирование на FoxPro формирует определенное мировоззрение, как и религия. И, как и у религии, у него есть адепты. Я - один из них. Правда, давно не практикующий.
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34749719
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Sizov
Это, в общем-то, просто подсказка для Intellisence и не более того. Переменные в фоксе нетипизированные и могут иметь занчение любого типа и тип присваиваемого значения может меняться во время работы программы.

Ну так почему же не работает?
Код: plaintext
1.
2.
3.
4.
5.
DEFINE CLASS MyCustom AS Custom
     Name = "MyCustom"

     ADD OBJECT Conn AS ADODB.Connection
ENDDEFINE
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34749738
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton_Gusev Sergey Sizov
Это, в общем-то, просто подсказка для Intellisence и не более того. Переменные в фоксе нетипизированные и могут иметь занчение любого типа и тип присваиваемого значения может меняться во время работы программы.

Ну так почему же не работает?
Код: plaintext
1.
2.
3.
4.
5.
DEFINE CLASS MyCustom AS Custom
     Name = "MyCustom"

     ADD OBJECT Conn AS ADODB.Connection
ENDDEFINE


1. Вы привели весь код который не получается или о чём-то умолчали?
2. Почему вы думаете, что Фокс знает, что за обьект ADODB, наверное ему надо об этом сказать (если фоксу сказать ADODB = createobject('textbox'), то ADODB будет ссылкой на текстбокс), а Вашем случае на основании чего фокс должен догадаться?
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34749890
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привел весь код.
Для чистоты эксперемента создал пустой файл с указанным кодом и сохранил в test1.prg.
Далее в командном окне выполнил:

Код: plaintext
1.
2.
SET PROCEDURE TO test1.prg
ccc=NEWOBJECT("MyCustom")

Получил ошибку "Command contains unrecognized phrase/keyword".

PaulWist
Почему вы думаете, что Фокс знает...


1. Потому что он как-то догадывается при использовании, например, "ADD OBJECT YYYY AS Custom".
2. Потому что в хелпе по "DEFINE CLASS" написано, что можно использовать "ActiveX custom control".
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34749941
автор1. Потому что он как-то догадывается при использовании, например, "ADD OBJECT YYYY AS Custom".
Custom - встроенный класс и фокс о нем знает. ADODB.CONNECTION - ни разе не встроенный класс и фокс о нем не знает. Новые знания Intellisens'у добавляются через пункт меню Tools-Intellisence Manager. Класс Custom, кстати, там тоже прописан.
автор2. Потому что в хелпе по "DEFINE CLASS" написано, что можно использовать "ActiveX custom control".
Меня терзают смутные сомнения в принадлежности ADODB к "ActiveX custom control".
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34749972
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну, меня тоже сомнения терзают. Попробую поописывать где-нить. Но ведь IntelliSense - только для disign-time, тобишь для удобства редактирования?
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34750011
Но ведь IntelliSense - только для disign-time, тобишь для удобства редактирования?
Да. А Вы от него еще чего-то захотели?
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34750058
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И что делать-то?

Хорошо, давайте представим, что речь идет не об adodb.connection, а некотором ActiveX, в котором мы уверены, что он "ActiveX custom control", тогда как мне его прикрутить к классу?
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34750078
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Антон, я так понял, что Вы хотите написать некий "самопальный" класс CursorAdapter. Уже более 3 месяцев мучаетесь. Может, стоило потратить это время на изучение собственно класса CursorAdapter его достоинств и недостатков?
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34750097
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет, Владимир, это проблемы по ходу возникают. 3 месяца я б не выдержал :)
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34750179
Кстати, присоединюсь к Владимиру. Курсор-адаптер заточен в том числе и под ADO. Унего для этого специальные свойства есть. И так как он нарисован на С, а не на фоксе, то всяко работать будет быстрее Вашего самопального.
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34750199
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton_GusevИ что делать-то?

Хорошо, давайте представим, что речь идет не об adodb.connection, а некотором ActiveX, в котором мы уверены, что он "ActiveX custom control", тогда как мне его прикрутить к классу?

В HELP по FoxPro есть примеры:

Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
frmMyForm = CREATEOBJECT('Form')  && Create a Form
frmMyForm.Closable = .F.  && Disable the window pop-up menu

frmMyForm.AddObject('cmdCommand1','cmdMyCmdBtn')  && Add Command button
frmMyForm.AddObject("oleObject","oleExcelObject")  && Add OLE object

frmMyForm.cmdCommand1.Visible=.T.  && Display the "Quit" Command button

frmMyForm.oleObject.Visible=.T.  && Display the OLE control
frmMyForm.oleObject.Height =  50   && OLE control height

frmMyForm.Show  && Display the Form

frmMyForm.oleObject.DoVerb(- 1 )  && - 1  for Edit

READ EVENTS  && Start event processing

DEFINE CLASS oleExcelObject as OLEControl
   OleClass ="Excel.Sheet"  && Server name
   DocumentFile = "C:\EXCEL\BOOK1.XLS"  && This file must exist 
ENDDEFINE

DEFINE CLASS cmdMyCmdBtn AS CommandButton  && Create Command button
   Caption = '\<Quit'  && Caption on the Command button
   Cancel = .T.  && Default Cancel Command button (Esc)
   Left =  125   && Command button column
   Top =  210   && Command button row
   Height =  25   && Command button height

   PROCEDURE Click
      CLEAR EVENTS  && Stop event processing, close form
ENDDEFINE

Т.е. ключевым здесь является синтаксис

Код: plaintext
1.
2.
3.
4.
DEFINE CLASS oleExcelObject as OLEControl
   OleClass ="Excel.Sheet"  && Server name
   DocumentFile = "C:\EXCEL\BOOK1.XLS"  && This file must exist 
ENDDEFINE

Но, для ADODB это все не приемлимо, поскольку он не является ActiveX компонентом. Если так уж хочется оформить это все через класс, то придется писать обертку над командой CreateObject().

Т.е. просто дублировать все методы и свойства ADODB через соответсвующие методы и свойства, например, класса Custom, а внутри этих свойств и методов так прямо "в лоб" и писать CREATEOBJECT("ADODB.Connection")

Ну, что-то вроде

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
DEFINE CLASS MyConnection AS CUSTOM
	oConn = NULL
	ConnectionString = "provider=vfpoledb.1;;data source=.\MyTestDatabase.dbc"

PROCEDURE Init
	This.oConn = CreateObject("ADODB.Connection")
	This.oConn.ConnectionString = This.ConnectionString
ENDPROC

PROCEDURE Open
	This.oConn.Open()
ENDPROC

ENDDEFINE

Следует также иметь в виду, что RecordSet для FoxPro - это "не естесственный" способ хранения табличных данных. Т.е. еще придется писать свою обертку и для навигации по RecordSet.

Однако все эти обертки уже реализованы в стандартном классе CursorAdapter. Думаете, у Вас получится лучше, чем реализовала команда разработчиков FoxPro?
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34750274
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, Владимир, буду пробовать что-то.
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34750593
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ... Думаете, у Вас получится лучше, чем реализовала команда разработчиков FoxPro? Судя по его постам, он в этом уверен
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34750746
Anton_Gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Плох тот солдат, что не мечтает стать генералом!
...
Рейтинг: 0 / 0
Класс с IMPLEMENTS загнать в библиотеку...
    #34750772
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton_Gusev
Плох тот солдат, что не мечтает стать генералом!
Правильно, Антоха. Не поддавайся им (без фанатизма конечно).
Как говорил Суворов: "Тяжело в учении, легко в бою"
...
Рейтинг: 0 / 0
68 сообщений из 68, показаны все 3 страниц
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Класс с IMPLEMENTS загнать в библиотеку...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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