powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Set datasession. Глюк !??
18 сообщений из 18, страница 1 из 1
Set datasession. Глюк !??
    #33540571
Maltsev Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1) Имеется форма. Модальная. Private DataSession. в окружении открываются справочники (из DBF)
2) имеется некий глобальный объект, в котором хранится дескриптор соединения, а так же есть метод -- выполнить SQL запрос к серверу ORACLE и вернуть его результат.


В ините формы
Код: plaintext
1.
Set("Datasession")
возвращает 2
В методе глобального объекта, который выполняет SQL запрос
Код: plaintext
1.
Set("Datasession")
возвращает 1

В результате все таблицы у меня создаются в Default DataSession и на форме их уже не видно ...
...
Рейтинг: 0 / 0
Set datasession. Глюк !??
    #33540612
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да.. я такое проходил. Если глобальный объект создавалься в Default DataSesson (полагаю класса Custom), то результирующий курсор при комманде SQLEXEC, которая выдается в этом объекте создается в Default DataSession. Я поначалу передавал в метод глобального объекта еще и DataSessionID формы, которая вызывает этот метод и в этом методе до SQEXEC выдавал SET DATASESSON TO (....). А теперь сделал проще, вынес эту обертку над SQLEXEC в прроцедурный файл и все проблеммы пропали.
С уважением, Алексей
...
Рейтинг: 0 / 0
Set datasession. Глюк !??
    #33540617
Maltsev Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
дополнение -- VFP 8.0 sp1
...
Рейтинг: 0 / 0
Set datasession. Глюк !??
    #33540628
Maltsev Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не может -ли это быть из-за того, что глобальный объект был создан До вызова формы. В Default Datasession ?!
Если да, то как это лечить !?
...
Рейтинг: 0 / 0
Set datasession. Глюк !??
    #33542479
Maltsev Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понятно !!!
опять все переписыввать... :-((

Спасибо за помощь
...
Рейтинг: 0 / 0
Set datasession. Глюк !??
    #33542489
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НЕМА ЗА ШО :)
С уважением, Алексей
...
Рейтинг: 0 / 0
Set datasession. Глюк !??
    #33547862
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Maltsev Max!

Методы объекта всегда исполняются в той датасессии. в которой был создан и
сам объект. ЕСЛИ только принудительно не переключать эту самую датасессию.
Что касается твоего случая - то наверное лучше отказаться от такого
глобального и универсального класса - оставь в нём лишь установление
соединения, а сам запрос делай в другом месте - в методе формы, в другом
объекте, создаваемом в контексте формы, в простой процедуре наконец...

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Set datasession. Глюк !??
    #33547926
Maltsev Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дак хочется же как лучше !!! :-))

В идеале планировалось создать несколько универсатьных классов, которые будут отвечать за работу с БД. А на форме юзать их свойства и методы ...

что б уменьшить количество запросов до минимума ...
...
Рейтинг: 0 / 0
Set datasession. Глюк !??
    #33547992
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor Korolyov
...
Методы объекта всегда исполняются в той датасессии. в которой был создан и
сам объект. ЕСЛИ только принудительно не переключать эту самую датасессию.
...

Странно это... класс Custom не имеет понятие DataSessionID! Где он (объект класса Custom) хранит свою DataSessionID ? Откуда он ее вытаскивает при SQLEXEC, выданную из его методов? Я с этим так и не смог разобраться.
С уважением, Алексей.
...
Рейтинг: 0 / 0
Set datasession. Глюк !??
    #33548212
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Aleksey-K:

Решение для Вашего класса SQL есть вроде бы даже работает.

В класс SQL добавляется свойство DataSessionID с соответствующим Assign методом.

Перед использованием класса делается присвоение:

Код: plaintext
oSQL.DataSessionId = set("datasession")

В DataSessionID_Assign методе:

Код: plaintext
set datasession to this.DataSessionID
...
Рейтинг: 0 / 0
Set datasession. Глюк !??
    #33548235
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошее решение (но я отошел от метода SQL класса Application в сторону функции SQL в процедурном файле), но мне не понятно почему это происходит!? Где Custom запоминает DataSession при своем создании. Я не нашел об этом ни слова в документации.
С уважением, Алексей
...
Рейтинг: 0 / 0
Set datasession. Глюк !??
    #33548245
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Aleksey-K:

Я тоже пока не нашел и не понял. Может задать вопрос разработчикам? Возможность есть.
...
Рейтинг: 0 / 0
Set datasession. Глюк !??
    #33553673
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Maltsev Max!

