Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как скопировать таблицу из одной базs Access в другую ? [D6, D7, Access]


Boris_S ©   (2003-12-11 10:46:00) 

Используются ADO - компоненты. Необходимо таблицу из одной базы Access ( mdb - файл) скопировать в другую базу (файл). При этом скопировать необходимо как структуру таблицы так и данные. Как это проще всего сделать? Спасибо за ответы!


Boris_S   (2003-12-11 16:26:00) [1]

я не уперся, просто специфика программы не допускает работы через OLE и COM объекты. Все равно огромное спасибо


Digitman   (2003-12-11 16:23:00) [2]


> Boris_S


я тебя навел на хорошую, изящную и простую по реализации идею с DAO.DBEngine - ты проигнорировал, уперевшись в свой ADO как в панацею ото всех "бед"

что ж ... продолжай, парься )


Stas   (2003-12-11 16:10:00) [3]

Ты этот запрос напиши в самом Access и выполни его там.


Boris_S   (2003-12-11 16:04:00) [4]

ГОСПОДА! ПОМОГИТЕ, ПОГИБАЮ!


Boris_S   (2003-12-11 15:43:00) [5]

Может я че-то не то делаю...
Есть ADOConnection1 , в котором ConnectionString "...Data Source=D:\dir1\Smet1.mdb...".
Есть ADOCommand1, в котором Connection=ADOConnection1, а CommandText = " select * into [newtable1] from [d:\dir1\smet2.mdb].[GBLStruct] "
По правой кнопке в режиме проектирования нажимаю Execute, после чего появляется "Parameter object is improperly defined.Inconsistent or incomplete information was provided"
Путь к файлу и название таблицы - правильные, если неправильные, то пишет что не находит файл.


sniknik   (2003-12-11 14:57:00) [6]

Boris_S © (11.12.03 12:30) [7]
> Попробовал
> SELECT * into [newbase.mdb].[newtable] from mytable
в ADOCommand, пишет
> Parameter object is improperly defined.Inconsistent or incomplete information was provided.

эта ошибка на этот запрос ну никак не могла выдаться. либо у тебя там лишнии "остатки" других запросов. параметр. либо запрос "немного" сокращен, так ничего существенного (как ты думал наверное) путь к базе, но именно в нем ошибка.


Digitman   (2003-12-11 12:53:00) [7]

DAO.DBEngine - объект-сервер автоматизации, на котором базируется MSAccess

все что делает Access - делает он это при неявном использовании этого объекта

ты можешь создать экз-р этого объекта явно

var DBEngine: OleVariant;

DBEngine := CreateOleObject("DAO.DBEngine.XX");

где XX - версия DAO (посмотри у себя в реестре в HKLM\CLSID) ... это м.б. 35, 36 или 40

получив ссылку на объект, ты обращаешься к нему точно так же как если бы ты делал это в редакторе MSAccess VBA


Boris_S   (2003-12-11 12:45:00) [8]

>вот ты пишешь into [newbase.mdb].[newtable]

>а откуда она, таблица newtable взялась в базе newbase.mdb ?
>ты ее создал ?

если не указывать [newbase.mdb]. , то создается копия таблицы с именем newtable в той базе, к которой есть коннект в ADO. Проблема не в том, что таблицы нет, а в том что запрос "не видит" базу, в которую надо скопировать таблицу.


Boris_S   (2003-12-11 12:41:00) [9]

что такое DAO.DBEngine и как заполнить таблицу с помощью SQL-запросов. Проблема в том что один компонент ADO может быть подключен только к одной базе. А переписывать данные построчно слишком долго по времени.


Digitman   (2003-12-11 12:37:00) [10]


> Boris_S


вот ты пишешь into [newbase.mdb].[newtable]

а откуда она, таблица newtable взялась в базе newbase.mdb ?
ты ее создал ?


Boris_S   (2003-12-11 12:30:00) [11]

Попробовал
SELECT * into [newbase.mdb].[newtable] from mytable
в ADOCommand, пишет
Parameter object is improperly defined.Inconsistent or incomplete information was provided.


Digitman   (2003-12-11 11:33:00) [12]

ну уж DAO.DBEngine - то гарантированно установлен на машине с ADO !

воспользуйся им тогда

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

а уж заполнение таблицы - дело одного-двух запросов ... можно и ADO для этого воспользоваться, а можно и тем же DAO.DBEngine - разницы нет


Stas   (2003-12-11 11:30:00) [13]

Правилнее наверное так:
SELECT * into [newbase.mdb].[newtable] from mytable


Stas   (2003-12-11 11:22:00) [14]

Попробуй так, но я могу ошбаться:
insert into [newbase.mdb].[newtable] select * from MyTable


Малиновский Владимир   (2003-12-11 11:22:00) [15]

Ну и плюнь на Access! Используй то, чем умеешь пользоваться!


Boris_S   (2003-12-11 11:16:00) [16]

Для работы программы на машине не обязательно должен быть установлен MSAccess. Кроме того, копирование таблицы из файла в файл будет довольно частой операцией, поэтому должно выполняться как можно поще и быстрее, желательно с помощью SQL, если это возможно.


Digitman   (2003-12-11 10:58:00) [17]

не проще ли, если на машине установлен MSAccess, обрптиться к нему командой

DoCmd.CopyObject

и пусть он сам сделает копию любого объекта базы ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо