powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как живет переменная типа рекордсурса
18 сообщений из 18, страница 1 из 1
Как живет переменная типа рекордсурса
    #32680045
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Моих дурных вопросов здесь уже разрешили несколько, хочу задать еще один.
Есть форма, работает только в виде клона. Есть процедура, которая их открывает, отдельный экземпляр для каждого заказчика. АДО-рекордсет создается при открытии и присваивается источнику подчиненной формы табличного вида. Для сумматора по выделению мне нужна копия этого рекордсета, не сам источник формы, иначе не сохранится экранное выделение. Если я открываю тождественный рекордсет в модуле формы, в переменной, задекларированной Public, все нормально. Но мне приходится открывать это рекордсет лишний раз, при первом обращении к нему в форме. Но получить доступ к тому рекордсету, который был использован в процедуре создания клона и его источника у меня не получается.
Где моя ошибка?
...
Рейтинг: 0 / 0
Как живет переменная типа рекордсурса
    #32680993
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поднимаю тему. Не получается у меня обеспечить доступ процедурам в модуле формы к рекордсету, открываемому во внешнем модуле.
...
Рейтинг: 0 / 0
Как живет переменная типа рекордсурса
    #32681005
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ниче не понятно
может, я плохой телепят?

откуда куда пытаетесь обратиться, и где и что не работает? и как не работает?
какой-такой рекордсет лишний раз?
что за внешний модуль?
...
Рейтинг: 0 / 0
Как живет переменная типа рекордсурса
    #32681008
трудно что-то сказать определенное по такому описанию.
надо бы код глядеть...


может быть
Set MyRec = SubFormControl.Form.Recordset.Clone ?
...
Рейтинг: 0 / 0
Как живет переменная типа рекордсурса
    #32681073
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ADO-рекордсет, открытый через выполнение сохраненной процедуры, нельзя клонировать. До того, как источник этой формы переехал на SQL-сервер,
Код: plaintext
Set MyRec = SubFormControl.Form.Recordset.Clone 
так и делалось. Теперь приходится искать обходные пути.
Я открываю не клон рекордсета, а его вторую копию.

Происходит это так.

Сейчас я делаю это в модуле формы при первой попытке обращения, по ошибке, ясно, что это изврат. Открыть его на OnOpen не удается, потому что источник загружается внешней процедурой, на этот момент все подходящие события формы уже отработали.

Процедура, открывающая клон формы:
Код: 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.
Public Sub NewHist(varCtrID As Long)

Dim stDocName As String
On Error Resume Next
Dim I As Integer
stDocName = "HistoryCtrBOARD_New"

If SysCmd(acSysCmdGetObjectState, acForm, stDocName) >  0  Then
 ' поиск уже открытого документа 
  For Each Frm In colFormsInfoCtr
    I = I +  1 
    'Debug.print Frm.Caption & ": " & Frm.PactID 
    If (Frm.CtrID <> varCtrID) Then
    Else
        DoCmd.SelectObject colFormsInfoCtr.Item(Frm.hwnd & "")
        Frm.Visible = True
        Frm.SetFocus
        Exit Sub
    End If
  Next Frm

End If
  
  Set Frm = New Form_HistoryCtrBOARD_New

  mintI = mintI +  1 
  colFormsInfoCtr.Add Item:=Frm, Key:=Frm.hwnd & ""
   'DoCmd.MoveSize (mintI + 1) * 80, (mintI + 1) * 350 
  
  DoCmd.SelectObject colFormsInfoCtr.Item(Frm.hwnd & "")
   'DoCmd.MoveSize (mintI + 1) * 80, (mintI + 1) * 350 
  DoCmd.OpenForm stDocName, , , , , acHidden
  Frm.CtrID = varCtrID
  Frm!CtrID1 = varCtrID
  Frm.Caption = "Info : " & Frm.CtrID.Column( 1 )
  Call HistoryCtrEventsFormRefresh(Frm, varCtrID, False, False, False, False)
   'Frm.Requery 
  Frm.Visible = True
