powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Отвязанный рекордсет фильтр по форме и ActiveConnection
25 сообщений из 28, страница 1 из 2
Отвязанный рекордсет фильтр по форме и ActiveConnection
    #36737886
VladimirKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня.

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

Имею Ms Access 2003 (11.8166.8172) SP3, проект adp, БД на MSSQL 2005 Express.


Имеется форма. В ней листбокс с именем GR и подформа с именем "Номенклатура".
подформу хочется фильтровать по листбоксу. Вот первоначальный вариант:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Public DocSelect As clDocSelect
Public Sub SetParam(Ds As clDocSelect)
  Set DocSelect = Ds
  If DocSelect Is Nothing Then
    Exit Sub
  End If
  Номенклатура.Form.Recordsource = "exec dbo.hpAutoWorkTools " + MsDate(DocSelect.DocDt) + "," + MsNum(DocSelect.DocInd)  
End Sub

Форма создается, вызывается .SetParam. Пока все идет нормально...
Есть фильтрация по листбоксу Gr:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Private Sub Gr_AfterUpdate()
  If Gr =  0  Then
    Номенклатура.Form.Filter = ""
    Номенклатура.Form.FilterOn = False
  Else
    Номенклатура.Form.FilterOn = True
    Номенклатура.Form.Filter = "[GrInd]=" + CStr(Gr)
  End If
End Sub

Тоже, собственно, все работает.
Почему сделал фильтр на форме, а не оформил соответствующим образом ХП dbo.hpAutoWorkTools? Каждый вызов XП приводит к скану тяжелой таблицы, вообщем, работает медленно. И по полю [GrInd] эту таблицу не проиндексировать (т. к. там нет такого поля :)

Оказалось, что в момент выполнения
Код: plaintext
1.
    Номенклатура.Form.FilterOn = True
    Номенклатура.Form.Filter = "[GrInd]=" + CStr(Gr)
происходит перезапрос данных, то есть новый вызов с сервера dbo.hpAutoWorkTools. Исследовано профайлером.

Хорошо, отвяжем рекордсет:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Public Sub SetParam(Ds As clDocSelect)
  Dim Rs As ADODB.Recordset
  Dim Con As ADODB.Connection
  Set DocSelect = Ds
  If DocSelect Is Nothing Then
    Exit Sub
  End If
  Set Con = New ADODB.Connection
  Con.ConnectionString = CurrentProject.AccessConnection.ConnectionString
  Con.CursorLocation = adUseClient
  Con.Open
    
  Set Rs = New ADODB.Recordset
  Rs.Open "exec dbo.hpAutoWorkTools " + MsDate(DocSelect.DocDt) + "," + MsNum(DocSelect.DocInd), Con, adOpenStatic, adLockOptimistic
    
  Set Rs.ActiveConnection = Nothing
  'Set Rs = CurrentProject.Connection.Execute("exec dbo.hpAutoWorkTools " + MsDate(DocSelect.DocDt) + "," + MsNum(DocSelect.DocInd))
  Con.Close
  Set Con = Nothing
  Set Номенклатура.Form.Recordset = Rs
  Rs.Close
  Set Rs = Nothing
End Sub

И далее с удивлением увидим, что в момент выполнения

Код: plaintext
    Номенклатура.Form.Filter = "[GrInd]=" + CStr(Gr)

Происходит восстановление Номенклатура.Form.Recordset.ActiveConnection и, бл, вызов хранимой поцедуры.
Откуда восстанавливается значение ActiveConnection? Видимо, ConnectionString в Properties рекордсета лежит.
Щас буду проверять и прибивать еще и Properties. Вот, после этого, скорее всего, при применении фильтра меня и будет ждать вылет аксесса, как это написано выше во второй ссылке.
Отсюда вопросы.
1. Где я ошибаюсь? (блин, ошибки не вижу, но я не хочу восстановления ActiveConnection и вызова ХП)
2. Кто нибудь, кто фильтрует отвязанные рекордсеты в форме, может проведет ревизию фильтрации на предмет восстановления "связи" в отвязанном рекордсете?
...
Рейтинг: 0 / 0
Отвязанный рекордсет фильтр по форме и ActiveConnection
    #36738019
