powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вопрос по массиву.
25 сообщений из 25, страница 1 из 1
Вопрос по массиву.
    #32313971
АндрейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оказывается, массивы знаю слабо.
Помогите, - как объявить массив и как с ним работать, если известна его размерность только по столбцам, а число строк - нет. Ещё одна проблема: данные разных типов.
...
Рейтинг: 0 / 0
Вопрос по массиву.
    #32313981
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Ещё одна проблема: данные разных типов.

Тогда забудь про массивы (в принципе, можно как Variant хранить, но тогда замучишься тип узнавать- хотя смотря какая задача).
Юзай Collection, правда и там тип узнавать прийдется :)
...
Рейтинг: 0 / 0
Вопрос по массиву.
    #32313984
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Число строк - нет
Пусть первая размерность массива будет обозначать столбцы, а вторая - строки. Тогда ты сможешь делать так:

dim a(100,1) as ...
...
...
redim preserve a(100,123)

> данные разных типов
а объяви массив как
dim a(100,1) as Variant
...
Рейтинг: 0 / 0
Вопрос по массиву.
    #32313991
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотри про ReDim
...
Рейтинг: 0 / 0
Вопрос по массиву.
    #32313993
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Geo прав.
...
Рейтинг: 0 / 0
Вопрос по массиву.
    #32314026
АндрейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По поводу "замучивания" узнавать тип данных:
Задача: обработать поля Recordset-а (где-то на этой странице мой топик о повторах в запросе), вообщем - пропустить Recordset "через процедуру" и сделать ... новый Recordset.
А кто мне мешает перед занесением "окончательных" данных использовать CLng(), CStr() и т.д.?
...
Рейтинг: 0 / 0
Вопрос по массиву.
    #32314027
vist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще если пользоваться типом Variant
Dim arr() as variant
-----
-----
Находишь число строк и переобъявляешь
REDIM arr(nstolb,nstrok)

хотя в по help'y вроде можно и так
REDIM arr(nstolb) AS тип, arr(nstrok) AS тип
...
Рейтинг: 0 / 0
Вопрос по массиву.
    #32314052
АндрейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно ли заполнять все столбцы одной строки одним махом или только циклом по всем столбцам с "поячеечным" присвоением?
...
Рейтинг: 0 / 0
Вопрос по массиву.
    #32314060
vist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не знаю способа
хотя может кто-нибудь из более просвященных просветит?
...
Рейтинг: 0 / 0
Вопрос по массиву.
    #32314062
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Можно попробовать сделать одномерный массив, у которого элементами будут, в свою очередь, массивы. Но кому это надо? :^)
...
Рейтинг: 0 / 0
Вопрос по массиву.
    #32314064
vist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А одномерный все равно в цикле?
...
Рейтинг: 0 / 0
Вопрос по массиву.
    #32314081
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А одномерный (тот, который элемент другого) - обычным присваиванием.

A = B
...
Рейтинг: 0 / 0
Вопрос по массиву.
    #32314396
АндрейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На 90% сотворил: в массив загоняю, ненужное удаляю и ...затык!
Поскольку создать запрос на основе массива(?!) - бред, надо загнать его поля в таблицу. Проблема в том, что некоторые ячейки массива пустые(Null) и так должны перенестись в таблицу. А поля в таблице могут быть и "датные", и числовые. Не получается создать выражение. Рождается монстр:
DoCmd.RunSQL ("INSERT INTO.....VALUES ('" & AA(0, row) & "','" & CDate(Nz(AA(1, row), 0)) & "','" & Nz(AA(2, row), 0) & _
"','" & CDate(Nz(AA(3, row), 0)) & "','" & CDate(Nz(AA(4, row), 0)) & "','" & CInt(Nz(AA(5, row), 0)) & "','" & CLng(Nz(AA(6, row), 0)) & "');")
В итоге, пустые значения в таблице выглядят как 00:00:00 (дата) или 0 (число). Где-то я перемудрил с форматированием....
...
Рейтинг: 0 / 0
Вопрос по массиву.
    #32314523
vist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Конечно сложно
Может быть не очень красиво и у просвященных вызовет протест но я бы в этом случае использовал
Addnew
...
Рейтинг: 0 / 0
Вопрос по массиву.
    #32314529
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2АндрейК

