Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вложенные With / 8 сообщений из 8, страница 1 из 1
20.04.2017, 13:49
    #39441587
aleks2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенные With
Не обладает ли кто тайным знанием: как во вложенном 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
20.04.2017, 14:08
    #39441606
guest_rusimport
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенные With
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
20.04.2017, 14:09
    #39441610
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенные With
мануал по 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
20.04.2017, 14:18
    #39441620
Вложенные With
Вложенные 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
20.04.2017, 14:18
    #39441621
aleks2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенные With
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
20.04.2017, 14:52
    #39441653
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенные With
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
20.04.2017, 14:52
    #39441654
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенные With
Fully qualified. А поскольку With New ADODB.Command после себя следов не оставляет - то при твоём подходе никак. См. 20418839 .
...
Рейтинг: 0 / 0
20.04.2017, 15:33
    #39441700
aleks2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенные With
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
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вложенные With / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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