Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Создание новой MS Access базы данных, Пример кода 
:(
    Опции темы
Vit
Дата 1.4.2002, 06:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Приведенная ниже процедура создает пустую базу данных MS Access

Код

Procedure CreateMSAccessDatabase(filename : String);
var  DAO: Variant;
    i:integer;
Const Engines:array[0..2] of string=('DAO.DBEngine.36', 'DAO.DBEngine.35', 'DAO.DBEngine');

    Function CheckClass(OLEClassName:string):boolean;
    var Res: HResult;
    begin
      Result:=CoCreateInstance(ProgIDToClassID(OLEClassName), nil, CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER, IDispatch, Res)=S_OK;
    end;
begin
 For i:=0 to 2 do
   if CheckClass(Engines[i]) then
     begin
       DAO := CreateOleObject(Engines[i]);
       DAO.Workspaces[0].CreateDatabase(filename, ';LANGID=0x0409;CP=1252;COUNTRY=0', 32);
       exit;
     end;
 Raise Exception.Create('DAO engine could not be initialized');
end;


Кусочек кода, который должен распознавать какая версия DAO установлена на компьютере мной не мог быть оттестирован, так как только одна работающая версия DAO может быть установлена на компьютере. У меня установлен Office XP (DAO36) и на нем все работает нормально. Интересно было бы узнать работает ли логика для Office 2000 (DAO35) и Office 97 (DAO30), так что присылайте отзывы, или может кто знает лучший способ как определить версию DAO (кроме моего, установки нескольких try .. except, поиска по диску DAOxx.DLL)


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Fantasist
Дата 1.4.2002, 07:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: нет
Всего: 41



Это здорово! Тут, помниться, TAРАКАН cпрашивал, как создать базу данных Access тогда, по моему, так и не ответели.

А какой параметр указывает, что именно база данных Access?
LANGID=0x0409 - этот что ли? (не довелось пока с DAO поработать)

В принципе CoCreateInstance, можно заменить на поиск по реестру, возможно будет эффективнее.


--------------------
Волны гасят ветер...
PM MAIL   Вверх
Vit
Дата 1.4.2002, 07:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Цитата

Это здорово! Тут, помниться, TAРАКАН cпрашивал, как создать базу данных Access тогда, по моему, так и не ответели.


Вообще-то я отвечал, правда и не настолько конкретно. Тепрерь же решил воплатить теорию в код.

Цитата

А какой параметр указывает, что именно база данных Access?
LANGID=0x0409 - этот что ли? (не довелось пока с DAO поработать)


Нет, это языковые настройки, как я понял. Насколько я понимаю просто для DAO MS Access это стандарт, и она и создается по умолчанию, все остальные базы - работают через какой-то "ретрансляционный layer" внутри DAO и не имеется возможности достучаться до таких мелочей. Впрочем импортируй в модуль DAOxx.DLL (где-то в микрософтовских Common Files) и сам посмотри ее интерфейсы.

Цитата

В принципе CoCreateInstance, можно заменить на поиск по реестру, возможно будет эффективнее

Не было времени разглядывать пристально, но кое-что меня озадачило: у меня стоит Office XP т.е. DAO36, так вот у меня есть обе DAO36.DLL и DAO35.DLL, и в реестре в HKEY_CLASSES_ROOT прописаны оба CLSID, но инициализируется только один(DAO36)! Другой (DAO35) дает ошибку при попытке инициализации. Вот и пойми, как определить?


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Fantasist
Дата 1.4.2002, 08:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: нет
Всего: 41



Цитата
Нет, это языковые настройки, как я понял


А, ну да. Логично. LANGID - мог бы и сам догадаться...



Цитата
Не было времени разглядывать пристально, но кое-что меня озадачило: у меня стоит Office XP т.е. DAO36, так вот у меня есть обе DAO36.DLL и DAO35.DLL, и в реестре в HKEY_CLASSES_ROOT прописаны оба CLSID, но инициализируется только один(DAO36)! Другой (DAO35) дает ошибку при попытке инициализации. Вот и пойми, как определить?


Хм! Очень интересно. Конечно, неплохо бы знать, на каком уровне происходит ошибка. Посмотрю у себя, но если ты все-таки найдешь время разшлядеть хоть чего-нибудь, раскажешь ok?


--------------------
Волны гасят ветер...
PM MAIL   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0688 ]   [ Использовано запросов: 23 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.