End Sub

Процедура, вызываемая при окрытии формы и при изменении параметров настройки:
Код: 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.
Public Sub HistoryCtrEventsFormRefresh(pFrm As Form, pCtrID As Long, OpShowBills As Boolean, OpShowOfftake As Boolean, OpShowProj As Boolean, OpShowCurr As Boolean)
On Error GoTo Err_Sub
Set conn = New ADODB.Connection
conn.Provider = "MSDataShape"
conn.ConnectionString = "DATA PROVIDER=SQLOLEDB.1;SERVER=EDURSS\SQL_URSS;APP=Microsoft Access;DATABASE=TB2K;Trusted_Connection=Yes"
Set rst = New ADODB.Recordset
rst.CursorLocation = adUseServer
conn.Open
 '@OpShowBills bit,   @OpShowOfftake bit, @OpShowProj int 
  rst.Open "EXEC HistoryCtrEventsP " & pCtrID & _
    ", " & CStr(Abs(OpShowBills)) & _
    ", " & CStr(Abs(OpShowOfftake)) & _
    ", " & CStr(Abs(OpShowProj)) & _
    ", " & CStr(Abs(OpShowCurr)), conn, adOpenDynamic, adLockOptimistic,  1 
  
  Set pFrm.HistoryCtrEventsF.Form.Recordset = rst
  
  Exit_Sub:
   DoCmd.Hourglass False
   DoCmd.SetWarnings True
    Exit Sub
  
Err_Sub:
    MsgBox Err.Number & " " & Err.Description
    Resume Exit_Sub
End Sub
Вот к rst , определяемом в последней процедуре я хотела бы иметь доступ из модуля формы, но не могу этого добиться.
Переменная определена во внешнем модуле
Код: plaintext
1.
2.
3.
Option Compare Database
Option Explicit
Public conn As ADODB.Connection
Public rst As ADODB.Recordset
...
Рейтинг: 0 / 0
Как живет переменная типа рекордсурса
    #32681090
Andres 1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во внешнем модуле:
Код: plaintext
1.
Public MySuperVisibleRst as dao.recordset
...
Рейтинг: 0 / 0
Как живет переменная типа рекордсурса
    #32681093
Andres 1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andres 1Во внешнем модуле:
Код: plaintext
1.
Public MySuperVisibleRst as dao.recordset

Упс. Не так понял :)
...
Рейтинг: 0 / 0
Как живет переменная типа рекордсурса
    #32681124
странно
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
все очень странно

вот это

DoCmd.SelectObject colFormsInfoCtr.Item(Frm.hwnd & "")
'DoCmd.MoveSize (mintI + 1) * 80, (mintI + 1) * 350
DoCmd.OpenForm stDocName, , , , , acHidden

я не понял зачем нужно - это я бы просто выкинул ("процедура открытия клона")

Да и серверный курсор в паре с MSDataShape - для меня необычно...
я бы на клиентский поменял...


кажется в чистом результате - перепутывание форм происходит...
есть ли проблема собственно с рекордсетом - сходу не скажу...
...
Рейтинг: 0 / 0
Как живет переменная типа рекордсурса
    #32681136
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ольга_ТADO-рекордсет, открытый через выполнение сохраненной процедуры, нельзя клонировать.
эээ...
а почему нельзя?

честно говоря не понял - как у вас несколько экземпляров формы будут работать с одним публичным рекордсетом.
может в форме Public Property сделать?