Фотография Ёжик`
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
офтопик
11.8166 - карму портить, нужно не менее 11.8204

тут мне дали линк
...
Рейтинг: 0 / 0
Отвязанный рекордсет фильтр по форме и ActiveConnection
    #36738038
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ёжик`офтопик
11.8166 - карму портить, нужно не менее 11.8204

тут мне дали линк
Интересно... Линк на обновление дал сам ТС текущего топика. Который сам им же и нЕ воспользовался...
...
Рейтинг: 0 / 0
Отвязанный рекордсет фильтр по форме и ActiveConnection
    #36738041
Фотография Ёжик`
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladimirKr,

Нда, вы и дали нужный линк
Пойду - погуляю.
...
Рейтинг: 0 / 0
Отвязанный рекордсет фильтр по форме и ActiveConnection
    #36738065
Фотография Ёжик`
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Офтопик2 почти по сабжу: вылетает собака такая при отвязанных рекордсетах.

И тут либо мозг ломать и много кодить (и не факт что накодить), либо пусть железяка работает, либо менять среду разработки.
Я пока второе выбрал.
...
Рейтинг: 0 / 0
Отвязанный рекордсет фильтр по форме и ActiveConnection
    #36738075
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я всякий раз перезапрашиваю сервер новым RecordSource'ом и не переживаю сервер. Это - его работа.
...
Рейтинг: 0 / 0
Отвязанный рекордсет фильтр по форме и ActiveConnection
    #36738131
VladimirKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladimirKr,

Отдельная проверка профайлером показывает:
Код: plaintext
1.
2.
3.
4.
Dim con as ADODB.Connection
Con.ConnectionString=блабла
Con.Open ' есть событие AuditLogin на сервере
Con.Close ' НЕТ события Audit Logout!!!
Set Con=Nothing ' Вот только после этого возникает Audit Logout

Вывод, пока не освобождены все интерфейсы ADODB.Connection соединение с сервером живет.

Так вот
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
  
  Set Con = New ADODB.Connection
  Con.ConnectionString = CurrentProject.AccessConnection.ConnectionString
  Con.CursorLocation = adUseClient
  Con.Open
    
  Set Rs = New ADODB.Recordset
  Rs.Open "exec dbo.hpAutoWorkTools " + MsDate(DocSelect.DocDt) + "," + MsNum(DocSelect.DocInd), Con, adOpenStatic, adLockOptimistic

  Set Rs.ActiveConnection = Nothing
  'Set Rs = CurrentProject.Connection.Execute("exec dbo.hpAutoWorkTools " + MsDate(DocSelect.DocDt) + "," + MsNum(DocSelect.DocInd))
  Con.Close
  Set Con = Nothing
  Set Номенклатура.Form.Recordset = Rs
  Rs.Close
  Set Rs = Nothing

После Con.Open я вижу на сервере событие Audit Login
А после Set Con=Nothing нет события Audit Logout .

Отсюда вывод:
Rs.Open осуществляет копирование ссылки на ADODB.Connection не менее чем в двух экземплярах.
Один из них Rs.ActiveConnection. А где второй?
Может знатоки АДО подскажут.
...
Рейтинг: 0 / 0
Отвязанный рекордсет фильтр по форме и ActiveConnection
    #36738194
VladimirKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mds_worldЁжик`офтопик
11.8166 - карму портить, нужно не менее 11.8204

тут мне дали линк
Интересно... Линк на обновление дал сам ТС текущего топика. Который сам им же и нЕ воспользовался...

:) У меня этих аксессов уже столько, что запутался, где что стоит.
Но видимо хотфикс не поможет.

2 Программист-Любитель.

Сервер, конечно работает, и пока вызов процедуры составляет где-то 0.1 сек. Но раз происходит скан таблицы - время выполнения будет расти линейно от размеров таблицы. И скоро пользователь будет любоваться песочными часами при передвижении по листбоксу.

Хочется красоты.

Понятно, что скан таблицы (происходит расчет остатков) не есть хорошо. Но я думал, что можно до определенного размера потерпеть и пока занаться другими неотложными делами. Так нет, блин, щас брошу все и буду организовавать таблицу остатков для ускорения расчета сумм...

Ёжик`Офтопик2 почти по сабжу: вылетает собака такая при отвязанных рекордсетах.