> Дак хочется же как лучше !!! :-))

И очень хорошо!

> В идеале планировалось создать несколько универсатьных классов, которые
> будут отвечать за работу с БД. А на форме юзать их свойства и методы ...

Так и делай! Только создавай эти объекты именно в той форме в которой они и
будут использоваться! ИЛИ полностью откажись от идеи использовать курсоры
для доступа к данным - т.е. работай ТОЛЬКО со свойствами и методами таких
объектов - тогда будет без разницы в какой DS находятся "подлежащие"
курсоры.

2 Aleksey

Честно говоря я не знаю где описано (и описано ли вообще) подобное поведение
ЛЮБЫХ фоксовых классов - если объект не порождает свою собственную сессию
данных, то он живёт в той сессии в которой он был создан - в частности форма
которая не породила свою сессию прекрасно видит курсоры "родительской"
формы - это так-же справедливо для объекта любого другого класса.
Что касается DataSessionID - это не более чем редиректор вызывающий
SET("Datasession") - если ты где-то в коде формы дал явную команду SET
DATASESSION TO zzz - то свойство DataSessionID будет показывать это самое
zzz - а вовсе не идентификатор датасессии, которую породила эта форма -
потому то и сохраняют при переключениях датасессии старое значение в
отдельном свойстве, или локальной переменной - а не используют DataSessionID
для "возвращения" в родную датасессию.
А хранит объект признак той датасессии в которой он "работает", а так-же той
в которой он был создан где-то во внутренних своих свойствах. Я не знаю
способа напрямую "достучаться" до этих свойств извне объекта - хотя до того
который хранит "рабочую DS" можно достучаться из любого метода объекта через
SET("Datasession"). А вот как достучаться до DS в которой объект был
порождён я вообще не знаю - причём что самое печальное - эта DS будет
"висеть" до тех пор пока объект не будет уничтожен - даже если внутри него
уже произошло явное переключение DS и "работает" объект уже в совсем другой
сессии... Это одна из основных причин, по которой нужно очень аккуратно
обращаться с командами переключения датасессии в методах любых классов.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Set datasession. Глюк !??
    #33554896
Maltsev Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А еще есть такой вопрос:

SQLEXEC() принимает параметры в строке запроса в виде ?Параметр .

Я когда вынес работу с БД в отдельный объект сменил имя функции SQLEXEC() на свою.
Конечно же передача параметров у меня перестала работать.
Я написал парсер в котором вычисля значения переменных и результат вставлял в запрос.
Все выходные был счастлив :-))
Счас пришел на работу и понял, что у некоторых параметров есть "область видимости" :-))
Параметр вида: ?This.PK_Dogovor в парсере не существует !! :-))

Есть ли какой-то способ узнать значение переменной в указанной процедуре/методе ?!?

Я уже смирился с мыслью, что это невозможно. Но вдруг как-то хитро можно извратиться !?? :-))
...
Рейтинг: 0 / 0
Set datasession. Глюк !??
    #33554965
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Параметры должны быть PRIVATE (не меньше).
LOCAL не годится.
Или параметры могут быть полями таблицы (курсора).
С уважением, Алексей
...
Рейтинг: 0 / 0
Set datasession. Глюк !??
    #33557212
h.i.a.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Maltsev Max
Попробуй создай свой глобальный объект на основе класса Session. И в не уже можно попробовать переключать сессию
...
Рейтинг: 0 / 0
Set datasession. Глюк !??
    #33557307
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
h.i.a.2 Maltsev Max
Попробуй создай свой глобальный объект на основе класса Session. И в не уже можно попробовать переключать сессию
Так и Custom дает переключить сессию. Вопрос не в этом, а в том, зачем он САМ переключает сессию на ту, которая была активна при его создании при вызове его методов из другой сессии.
С уважением, Алексей.
...
Рейтинг: 0 / 0
Set datasession. Глюк !??
    #33562059
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Aleksey!

> зачем он САМ переключает сессию

Для надёжности - чтобы код всегда исполнялся в известных условиях
окружения - при известных открытых (видимых) курсорах, стабильных установках
SET-ов и т.п.
Если бы такого переключения не было, то был-бы большой бардак :) Мы открыли
курсор - а его "вдруг" стало не видно, или сделали некоторую установку SET -
а она произвольно меняется от запуска к запуску...

> на ту, которая была активна при его создании

Не совсем так - это по началу методы работают в DS "породившей" объект -
если внутри метода произошло переключение DS - то потом уже методы объекта
будут работать в этой самой "другой" DS.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Set datasession. Глюк !??
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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