На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Обязательно указание:
1) типа базы данных (Paradox/Oracle/Interbase и т.п.)
2) способа доступа к базе данных (ODBC/ADO/DAO/BDE и т.п.)
Например: Paradox/BDE, MS Access/ADO

Наиболее часто задаваемые вопросы:
Базы даных для начинающих. Первые шаги. Понятие о BDE.
Переход на клиент-сервер и начала ADO
Приёмы работы с BLOB (OLE/Memo) полями
Запросы и параметры или как избавиться от многих проблем. Проблемы с датами в запросах.
Нужели мне нужно устанавливать BDE? (или почему не работает программа на другом компьютере)
Модераторы: Bas, Rouse_
  
> Создание файла БД Access средствами ADO , Как создать?
    А не подскажет-ли кто, как мне создать новый файл базы данных MS Access из программы на Delphi либо средствами ADO, либо средствами ActiveX. Желательно краткий пример или ссылка на таковой.
    В MSDN и DAO360.chw вычитал про объект DBEngine (даже пример есть), но там используются ряд констант типа dbLangGeneral, значения которых я там не нашел sad.gif.
      Через ADO не знаю, через DAO можно примерно так:

      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;


      А вообще не мучайся, гораздо проще подшить пустую базу данных в ресурсы и дело с концом...
        Цитата
        Vit, 11.12.03, 16:06
        через DAO можно примерно

        Спасибо, попробую.
        Особенно спасибо за ';LANGID=0x0409;CP=1252;COUNTRY=0' - этого я не смог найти в хелпах sad.gif
          Кому интересно, нашел еще один способ покороче, хотя суть от этого не меняется smile.gif :

          const
            CLASS_DBEngine: TGUID = '{00000100-0000-0010-8000-00AA006D2EA4}';
            dbLangCyrillic = ';LANGID=0x0409;CP=1252;COUNTRY=0';
            dbOption       =     0
          //                  or $20 // ? похоже создание в формате Access 97
                           ;

          procedure CreateMSAccessDatabase(FileName :String);
          begin
            Variant(CreateOleObject(ClassIDToProgID(CLASS_DBEngine)))
              .Workspaces[0]
                .CreateDatabase (FileName, dbLangCyrillic, dbOption);
          end;

          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0340 ]   [ 16 queries used ]   [ Generated: 15.05.24, 04:59 GMT ]