И тут либо мозг ломать и много кодить (и не факт что накодить), либо пусть железяка работает, либо менять среду разработки.
Я пока второе выбрал.

Видимо, к этому идет... Жаль.
Я, конечно, тот еще программер на С#, но недавно засек время:
Создание формы с гридом, где находятся результаты XП с параметрами на Access у меня занимает 5 минут,а на С# - 40 минут.
Заказчик же даже слов таких не знает, но платит за результат...
...
Рейтинг: 0 / 0
Отвязанный рекордсет фильтр по форме и ActiveConnection
    #36738251
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создание формы с гридом, где находятся результаты XП с параметрами на Access у меня занимает 5 минут,а на С# - 40 минут.
Да!!!

Слепил запрос в студии и кое-как наляпал код в ВБА.

Запустил ВБА - поймал ошибку в ВБА - перекорячил ВБА код - перевыполнил перекоряченный код - не понравилось выполнение запроса - в студии переджоинил запрос, выполнил, вернулся в ВБА - перевыполнил вызов запроса.

Пара итераций и сложная логика работает за 5 минут.
...
Рейтинг: 0 / 0
Отвязанный рекордсет фильтр по форме и ActiveConnection
    #36738280
Фотография Ёжик`
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladimirKr
:) У меня этих аксессов уже столько, что запутался, где что стоит.
Но видимо хотфикс не поможет.
В данном случае хотфикс не поможет, но карму точно поправит.
А я логер написал, и все про всех знаю
...
Рейтинг: 0 / 0
Отвязанный рекордсет фильтр по форме и ActiveConnection
    #36738331
alvk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ёжик`,

чё и я там есть?
...
Рейтинг: 0 / 0
Отвязанный рекордсет фильтр по форме и ActiveConnection
    #36738336
alvk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alvk,

тьфу, тупанул, вопрос снимаю.
...
Рейтинг: 0 / 0
Отвязанный рекордсет фильтр по форме и ActiveConnection
    #36738341
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
А зачем закрывать рекордсет после присваивания его свойству формы Recordset?
...
Рейтинг: 0 / 0
Отвязанный рекордсет фильтр по форме и ActiveConnection
    #36738355
VladimirKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ёжик`,

Прикольно.
Возьму на вооружение.
...
Рейтинг: 0 / 0
Отвязанный рекордсет фильтр по форме и ActiveConnection
    #36738373
VladimirKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFKА зачем закрывать рекордсет после присваивания его свойству формы Recordset?

Да вообщем-то незачем. Это все Гетц. :)

А так, сборщик мусора и освобождения интерфейсов в VBA работает хорошо.
...
Рейтинг: 0 / 0
Отвязанный рекордсет фильтр по форме и ActiveConnection
    #36739854
Уважающий ВсехВас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFKА зачем закрывать рекордсет после присваивания его свойству формы Recordset?

Честное пионерское не надо!? Я в "непонятках" и закрываю, и Nothing "леплю".
Ещё пару слов,так сказать, для чайников.
...
Рейтинг: 0 / 0
Отвязанный рекордсет фильтр по форме и ActiveConnection
    #36739859
Уважающий ВсехВас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladimirKrIFKА зачем закрывать рекордсет после присваивания его свойству формы Recordset?

Да вообщем-то незачем. Это все Гетц. :)

А так, сборщик мусора и освобождения интерфейсов в VBA работает хорошо.


Ну та же просьба.Ещё пару слов,так сказать, для чайников. Если не трудно,конечно же!
...
Рейтинг: 0 / 0
Отвязанный рекордсет фильтр по форме и ActiveConnection
    #36740329
VladimirKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважающий ВсехВасVladimirKrIFKА зачем закрывать рекордсет после присваивания его свойству формы Recordset?

Да вообщем-то незачем. Это все Гетц. :)

А так, сборщик мусора и освобождения интерфейсов в VBA работает хорошо.


Ну та же просьба.Ещё пару слов,так сказать, для чайников. Если не трудно,конечно же!

Данный код был заимствован из примера, приведенного в первой ссылке в начале топика (это чтобы не было лишнего базара, о том что я неправильно использовал рекоменданции):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
  Dim Rs As ADODB.Recordset
  Dim Con As ADODB.Connection

  Set Rs = New ADODB.Recordset
  ...
  Set Номенклатура.Form.Recordset = Rs
  Rs.Close
  Set Rs = Nothing
  Con.Close
  Set Con = Nothing

Закрывать Rs было стремно (сделаю Rs.Close и закроется Номенклатура.Form.Recordset - c DAO.Recordset так бы и случилось), но прокатило для ADODB.Recordset. Видимо, ADODB.Recordset.Close просто уменьшает счетчик ссылок на объект и не делает больше ничего.
(ADODB.Recordset.Close - это просто вызов метода ::Release унаследованного от класса IUnkown - родоначальника всех COM)

Объясню упрощенно:
Ком-объекты в VBA ведут себя следующим образом: они уничтожаются и освобождают память тогда, когда не остается больше ссылок на них.
То есть, если я напишу Set Rs=Nothing, я удалю одну ссылку на объект, но останется еще одна:
Номенклатура.Form.Recordset, которая будет жить, пока открыта форма. Когда форма будет закрыта - ссылок на Recordset не останется и будет вызван деструктор этого объекта.

А что будет, если я не напишу Set Rs=Nothing? Слава богу не на С++ пишем: Rs объявлена локальной переменной и после выхода из процедуры VBA сам закроет ссылку (то есть - сам присвоит Set Rs=Nothing). Это и называется "сбором мусора". И надо сказать, я давно не видел жалоб на утечку памяти, происходящую от VBA.
Примеры Гетца исторически восходять к временам Access 2.0, когда еще не было Com. И я подозреваю, что в каждом новом издании тупо Copy-Past)

Вывод: локальные Ком-объекты уничтожать после использования не надо, если вы готовы мириться, что они занимают память, пока продолжает выполняться процедура. На выходе из процедуры VBA сделает это за вас, и сделает корректно.

На самом деле все чуть сложнее и в VBA каким-то хитрым образом, путем использования коллекций можно добиться сбоя в подсчете ссылок на объект. (кажется, Бенедикт демонстрировал в этом форуме что-то такое).

Более подробно все это описано в хорошей книжке, которую советую прочитать всем, кто хочет разобраться с COM-объектами (понять их))
"Сущность технологии COM" Автор: Дональд Бокс
...
Рейтинг: 0 / 0
Отвязанный рекордсет фильтр по форме и ActiveConnection
    #36740453
Уважающий ВсехВас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladimirKrУважающий ВсехВасVladimirKrIFKА зачем закрывать рекордсет после присваивания его свойству формы Recordset?

Да вообщем-то незачем. Это все Гетц. :)

А так, сборщик мусора и освобождения интерфейсов в VBA работает хорошо.


Ну та же просьба.Ещё пару слов,так сказать, для чайников. Если не трудно,конечно же!

Данный код был заимствован из примера, приведенного в первой ссылке в начале топика (это чтобы не было лишнего базара, о том что я неправильно использовал рекоменданции):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
  Dim Rs As ADODB.Recordset
  Dim Con As ADODB.Connection

  Set Rs = New ADODB.Recordset
  ...
  Set Номенклатура.Form.Recordset = Rs
  Rs.Close
  Set Rs = Nothing
  Con.Close
  Set Con = Nothing

Закрывать Rs было стремно (сделаю Rs.Close и закроется Номенклатура.Form.Recordset - c DAO.Recordset так бы и случилось), но прокатило для ADODB.Recordset. Видимо, ADODB.Recordset.Close просто уменьшает счетчик ссылок на объект и не делает больше ничего.
(ADODB.Recordset.Close - это просто вызов метода ::Release унаследованного от класса IUnkown - родоначальника всех COM)

Объясню упрощенно:
Ком-объекты в VBA ведут себя следующим образом: они уничтожаются и освобождают память тогда, когда не остается больше ссылок на них.
То есть, если я напишу Set Rs=Nothing, я удалю одну ссылку на объект, но останется еще одна:
Номенклатура.Form.Recordset, которая будет жить, пока открыта форма. Когда форма будет закрыта - ссылок на Recordset не останется и будет вызван деструктор этого объекта.

А что будет, если я не напишу Set Rs=Nothing? Слава богу не на С++ пишем: Rs объявлена локальной переменной и после выхода из процедуры VBA сам закроет ссылку (то есть - сам присвоит Set Rs=Nothing). Это и называется "сбором мусора". И надо сказать, я давно не видел жалоб на утечку памяти, происходящую от VBA.
Примеры Гетца исторически восходять к временам Access 2.0, когда еще не было Com. И я подозреваю, что в каждом новом издании тупо Copy-Past)

Вывод: локальные Ком-объекты уничтожать после использования не надо, если вы готовы мириться, что они занимают память, пока продолжает выполняться процедура. На выходе из процедуры VBA сделает это за вас, и сделает корректно.

На самом деле все чуть сложнее и в VBA каким-то хитрым образом, путем использования коллекций можно добиться сбоя в подсчете ссылок на объект. (кажется, Бенедикт демонстрировал в этом форуме что-то такое).

Более подробно все это описано в хорошей книжке, которую советую прочитать всем, кто хочет разобраться с COM-объектами (понять их))
"Сущность технологии COM" Автор: Дональд Бокс

Большое спасибо!
...
Рейтинг: 0 / 0
Отвязанный рекордсет фильтр по форме и ActiveConnection
    #36741690
vladK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladimirKr

куда дальше двинулись то, тема интересная, по крайней мере в образовательных целях если не практических. (извините что так потребительски на Вашу проблему смотрю:)

Пробовали ли как собирались ConnectionString в Properties рекордсета прибить?

А что если фильтр рекордсета сделать, а не по форме?
...
Рейтинг: 0 / 0
Отвязанный рекордсет фильтр по форме и ActiveConnection
    #36741903
Guest33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladimirKr,
У меня тоже вопросы. Мог бы проверить и сам, но надо заводить адп, форму и тд (сам работаю с мдб)

1. авторОказалось, что в момент выполнения

Номенклатура.Form.FilterOn = True
Номенклатура.Form.Filter = "[GrInd]=" + CStr(Gr)

происходит перезапрос данных, то есть новый вызов с сервера dbo.hpAutoWorkTools. Исследовано профайлером.

А что будет, если формировать источник данных на основе коннекта с UseClient?

2. автор Set Rs = New ADODB.Recordset
Rs.Open "exec dbo.hpAutoWorkTools " + MsDate(DocSelect.DocDt) + "," + MsNum(DocSelect.DocInd), Con, adOpenStatic, adLockOptimistic

Set Rs.ActiveConnection = Nothing


Спасибо. Извините за лень.

А что будет, если попробовать
Код: plaintext
1.
Set Me.Recordset.ActiveConnection = Nothing
...
Рейтинг: 0 / 0
Отвязанный рекордсет фильтр по форме и ActiveConnection
    #36742305
VladimirKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vladKVladimirKr

куда дальше двинулись то, тема интересная, по крайней мере в образовательных целях если не практических. (извините что так потребительски на Вашу проблему смотрю:)

Пробовали ли как собирались ConnectionString в Properties рекордсета прибить?

Не нашел в Properties ничего похожего. Зато, блин, есть милое свойство ADODB.Recordset.Source, которое "Нельзя изменить пока объект открыт" (Run-Time error). Есть подозрение, что форма тупо берет эту строку и посылает на сервер, причем не найдя Me.Recordset.ActiveConnection, делает это тупо под CurrentProject.AccessConnection.
Проверить это легко. Видимо, щас сделаю и напишу.

Пробовал фильтр по рекордсету, еще раньше чем все остальное. Применение фильтра к Recordset формы проходит без ошибок, НО не меняет картинку на экране. Скорее всего, потому, что в момент присвоения нового рекордсета свойству Form.Recordset форма копирует куда-то в себя массив букмарок рекордсета и дальше работает уже с этим массивом.
...
Рейтинг: 0 / 0
Отвязанный рекордсет фильтр по форме и ActiveConnection
    #36742349
VladimirKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guest33VladimirKr,
У меня тоже вопросы. Мог бы проверить и сам, но надо заводить адп, форму и тд (сам работаю с мдб)

1. авторОказалось, что в момент выполнения

Номенклатура.Form.FilterOn = True
Номенклатура.Form.Filter = "[GrInd]=" + CStr(Gr)

происходит перезапрос данных, то есть новый вызов с сервера dbo.hpAutoWorkTools. Исследовано профайлером.

А что будет, если формировать источник данных на основе коннекта с UseClient?

2. автор Set Rs = New ADODB.Recordset
Rs.Open "exec dbo.hpAutoWorkTools " + MsDate(DocSelect.DocDt) + "," + MsNum(DocSelect.DocInd), Con, adOpenStatic, adLockOptimistic

Set Rs.ActiveConnection = Nothing


Спасибо. Извините за лень.

А что будет, если попробовать
Код: plaintext
1.
Set Me.Recordset.ActiveConnection = Nothing


1. Дык, так и сделано. adUseClient.
2. Проверено в дебагере. Свойство Me.Recordset.ActiveConnection = Nothing пока не выполнится
Me.Filter="....". А вот после присвоения фильтра происходит пересоздание рекордсета с использованием Recordset.Source и, видимо, CurrentProject.AccesConnection. Делает это форма сама, хотя ее и не просят.
...
Рейтинг: 0 / 0
Отвязанный рекордсет фильтр по форме и ActiveConnection
    #36742408
VladimirKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladimirKr

.....милое свойство ADODB.Recordset.Source, которое "Нельзя изменить пока объект открыт" (Run-Time error). Есть подозрение, что форма тупо берет эту строку и посылает на сервер, причем не найдя Me.Recordset.ActiveConnection, делает это тупо под CurrentProject.AccessConnection.
Проверить это легко. Видимо, щас сделаю и напишу.


Да, так и есть. Настоящий зверинец. Access считает, что лучше знает, ЧТО именно нужно пользователю:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  Con.ConnectionString = "Provider=SQLOLEDB.1;Password=блабла;Persist Security Info=True;User ID=sa;Initial Catalog=Auto;Data Source=VLADIMIRHOST\SQLEXPRESS"
  Con.CursorLocation = adUseClient
  Con.Open
    
  Set Rs = New ADODB.Recordset
  
  Rs.Open "exec dbo.hpAutoWorkTools " + MsDate(DocSelect.DocDt) + "," + MsNum(DocSelect.DocInd) + ",0", Con, adOpenStatic, adLockBatchOptimistic
    
  Set Rs.ActiveConnection = Nothing
  Set Con = Nothing
  
  Set Номенклатура.Form.Recordset = Rs

После выполнения
Код: plaintext
    Номенклатура.Form.Filter = "[GrInd]=" + CStr(Gr)
Смотрим на ?Номенклатура.Form.Recordset.ActiveConnection и видим:

"Provider= Microsoft.Access.OLEDB.10.0 ;Persist Security Info=True;Data Source=VLADIMIRHOST\SQLEXPRESS;User ID=sa;Password=блабла;Initial Catalog=Auto;Data Provider=SQLOLEDB.1"
То есть строку CurrentProject.AccessConnection.
От, сцуко!
А если бы мое соединение было вообще в другую базу, но с такойже хранимой процедурой? Я бы радостно работал, не заметив, что произошло изменение ActiveConnection и наворотил бы дров при записи данных.
Будьте бдительны!
...
Рейтинг: 0 / 0
Отвязанный рекордсет фильтр по форме и ActiveConnection
    #36742438
KrukVN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladimirKrА если бы мое соединение было вообще в другую базу, но с такойже хранимой процедурой? Я бы радостно работал, не заметив, что произошло изменение ActiveConnection и наворотил бы дров при записи данных.
Будьте бдительны!
сомнительно..
сервер на месте, бд тоже. пользователь, пароль.. все осталось
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Отвязанный рекордсет фильтр по форме и ActiveConnection
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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