З.Ы. А что не работает - так и не понятно.
...
Рейтинг: 0 / 0
Как живет переменная типа рекордсурса
    #32681171
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лох Позорный эээ...
а почему нельзя?
Код: plaintext
.Form.Recordset.Clone 
не проходит, и все тут. У него (ADO-рекордсета как источника формы,) и количество записей -1, и стоя в форме на записи, перейти на соседнюю программно нельзя, она как бы единственная. Только .AbsolutePosition адекватно позиционирует. Может,в 2002 этих пробем нет, но мы пока в 2000.
Код: plaintext
1.
как у вас несколько экземпляров формы будут работать с одним публичным рекордсетом.
это конечно бред, но я и сдним экземпляром пока не разобралась. Хотя, кажется, проблема была в том, что болталась одноименная переменная , определеная в другом месте.
А можно ли заслать значение локальной переменной в модуль формы, когда она открыта?
...
Рейтинг: 0 / 0
Как живет переменная типа рекордсурса
    #32681195
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ольга_ТМожет,в 2002 этих пробем нет, но мы пока в 2000.
Да я вообще-то про ADO говорил, а ему вроде как пофигу из какой версии аксеса его используют.
На всякий случай проверил с рекордсетом формы. В 2002 все клонируется. ADO вообще версии 2.1

Ольга_ТА можно ли заслать значение локальной переменной в модуль формы, когда она открыта?
Public Property Let
Public Property Set

Хотя применительно к клону рекордсета - я бы саму форму и заставлял бы внутри Property Get его создавать (если еще не создано). Разумеется если рекордсет формы удастся таки отклонировать.
...
Рейтинг: 0 / 0
Как живет переменная типа рекордсурса
    #32681199
патамушта
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Ольга_Т
Код: plaintext
.Form.Recordset.Clone 
не проходит, и все тут. У него (ADO-рекордсета как источника формы,) и количество записей -1, и стоя в форме на записи, перейти на соседнюю программно нельзя, она как бы единственная. Только .AbsolutePosition адекватно позиционирует. Может,в 2002 этих пробем нет, но мы пока в 2000.
[/quot]

количество записей -1 патамушта CursorLocation=adUseServer


Код: plaintext
1.
как у вас несколько экземпляров формы будут работать с одним публичным рекордсетом.
это конечно бред, но я и сдним экземпляром пока не разобралась. Хотя, кажется, проблема была в том, что болталась одноименная переменная , определеная в другом месте.
А можно ли заслать значение локальной переменной в модуль формы, когда она открыта?[/quot]

заслать - проперти Let\Set написать в модуле формы
Public Property Set SetObjValue(tValue As myObj)
set ObjVar = tValue
End Property

и пользовать "снаружи"..

2ЛП
"Глобального" рекордсета здесь не просматривается

глюки формы, если есть - связаны с "нестандартностью" провайдера, скорее всего...
До рекордсета все равно должно бы можно достучаться... (русскага язЫка не знаю)

Скорее всего, в результате перепутывания экземпляров форм происходит обращение к форме с неустановленным рекордсетом...
...
Рейтинг: 0 / 0
Как живет переменная типа рекордсурса
    #32681208
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
патамушта2ЛП
"Глобального" рекордсета здесь не просматривается
Как это? А это что тогда:
Ольга_ТВот к rst, определяемом в последней процедуре я хотела бы иметь доступ из модуля формы, но не могу этого добиться.
Переменная определена во внешнем модуле
Код: plaintext
1.
2.
3.
Option Compare Database
Option Explicit
Public conn As ADODB.Connection
Public rst As ADODB.Recordset


глюки формы, если есть - связаны с "нестандартностью" провайдера, скорее всего...
Кстати мысль.
...
Рейтинг: 0 / 0
Как живет переменная типа рекордсурса
    #32681217
сляпой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 ЛП
хи - не разглядел...
...
Рейтинг: 0 / 0
Как живет переменная типа рекордсурса
    #32681222
хи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а не разглядел - патамушта человек говорит - это то, чего мне не надо.
...
Рейтинг: 0 / 0
Как живет переменная типа рекордсурса
    #32681337
Торопыга
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
щас недосуг разбираться с параметрами - там как будто функцией их можно обрабатывать...

