Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 таблица как виртуальный объект VBA  [new]
Сергей Лалов
Member

Откуда: localhost SPB
Сообщений: 1410
Доброго времени суток!
Вопрос больше риторический... никто не пытался создать виртуальную таблицу , не обычную таблицу, которая видна в трее в области данных (ну или не видна, в зависимости от настроек видимости ), а именно в памяти , как объект, который можно хранить и передавать к примеру как переменную, и что самое главное также виртуально ее наполнять. Я ковырял ADO+ADOX, но не достиг успехов. При помощи расширения ADOX у нас есть переменная /объект типа Table, которая входит в состав каталога модели данных ADOX. Можно создать виртуально таблицу, столбцы к ней, присвоить ADO Recordset. А потом присоединить ее Append в каталог и дальше пользоваться как обычной таблицей. Но вот почему то присоединить чисто объект Table в качестве источника данных к контролу нельзя Негодяи ...
Хотел написать для темы топика чуть снизу обработчик JSON из MS Access, без линковок и временных таблиц аксесовских, с возможностью SELECT,INSERT,UPDATE,DELETE (на стороне сервера PHP) , и чтобы JSON сразу наматывался в виртуальный объект типа Table на стороне аксесса с последующей передачей на форму (само наматывание JSON примитивное,как и сам парсинг JSON в VBA- через MSXML).

Вопрос в следующем, нет ли возможности создать в модуле полноценный виртуальный объект со свойствами готовой таблицы?

В Java можно к примеру создать класс и расширить его свойствами, которые мне нужны, присвоить ему тип, какой мне нужен (с болью, но можно ). А потом использовать его как угодно. То есть другие языки позволяют.
6 сен 19, 21:13    [21965730]     Ответить | Цитировать Сообщить модератору
 Re: таблица как виртуальный объект VBA  [new]
vmag
Member

Откуда: MP
Сообщений: 3235
Сергей Лалов,

В акцесе встроенный родной джет неплохо справляется со своей работой и мне кажется именно на это был сделан упор, а по сабжу - так все упирается в память... не так просто даже организовать в памяти таблицу с изменяемым количеством записей (динамическое выделение памяти) а вдруг там будет несколько лямов строк, нам же только дай возможность, раз плюнуть ...
Я в такий случаях использовал скрытый список (со списком значений в данных) на форме, и заполнять его можно директивно и читать и ходить по его recordset, НО это если речь идет о количестве сток в списке примерно до 200 000, потом как мне показалось идет черная дыра - пишешь в никуда...
7 сен 19, 01:06    [21965814]     Ответить | Цитировать Сообщить модератору
 Re: таблица как виртуальный объект VBA  [new]
ROI
Member

Откуда: г. Тюмень
Сообщений: 1785
Сергей Лалов
В Java можно к примеру создать класс и расширить его свойствами, которые мне нужны, присвоить ему тип, какой мне нужен (с болью, но можно Картинка с другого сайта.). А потом использовать его как угодно. То есть другие языки позволяют.

Создайте класс на основе таблицы, прикрутите свои свойства и юзайте (делов то)
7 сен 19, 06:52    [21965836]     Ответить | Цитировать Сообщить модератору
 Re: таблица как виртуальный объект VBA  [new]
Сергей Лалов
Member

Откуда: localhost SPB
Сообщений: 1410
vmag,

По всей видимости да, от модели данных Jet в данном случае не отвертеться. Вы хитрО придумали, использовать листбокс для хранения и выборки данных. Таблиц нет, линков нет, контейнер для хранения информации и последующего и спользования в качестве источника данных)

Наверное имеет смысл создать обычную таблицу, с именами ключей Json, задать тип данных для них и заливать туда json, и не париться) Начиная с 2007 /2010 аксесса у таблиц в аксессе появились триггеры, так что можно обработать в принципе и изменение типа insert,update,delete в связке с web сервером. Я правда их не использовал никогда, но думаю сходные по принципу с MySql, по идеологии хотя бы.
7 сен 19, 16:12    [21965980]     Ответить | Цитировать Сообщить модератору
 Re: таблица как виртуальный объект VBA  [new]
Сергей Лалов
Member

Откуда: localhost SPB
Сообщений: 1410
ROI
Сергей Лалов
В Java можно к примеру создать класс и расширить его свойствами, которые мне нужны, присвоить ему тип, какой мне нужен (с болью, но можно Картинка с другого сайта.). А потом использовать его как угодно. То есть другие языки позволяют.

Создайте класс на основе таблицы, прикрутите свои свойства и юзайте (делов то)


К сожалению не покатит. Потому что объект типа таблица создаётся то без проблем, и заполняется данными в общем то тоже без проблем. Только присвоить его форме к примеру в качестве источника данных(объект/класс типа таблица) не удастся. До тех пор пока мы его не инициализируем в структуре самого аксесса, как таблицу входящую в коллекцию таблиц проекта. После этого объект становиться доступен в виде обычной таблицы, в окошке слева. То есть по сути весь смысл таблицы как виртуального объекта теряется. Это тоже самое что и .execute(" CREATE TABLE....") по сути, ну или ручное создание таблицы с последующим использованием. Ещё раз повторю, что к сожалению объект /класс типа таблица в чистом виде в аксессе использовать к сожалению в качестве источника данных нельзя, увы .
7 сен 19, 16:23    [21965983]     Ответить | Цитировать Сообщить модератору
 Re: таблица как виртуальный объект VBA  [new]
alecko
Member

Откуда: Башкирия
Сообщений: 548
Сергей Лалов, виртуальный рекордсет ADO в качестве источника использовать можно. может рекордсет на основе таблицы тоже?
7 сен 19, 22:20    [21966150]     Ответить | Цитировать Сообщить модератору
 Re: таблица как виртуальный объект VBA  [new]
Сергей Лалов
Member

Откуда: localhost SPB
Сообщений: 1410
alecko
Сергей Лалов, виртуальный рекордсет ADO в качестве источника использовать можно. может рекордсет на основе таблицы тоже?


Не все так просто.. конечно рекордсет можно использовать как объект в чистом виде, и к примеру присваивать его напрямую к свойству формы с одноименным названием recordset , точней вот так(на примере текущей формы): Me.recordset=rs, где rs это уже инициализированный и заполненный данными объект, но такое присвоение имеет очень существенный недостаток, гигантский я бы сказал. При таком способе перестают работать встроенные фильтры контролов (заголовков /колонок) на форме (табличной в частности), сортировка и прочие встроенные плюшки существенно замедляются ,то есть грид стандартной аксесовской табличной формы становится плохо юзабельным.
По второй части вопроса вашего: вроде бы казалось, да , в Аксессе есть возможность создать объект Table (расширение ADOX позволяет создать такой объект) и присоединить к нему заполненный рекордсет ADO тоже можно. И вроде бы все есть, и объект типа Table и рекордсет с данными. Только вот:
1) Пока вы не укажете что данный объект является частью семейства таблиц вашего проекта/базы , работать с ним напрямую в качестве источника нельзя.
2) Второй момент вытекает из первого - если вы объявляете такой объект как таблицу в семействе проекта этот объект автоматом становится обычной аксесовской таблицей , пусть и со свойством "невидимый" по умолчанию) Это ограничение модели Jet, как сказал уже выше vmag. И к сожалению это не переломить, а может к счастью, не знаю)
В общем оргвыводы построенные на эмпирических наблюдениях, создать можно, наполнить данными можно, но вот пользоваться напрямую c GUI аксесса нельзя .
7 сен 19, 23:29    [21966174]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить