powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вложенные With
8 сообщений из 8, страница 1 из 1
Вложенные With
    #39441587
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не обладает ли кто тайным знанием: как во вложенном With обратиться к полю/методу ВЕРХНЕГО уровня

' Здесь - не работает
.Parameters.Item("@Line").value = str

Код: vbnet
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.
  With New ADODB.Command
    .CommandText = "Finances.accTicketsRC_FileLineLoad"
    .CommandType = adCmdStoredProc
    .CommandTimeout = 120
    .NamedParameters = True
    .ActiveConnection = CurrentProject.Connection
    .Parameters.Append .CreateParameter("Return", adInteger, adParamReturnValue)
    .Parameters.Append .CreateParameter("@File", adVarWChar, adParamInput, 512, file)
    .Parameters.Append .CreateParameter("@Line", adVarWChar, adParamInput, 4000)

     ' Здесь - работает
    .Parameters.Item("@Line").value = str
   
    With New ADODB.stream
      .Charset = "Windows-1251"
      .Type = adTypeText
      .Open
      .LoadFromFile file
      While Not .EOS
        str = .ReadText(adReadLine)
        Debug.Print str

        ' Здесь - не работает
        .Parameters.Item("@Line").value = str

        .Execute Options:=adExecuteNoRecords
      Wend
      .Close
    End With
    
  End With
...
Рейтинг: 0 / 0
Вложенные With
    #39441606
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks2,

цитата:
"You can nest With statements by placing one With block within another. However, because members of outer With blocks are masked within the inner With blocks, you must provide a fully qualified object reference in an inner With block to any member of an object in an outer With block."
...
Рейтинг: 0 / 0
Вложенные With
    #39441610
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мануал по WithYou can nest With statements by placing one With block within another. However, because members of outer With blocks are masked within the inner With blocks, you must provide a fully qualified object reference in an inner With block to any member of an object in an outer With block.
...
Рейтинг: 0 / 0
Вложенные With
    #39441620
Вложенные With - не лучшее решение.
Вы луче создайте переменную для ADODB.Command и используйте ее:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Dim cmd As ADODB.Command
...
    Set cmd =  New ADODB.Command
    cmd.CommandText = "Finances.accTicketsRC_FileLineLoad"
    cmd.CommandType = adCmdStoredProc
...    
   cmd.Parameters.Item("@Line").value = str
   cmd.Execute Options:=adExecuteNoRecords
...
...
Рейтинг: 0 / 0
Вложенные With
    #39441621
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akinaмануал по WithYou can nest With statements by placing one With block within another. However, because members of outer With blocks are masked within the inner With blocks, you must provide a fully qualified object reference in an inner With block to any member of an object in an outer With block.


Я читать умею.
Интересует что-то полезное.

Вот как во внутреннем блоке обратиться "qualified object reference " к внешней command,
...
Рейтинг: 0 / 0
Вложенные With
    #39441653
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
aleks2Вот как во внутреннем блоке обратиться "qualified object reference " к внешней command,
Для начала надо заменить
With New ADODB.Command
на
Dim C As ADODB.Command
Set C = New ADODB.Command
With C

А потом везде, где что-то начинается на точку и имеется в виду C, добавить перед точкой C.

И еще после внешнего
End With
надо добавить
Set C = Nothing
...
Рейтинг: 0 / 0
Вложенные With
    #39441654
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fully qualified. А поскольку With New ADODB.Command после себя следов не оставляет - то при твоём подходе никак. См. 20418839 .
...
Рейтинг: 0 / 0
Вложенные With
    #39441700
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina Fully qualified. А поскольку With New ADODB.Command после себя следов не оставляет - то при твоём подходе никак. См. 20418839 .

Да ладно те. Вот .Parameters - это объект и для него я могу написать

Код: vbnet
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.
  Set cmd = New ADODB.Command
  With cmd
    .CommandText = "Finances.accTicketsRC_FileLineLoad"
    .CommandType = adCmdStoredProc
    .CommandTimeout = 120
    .NamedParameters = True
    .ActiveConnection = CurrentProject.Connection
    .Parameters.Append .CreateParameter("Return", adInteger, adParamReturnValue)
    .Parameters.Append .CreateParameter("@File", adVarWChar, adParamInput, 512, file)
    .Parameters.Append .CreateParameter("@Line", adVarWChar, adParamInput, 4000)
    
    Set p = .Parameters
   
    With New ADODB.stream
      .Charset = "Windows-1251"
      .Type = adTypeText
      .Open
      .LoadFromFile file
      While Not .EOS
        str = .ReadText(adReadLine)
        'Debug.Print str
        p.Item("@Line").value = str
        cmd.Execute Options:=adExecuteNoRecords
      Wend
      .Close
    End With
    
  End With
  Set cmd = Nothing



Понятно, что разницы немного. Но как бы с .Execute придумать?
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вложенные With
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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