если сильно торопиться, сделал бы (попробовал), наверно так -
в форме для клонирования

1)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 'переменная уровня модуля формы 
 'для "самоподдержки" по Салахетдинову-Каплану-Гетцу 
Private selfRef as Object

OnOpen:

Set selfRef = Me

OnClose

Set selfRef = Nothing

"авторский код" превращается в
2)

Код: 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.
Private colFormsInfoCtr As Collection


Public Sub NewHist(varCtrID As Long)

Dim Frm  As Form_HistoryCtrBOARD_New

Dim stDocName As String
On Error Resume Next


Set Frm = colFormsInfoCtr("K" & CStr(varCtrID))

If Err.Number <>  0  Then
   Err.Clear
  Set Frm = New Form_HistoryCtrBOARD_New
   
   'mintI = mintI + 1 - это я не знаю зачем... 
  
  Frm.CtrID = varCtrID
  Frm!CtrID1 = varCtrID
  Frm.Caption = "Info : " & Frm.CtrID.Column( 1 )
  Call HistoryCtrEventsFormRefresh(Frm, varCtrID, False, False, False, False)
  
  colFormsInfoCtr.Add Item:=Frm, Key:="K" & CStr(varCtrID)
End If

  Frm.Visible = True
  Frm.SetFocus
End Sub


код модуля формы превратил бы примерно в такое
3)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Public Sub HistoryCtrEventsFormRefresh(pFrm As Form, pCtrID As Long, OpShowBills As Boolean, OpShowOfftake As Boolean, OpShowProj As Boolean, OpShowCurr As Boolean)
On Error GoTo Err_Sub
     
  Set pFrm.HistoryCtrEventsF.Form.RecordSource = "EXEC HistoryCtrEventsP " & pCtrID & _
    ", " & CStr(Abs(OpShowBills)) & _
    ", " & CStr(Abs(OpShowOfftake)) & _
    ", " & CStr(Abs(OpShowProj)) & _
    ", " & CStr(Abs(OpShowCurr))
      
    
Exit_Sub:
   DoCmd.Hourglass False
   DoCmd.SetWarnings True
    Exit Sub
  
Err_Sub:
    MsgBox Err.Number & " " & Err.Description
    Resume Exit_Sub
End Sub
...
Рейтинг: 0 / 0
Как живет переменная типа рекордсурса
    #32681469
соврал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
должно быть что-то такое:

pFrm.HistoryCtrEventsF.Form.RecordSource = "HistoryCtrEventsP "
pFrm.HistoryCtrEventsF.Form.InputParameters="@Param1=" & pCtrID & _
", @param2=" & CStr(Abs(OpShowBills)) & _
", @param3=" & CStr(Abs(OpShowOfftake)) & _
", @param4=" & CStr(Abs(OpShowProj)) & _
", @param5=" & CStr(Abs(OpShowCurr))

где @param1...5 - именя формальных параметров процедуры
...
...
Рейтинг: 0 / 0
Как живет переменная типа рекордсурса
    #32681501
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, я, кажется, справилась.
Проблема с невидимостью рекордсета была в лишней декларации этой переменной, нечаянно забытой.
Сформировать дубликат рекордсета для подчиненной формы клона мне удалось через вызов открывающей внешней процедурой процедуры из модуля субформы. Рекордсет в переменной, глобальной на уровне клона. Все тормоза с загрузкой записей с сервера только при открытии, открытая форма считает все мгновенно.
Осталась одна проблема с фильтрованием этого рекордсета. Событие формы ApplyFilter у меня отрабатывает и все действия по дубликату рекордсета проходят правильно, а вот сброс фильтра через панель инструментов мне отловить не удалось. С формы фильтр сбрасывается, а события никакого, на которое можно было бы повесить симметричные действия с дубликатом рекордсета, нет.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как живет переменная типа рекордсурса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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