powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / обработка Recordset'ов (ADO) в VBA
5 сообщений из 5, страница 1 из 1
обработка Recordset'ов (ADO) в VBA
    #35655243
Евгений_Анатольевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оба Recordset подключены одним соединением, к одной БД, только разные выборки делаются у запросов. поле RAZMER появляется ручками, через запрос, т.е. так:

Код: plaintext
.... '' AS RAZMER FROM...

далее нужно сравнить два сета, объеденить часть данных из 1го в строку и вставить в поле RAZMER во втором:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    While Not rstRset1.EOF
        While Not rstRset.EOF
            If rstRset1("ARTCOL") = rstRset("ARTCOL") Then
                CelVal = CelVal + Str(Right(rstRset("TOVAR"),  2 )) + "-" + _
                LTrim(Str(rstRset("OSTATOK"))) + ";"
            End If
            rstRset.MoveNext
        Wend
        rstRset1("RAZMER").Value = CelVal
        CelVal = ""
        rstRset1.MoveNext
    Wend

при записи в
Код: plaintext
rstRset1("RAZMER").Value = CelVal
ругается нехорошими словами, что нет доступа на редактирование.

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

таблицу саму с исходными данными редактировать не нужно, т.е. из нее просто данные выбираются для последующей обработки.

Заранее спасибо..
...
Рейтинг: 0 / 0
обработка Recordset'ов (ADO) в VBA
    #35655308
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений_АнатольевичОба Recordset подключены одним соединением, к одной БД,Тогда лучше и надежнее объединить оба запроса в один.

Евгений_Анатольевичвоспрос: можно ли как-то дописывать в этот рекордсет данные или лучше использовать что-то другое для этого? есть ли какие-нибудь "виртуальные рекордсеты" что ли.. чтобы туда все сбросить и так же обрабатывать?В принципе, есть и виртуальные рекордсеты. Но проще всего 1) соединить два запроса в один; 2) работать с массивами; 3) перезапускать второй запрос с параметрами по мере необходимости;
Выбирай на вкус.

Записывать данные в рекордсет не стоит никогда.
...
Рейтинг: 0 / 0
обработка Recordset'ов (ADO) в VBA
    #35655332
Евгений_Анатольевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlТогда лучше и надежнее объединить оба запроса в один.

Если честно - понял, что подразумеваете под этим :) могу подробнее пояснить задачу :)
Есть файл в котором хранятся данные, избыточное количество. т.е. например два вида номенклатуры, оди из которых расширение другого. поэтому одним sql-запросом получаю обобщенный набор строк, потом из второго заапроса-расширенного я вытаскиваю из разных строк данные, объединяю в строку и должен записать в соответствующую строку из первого запроса, в новый столбец. надеюсь более менее понятно описал.. %)

White Owl
В принципе, есть и виртуальные рекордсеты. Но проще всего 1) соединить два запроса в один; 2) работать с массивами; 3) перезапускать второй запрос с параметрами по мере необходимости;
Выбирай на вкус.

Записывать данные в рекордсет не стоит никогда.

1. - видимо в моем случае неприменимо.
2. - а можно поподробнее - в каком виде? т.е. какие объекты использовать и т.п. :) дальше я по мануалам разберусь...
3. - вообще не понял, если честно.. какими параметрами, если мне надо делать выборку построчную? т.е. от курсора мне никак не убежать, но лучше уж делать все с исходными массивами данных, дабы не загружать процессор, чем потом обрабатывать в экселе построчно.. просто для 7 и 17 тысяч записей в каждой таблице соотвественно, уже проверял.. минут 15 на современной машине делает.. правда на виртуалке, но там памяти выделено нормально и на основной машине нет никаких задач ресурсоемких при этом..
...
Рейтинг: 0 / 0
обработка Recordset'ов (ADO) в VBA
    #35655333
Евгений_Анатольевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*не понял, что подразумевается
...
Рейтинг: 0 / 0
обработка Recordset'ов (ADO) в VBA
    #35655369
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений_АнатольевичЕсть файл в котором хранятся данные, избыточное количество. т.е. например два вида номенклатуры, оди из которых расширение другого. поэтому одним sql-запросом получаю обобщенный набор строк, потом из второго заапроса-расширенного я вытаскиваю из разных строк данные, объединяю в строку и должен записать в соответствующую строку из первого запроса, в новый столбец. надеюсь более менее понятно описал.. %)ээээ.... чего-чего-чего?
Примеры файлов в студию. И собственно говоря, какие именно "файлы" имеются в виду? База данных? Текстовые файлы? DBF?

Евгений_Анатольевич1. - видимо в моем случае неприменимо.Может быть и применимо, надо только сначала понять задачу.

Евгений_Анатольевич2. - а можно поподробнее - в каком виде? т.е. какие объекты использовать и т.п. :) дальше я по мануалам разберусь...Я не очень понял что надо в итоге получить, но в общем, можно либо создать массив достаточного размера в памяти, скопировать в него первый рекордсет, потом изменять ячейку массива на основе данных из второго рекордсета.
Вместо массива можно использовать коллекцию (объект Collection), тогда не нужно будет заранее знать сколько строк в первом рекордсете, но будет чуть медленнее чем с массивом.

Евгений_Анатольевич3. - вообще не понял, если честно.. какими параметрами, если мне надо делать выборку построчную?Ну что-то в духе:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
rs1.open "select PK, f1, f2, f3 from table1"
cmd2.CommandText = "select ff1,ff2,ff3 from table2 where parentPK=?"
cmd2.Prepared = true
do while not rs1.eof
     ' какая-то работа с простыми полями первого рекордсета.
    set rs2 = cmd2.Execute(Parameters:=Array(rs1("PK")))
    do while not rs2.eof
          ' что надо делать со вторым рекордсетом
     loop
     rs2.close
loop

В конце концов, можно после обработки строки записывать ее сразу на Экселевский лист или куда там надо ее сохранить.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / обработка Recordset'ов (ADO) в VBA
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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