powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SQLExec in Form.Load() with PrivateDataSession
5 сообщений из 5, страница 1 из 1
SQLExec in Form.Load() with PrivateDataSession
    #32924761
Denis___Ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!

Такой вопрос:
есть форма, которая храницца в виде класса в библиотеке VCX.
DataSession у формы установлен в Private.
В событии Load() для формы пытаюсь открыть удаленные view и создать курсоры с помощью SQLExec. Так вот, удаленные view открываюцца нормально, а вот SQLExec создает курсор в дефолтной, а не в приватной DataSession... :( Объясните плиз почему и можно ли это как-то обойти...

Спасибо!
...
Рейтинг: 0 / 0
SQLExec in Form.Load() with PrivateDataSession
    #32924815
Cyrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А можно попросить указать номер версии и показать кусочек кода?

PS на vfp9 я подобного не вижу.
...
Рейтинг: 0 / 0
SQLExec in Form.Load() with PrivateDataSession
    #32924824
Denis___Ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cyrus А можно попросить указать номер версии и показать кусочек кода?
PS на vfp9 я подобного не вижу.

Можно канечна, версия 8 + SP1.
А код такой:
Код: plaintext
oWrapper.SQLExec('EXEC spGetReportPeriodList', 'curReportPeriods')
oWrapper - класс, отвечающий за GUI (меню, toolbars и т.д.)
вот текст метода SQLExec объедка oWrapper:
Код: plaintext
1.
2.
3.
...
lnRetVal = SQLEXEC(This.CH, pcSQL, pcCurName)
...
RETURN IIF(lnRetVal >  0 , .T., .F.)	&& -- It seems there's no error occured
вот...
может быть это из-за того, что используецца левый объект?
но тогда это лажа какая-то... :(
...
Рейтинг: 0 / 0
SQLExec in Form.Load() with PrivateDataSession
    #32924850
Cyrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Denis___Ka[quot Cyrus ]может быть это из-за того, что используецца левый объект?
но тогда это лажа какая-то... :(
Если базовый класс объекта Session и в нем стоит явная установка на Default DataSession, то такое возможно.
Код: 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.
*!* заменить строку запроса и строку соединения на свою
#define CSQLSTRING "select top 100 * from test"
#define CCONNECTTRING "driver=sql server; server=(local); database=test"
CLEAR ALL 
PUBLIC x
x = CREATEOBJECT("form1")
x.Show()
=SQLDISCONNECT( 0 )
=SYS( 1500 , '_MWI_VIEW', '_MWINDOW')

DEFINE CLASS form1 AS form

	DataSession =  2 
	Name = "form1"

	PROCEDURE Load
		LOCAL oWrapper1, oWrapper2
		*!* Курсор откроется в Private DataSession объекта
		*!* и будет закрыт при его удалении (при выходе из Form.Load)
		oWrapper1 = CREATEOBJECT("wrapper1")
		oWrapper1.SQLEXEC(CSQLSTRING, "test1")
		*!* Курсор откроется в Private DataSession формы
		oWrapper2 = CREATEOBJECT("wrapper2")
		oWrapper2.SQLEXEC(CSQLSTRING, "test2")
		*!* Курсор откроется в Default DataSession
		oWrapper3 = CREATEOBJECT("wrapper3")
		oWrapper3.SQLEXEC(CSQLSTRING, "test3")
	ENDPROC
ENDDEFINE

DEFINE CLASS wrapper1 AS session
	DataSession =  2 
	Name = "wrapper1"
	CH = SQLSTRINGCONNECT(CCONNECTTRING)

	PROCEDURE SQLEXEC
	LPARAMETERS pcSQL, pcCurName
		lnRetVal = SQLEXEC(This.CH, pcSQL, pcCurName)
		RETURN IIF(lnRetVal >  0 , .T., .F.) 
	ENDPROC
ENDDEFINE

DEFINE CLASS wrapper2 AS wrapper1
	DataSession =  1 
	Name = "wrapper2"
ENDDEFINE

DEFINE CLASS wrapper3 AS wrapper1
	Name = "wrapper3"
	PROCEDURE Init
		this.DatasessionId =  1 
	ENDPROC
ENDDEFINE
...
Рейтинг: 0 / 0
SQLExec in Form.Load() with PrivateDataSession
    #32925168
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Denis___Ka!

Поскольку ты делаешь SQLExec НЕ из метода формы, а из особой "обёртки", то и
создаётся он в той DS, в которой была создана эта обёртка (очевидно у тебя
она создана в первой DS) - что делать?
1) Создавать объект-обёртку динамически из контекста (из метода) самой
формы - тогда он и будет жить в DS этой формы.
2) Передавать в метод обёртки ThisForm.DataSessionID - там переключаться в
эту DS, выполнять запрос, и если уж совсем по хорошему - то переключаться
обратно в ту DS в которой были изначально.

P.S. Предполагается что Wrapper создан НЕ на базе Session или Form - т.е.
тех классов, которые сами порождают DS-ны.

P.P.S. Это штатное поведение вообще-то в фоксе - в какой DS создан объект, в
той и "работают" его методы (т.е. неявно происходит переключение DS при
входе в метод, и неявно переключение обратно при завершении метода).

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SQLExec in Form.Load() with PrivateDataSession
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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