
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
13.02.2006, 12:53
|
|||
|---|---|---|---|
|
|||
Set datasession. Глюк !?? |
|||
|
#18+
1) Имеется форма. Модальная. Private DataSession. в окружении открываются справочники (из DBF) 2) имеется некий глобальный объект, в котором хранится дескриптор соединения, а так же есть метод -- выполнить SQL запрос к серверу ORACLE и вернуть его результат. В ините формы Код: plaintext 1. В методе глобального объекта, который выполняет SQL запрос Код: plaintext 1. В результате все таблицы у меня создаются в Default DataSession и на форме их уже не видно ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.02.2006, 13:03
|
|||
|---|---|---|---|
Set datasession. Глюк !?? |
|||
|
#18+
Да.. я такое проходил. Если глобальный объект создавалься в Default DataSesson (полагаю класса Custom), то результирующий курсор при комманде SQLEXEC, которая выдается в этом объекте создается в Default DataSession. Я поначалу передавал в метод глобального объекта еще и DataSessionID формы, которая вызывает этот метод и в этом методе до SQEXEC выдавал SET DATASESSON TO (....). А теперь сделал проще, вынес эту обертку над SQLEXEC в прроцедурный файл и все проблеммы пропали. С уважением, Алексей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.02.2006, 13:04
|
|||
|---|---|---|---|
|
|||
Set datasession. Глюк !?? |
|||
|
#18+
дополнение -- VFP 8.0 sp1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.02.2006, 13:06
|
|||
|---|---|---|---|
|
|||
Set datasession. Глюк !?? |
|||
|
#18+
Не может -ли это быть из-за того, что глобальный объект был создан До вызова формы. В Default Datasession ?! Если да, то как это лечить !? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.02.2006, 08:36
|
|||
|---|---|---|---|
|
|||
Set datasession. Глюк !?? |
|||
|
#18+
Понятно !!! опять все переписыввать... :-(( Спасибо за помощь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.02.2006, 08:40
|
|||
|---|---|---|---|
Set datasession. Глюк !?? |
|||
|
#18+
НЕМА ЗА ШО :) С уважением, Алексей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.02.2006, 02:22
|
|||
|---|---|---|---|
|
|||
Set datasession. Глюк !?? |
|||
|
#18+
Hi Maltsev Max! Методы объекта всегда исполняются в той датасессии. в которой был создан и сам объект. ЕСЛИ только принудительно не переключать эту самую датасессию. Что касается твоего случая - то наверное лучше отказаться от такого глобального и универсального класса - оставь в нём лишь установление соединения, а сам запрос делай в другом месте - в методе формы, в другом объекте, создаваемом в контексте формы, в простой процедуре наконец... Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.02.2006, 06:56
|
|||
|---|---|---|---|
|
|||
Set datasession. Глюк !?? |
|||
|
#18+
Дак хочется же как лучше !!! :-)) В идеале планировалось создать несколько универсатьных классов, которые будут отвечать за работу с БД. А на форме юзать их свойства и методы ... что б уменьшить количество запросов до минимума ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.02.2006, 08:26
|
|||
|---|---|---|---|
Set datasession. Глюк !?? |
|||
|
#18+
Igor Korolyov ... Методы объекта всегда исполняются в той датасессии. в которой был создан и сам объект. ЕСЛИ только принудительно не переключать эту самую датасессию. ... Странно это... класс Custom не имеет понятие DataSessionID! Где он (объект класса Custom) хранит свою DataSessionID ? Откуда он ее вытаскивает при SQLEXEC, выданную из его методов? Я с этим так и не смог разобраться. С уважением, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.02.2006, 10:25
|
|||
|---|---|---|---|
|
|||
Set datasession. Глюк !?? |
|||
|
#18+
2 Aleksey-K: Решение для Вашего класса SQL есть вроде бы даже работает. В класс SQL добавляется свойство DataSessionID с соответствующим Assign методом. Перед использованием класса делается присвоение: Код: plaintext В DataSessionID_Assign методе: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.02.2006, 10:30
|
|||
|---|---|---|---|
Set datasession. Глюк !?? |
|||
|
#18+
Хорошее решение (но я отошел от метода SQL класса Application в сторону функции SQL в процедурном файле), но мне не понятно почему это происходит!? Где Custom запоминает DataSession при своем создании. Я не нашел об этом ни слова в документации. С уважением, Алексей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.02.2006, 10:33
|
|||
|---|---|---|---|
|
|||
Set datasession. Глюк !?? |
|||
|
#18+
2 Aleksey-K: Я тоже пока не нашел и не понял. Может задать вопрос разработчикам? Возможность есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.02.2006, 04:40
|
|||
|---|---|---|---|
|
|||
Set datasession. Глюк !?? |
|||
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.02.2006, 09:14
|
|||
|---|---|---|---|
|
|||
Set datasession. Глюк !?? |
|||
|
#18+
А еще есть такой вопрос: SQLEXEC() принимает параметры в строке запроса в виде ?Параметр . Я когда вынес работу с БД в отдельный объект сменил имя функции SQLEXEC() на свою. Конечно же передача параметров у меня перестала работать. Я написал парсер в котором вычисля значения переменных и результат вставлял в запрос. Все выходные был счастлив :-)) Счас пришел на работу и понял, что у некоторых параметров есть "область видимости" :-)) Параметр вида: ?This.PK_Dogovor в парсере не существует !! :-)) Есть ли какой-то способ узнать значение переменной в указанной процедуре/методе ?!? Я уже смирился с мыслью, что это невозможно. Но вдруг как-то хитро можно извратиться !?? :-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.02.2006, 10:00
|
|||
|---|---|---|---|
Set datasession. Глюк !?? |
|||
|
#18+
Параметры должны быть PRIVATE (не меньше). LOCAL не годится. Или параметры могут быть полями таблицы (курсора). С уважением, Алексей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.02.2006, 03:03
|
|||
|---|---|---|---|
|
|||
Set datasession. Глюк !?? |
|||
|
#18+
2 Maltsev Max Попробуй создай свой глобальный объект на основе класса Session. И в не уже можно попробовать переключать сессию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.02.2006, 08:14
|
|||
|---|---|---|---|
Set datasession. Глюк !?? |
|||
|
#18+
h.i.a.2 Maltsev Max Попробуй создай свой глобальный объект на основе класса Session. И в не уже можно попробовать переключать сессию Так и Custom дает переключить сессию. Вопрос не в этом, а в том, зачем он САМ переключает сессию на ту, которая была активна при его создании при вызове его методов из другой сессии. С уважением, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.02.2006, 01:31
|
|||
|---|---|---|---|
|
|||
Set datasession. Глюк !?? |
|||
|
#18+
Hi Aleksey! > зачем он САМ переключает сессию Для надёжности - чтобы код всегда исполнялся в известных условиях окружения - при известных открытых (видимых) курсорах, стабильных установках SET-ов и т.п. Если бы такого переключения не было, то был-бы большой бардак :) Мы открыли курсор - а его "вдруг" стало не видно, или сделали некоторую установку SET - а она произвольно меняется от запуска к запуску... > на ту, которая была активна при его создании Не совсем так - это по началу методы работают в DS "породившей" объект - если внутри метода произошло переключение DS - то потом уже методы объекта будут работать в этой самой "другой" DS. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=41&tablet=1&tid=1592270]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
159ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 463ms |

| 0 / 0 |