У меня такое ощущение, что ты что-то не то делаешь. Обрисуй задачу целиком.
...
Рейтинг: 0 / 0
Вопрос по массиву.
    #32314531
АндрейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну пусть AddNew, а дальше?
Всё равно ведь надо форматировать значения...
...
Рейтинг: 0 / 0
Вопрос по массиву.
    #32314544
vist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Форматируй в строках и проверяй пошагово что получается
затем можно и сформировать инсерт
...
Рейтинг: 0 / 0
Вопрос по массиву.
    #32314546
АндрейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Частично задачу обрисовал в топике о повторах в запросе, но, по-моему, только запутал.
Можно свести задачу к текущей - передача "пустых" значений в таблицу, если поле - Дата или - Число. В таблице такая ячейка должна быть именно пустой.
Какой должен быть синтаксис запроса?
...
Рейтинг: 0 / 0
Вопрос по массиву.
    #32314556
vist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Даты -форматом в русский
Уменя была татая заморока
по числам-посмотри в конструтор нет ли зночения по умолчанию 0
...
Рейтинг: 0 / 0
Вопрос по массиву.
    #32314568
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лир. отступление:
можно было определить запись (т.е., следуя бейсиковскому сленгу - "пользовательский тип" Type), если набор полей определен. Если не определен, придется ограничится одномерным динамическим массивом. (Присвоение записей происходит много шустрее, чем присвоение массивов.) Затем создать динамический массив из записей.
__

Если таблица допускает в полях NULL, никаких "форматирований" не надо - это от излишнего усердия. Если не допускает, "отформатируйте" данные массива ПЕРЕД выгрузкой (а не в процессе). Будет проще составлять строку. А вообще-то выгрузку массива удобнее проводить не составлением строк SQL, а открытием рекордсета (where FALSE, чтобы не возвращать данные) и .AddNew.
...
Рейтинг: 0 / 0
Вопрос по массиву.
    #32314725
АндрейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
открытием рекордсета (where FALSE, чтобы не возвращать данные) и .AddNew.
А вот отсюда поподробнее, пожалуйста.
...
Рейтинг: 0 / 0
Вопрос по массиву.
    #32315746
АндрейК как-то всё усложнил и запутал.
Такая задача решается в процедуре с использованием 2-х Recordset-ов.
rst1 - на таблице-источнике. По нему выполняется цикл.
rst2 - получатель. Туда добавляются записи.
Всё просто и наглядно. И никаких массивов.
...
Рейтинг: 0 / 0
Вопрос по массиву.
    #32315966
АндрейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолию(в Киев)
Спасибо за идею!
Нечто подобное я, правда, сотворил (идея с массивом умерла вчера), но, верный себе, не мог не перемудрить:
Бывший запрос-источник, который загонялся в Ёксель, переделал в запрос на добавление. Добавляю записи в Temp-таблицу, корректирую её(один проход по всем записям), а потом экспортирую в Ёксель.
Чуствую, что где-то лишняя операция...
А что, по идее, быстрее: мой способ или перекидывать в таблицу записи по одной, предварительно корректируя?
...
Рейтинг: 0 / 0
Вопрос по массиву.
    #32316476
>А что, по идее, быстрее: мой способ или перекидывать в таблицу записи по >одной, предварительно корректируя?
Если имеется ввиду перекидывание записей по одной Temp-таблицу, то ваш метод быстрее, особенно на большом количестве записей.

>Чуствую, что где-то лишняя операция...
Как по мне,если конечная цель таблица в Ёкселе, то лишняя операция как раз - Temp-таблица.
Я бы использовал его библиотеку объектов, накидал бы туда данных (в конкретный файл, на конкретный лист, в конкретное место), плюс шапки, формулы, форматирование и т.д.
Но это - дело вкуса. :)
...
Рейтинг: 0 / 0
Вопрос по массиву.
    #32316490
АндрейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Записей, действительно, может быть много.
А отформатированный заранее лист Ёкселя, с заголовками, итогами, объединёнными ячейками, рамочками и т.д. придётся через OLE делать, а это ещё дольше(знаем - плавали).
Да и неясно, какие итоги понадобятся...
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вопрос по массиву.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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