Dim p As New PropertyBag
' Получаем рекрдсет
Set Rc = DB.Execute("SELECT * FROM tblMain")
' Сохраняем
p.WriteProperty "Rec", Rc
' Восстанавливаем
Set Rc = p.ReadProperty("Rec")
Мне нужна копия, а не клон. Клон рекордсета, как и родитель, при всем том, что они являются разными объектами, тем не менее работают с одним и тем же набором данных. И изменение набора через клон, влечет изменение набора родителя, так как это по сути тот же набор. А мне нужна его копия (самого набора данных), никак не связанная с оригиналом.The trick писал(а):Я тебя не пойму. Чем не устраивает метод Clone?
ger_kar писал(а):... я помню, что читал, причем не абы где, а на MSDN, что PropertyBag не применим для коллекций. Может в составе рекордсета несколько другие по устройству коллекции, и все храниться одним куском, а не в виде связного списка, как в случае с VB' шной коллекцией.
Vi писал(а):Все коллекции похожи друг на друга, и никому нет дела до того, как они устроены внутренним образом. Тут дело в том, что если объект не поддерживает сохранение в PropertyBag, т.е. не поддерживает определённый интерфейс, то упаковать его в PropertyBag не получится.
ger_kar писал(а):И какой же интерфейс должен поддерживать объект, для упаковки его в PropertyBag? Обычный IDispath?
iGrok писал(а):Производный от IPersist, выше же писали.
Set MDB_Database = p.ReadProperty("DataBase")
Это чтобы на лету создавать базу и делать в ней всякие временные таблицы без обращения к диску? Наверное нельзя, ведь база данных это не объект.jangle писал(а):А базу данных можно сохранить в PropertyBag, чтобы использовать ее прямо от туда без сохранения на диск?
Вот если бы база отождествлялась с неким объектом (целиком) тогда можно было выяснить поддерживает ли этот объект интерфейсы IPersistStream и IPersistStreamInit. ADODB это даже не объект, а набор таковых, можно попробовать поэкспериментировать с ADOX.The trick писал(а):ger_kar, в PropertyBag можно сохранить только объекты поддерживающие IPersistStream и IPersistStreamInit.
Qwertiy писал(а):Интересно, а зачем вообще база, если можно всё в памяти держать?
Ну например, ADO умеет делать запросы к базе данных и получать оттуда данные. Все замечательно, но иногда возникает необходимость выбрать некие данные из одного места (запросом с отбором, соединениями и прочими нюансами), что-либо сделать с этими данными, затем получить другой набор данных и потом получить некий третий набор на основе первых двух. Первые два набора (рекордсета) получить не представляет большого труда, но вот потом... Есть два рекордсета, но как к ним сделать соответствующий запрос? Единственный вариант - выгрузить их в создаваемые на диске временные таблицы, во временной же базе (а можно и не во временной) и сделать запрос уже к ним. Но такой финт с созданием таблиц, выгрузкой в них данных с последующим запросом получается достаточно громоздким и не очень то и производительным. Так вот хотелось бы (точнее так пока думается) создавать базу в памяти вместо диска и обращаться к ней, чтобы как то ускорить процесс, исключив диск из оборота. В принципе можно и без этого, но в любом случае требуется нечто, что можно использовать для выгрузки данных и последующему обращению как к базе с запросами. Надеюсь понятно изложилQwertiy писал(а):Интересно, а зачем вообще база, если можно всё в памяти держать?
Сейчас этот форум просматривают: AhrefsBot, SemrushBot и гости: 58