powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Добавление в таблицу данных из массива
5 сообщений из 5, страница 1 из 1
Добавление в таблицу данных из массива
    #39460274
dvstfu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, не подскажите можно ли с помощью VBA заполнить данные таблицы, которая уже существует в базе и ее структура определена?
В качестве примера: хочу добавить в таблицу output_data в поле out_value данные массива Arr (i)
Базу выложил на диск, потому что она больше максимально возможного размера вложения
https://drive.google.com/open?id=0B_bBwCfw-ZAQUnRRRVZUXzZYOVk

Код: 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.
32.
33.
Dim db As Database
Dim varArray() As Variant
Dim strSQL As String
Dim rstData As DAO.Recordset
Dim eData As Integer
Dim efields As Integer
 
Set db = CurrentDb()
efields = 9

strSQL = "SELECT Data.id_incoming_indicator, Data.id_region, Data.id_item_str, Data.twelvemonth, Data.id_unit, Data.ind_value, unit.name_unit, IncInd.name_incoming_indicator, StrItem.name_item_str FROM unit INNER JOIN (StrItem INNER JOIN (IncInd INNER JOIN Data ON IncInd.id_incoming_indicator = Data.id_incoming_indicator) ON StrItem.id_item_str = Data.id_item_str) ON unit.id_unit = Data.id_unit WHERE (((Data.id_incoming_indicator)=" & [Forms]![main]![Data].[Form]![p1] & ") AND ((Data.id_region)=" & [Forms]![main]![Data].[Form]![p2] & ") AND ((StrItem.name_item_str)='-'));"

Set rstData = db.OpenRecordset(strSQL, dbOpenDynaset)

rstData.MoveLast
rstData.MoveFirst
eData = rstData.RecordCount

ReDim varArray(efields, eData)
varArray = rstData.GetRows(eData)

Dim Arr() As Variant
ReDim Arr(eData)

For i = 1 To eData - 1
Arr(i) = varArray(5, i) / varArray(5, i - 1)
Next i

rstData.Close
Set rstData = Nothing


End Sub
...
Рейтинг: 0 / 0
Добавление в таблицу данных из массива
    #39460280
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Набор записей, он же рекордсет - это коллекция. И набор полей текущей записи рекордсета - тоже коллекция.
Тип "массив" не может быть приведён к типу "коллекция", который имеет текущая запись или набор записей, поскольку элемент коллекции имеет совсем иную структуру, нежели один элемент массива.

Так что только вручную, в цикле...
...
Рейтинг: 0 / 0
Добавление в таблицу данных из массива
    #39460357
dvstfu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как думаете вот такой вариант нормальный?

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Set tds = db.OpenRecordset("Output_data", dbOpenDynaset)

For i = 1 To eData - 1
Arr(i) = varArray(5, i) / varArray(5, i - 1)
tds.AddNew
tds!out_value = Arr(i)
tds!id_output_indicator = 1
tds!id_data = varArray(9, i)
tds!twelvemonth2 = varArray(3, i)
tds!id_unit = 3
tds.Update


Next i


tdsData.Close
Set tdsData = Nothing



Боюсь конечно представить что со мной преподаватель сделает за такие извращения, но вроде работает
...
Рейтинг: 0 / 0
Добавление в таблицу данных из массива
    #39460370
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да нормальный код... хотя я бы на рекордсеты не заморачивался, строил бы динамически текст INSERT-запроса и Connection.Execute его...
...
Рейтинг: 0 / 0
Добавление в таблицу данных из массива
    #39460454
dvstfu, а зачем вам массив Arr, если можно просто:
tds!out_value = varArray(5, i) / varArray(5, i - 1)
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Добавление в таблицу данных из массива
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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