Создание базы данных

Тема в разделе "WASM.ZEN", создана пользователем alex_startup, 27 янв 2010.

  1. alex_startup

    alex_startup New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2009
    Сообщения:
    13
    Всем доброго дня!
    Как создать базу данных в процессе работы программы.
    Работаю в C++ Builder, с базой соединяюсь через ADOConnect, данные читаю через ADOQuery.
     
  2. Dian

    Dian Member

    Публикаций:
    0
    Регистрация:
    19 июн 2008
    Сообщения:
    222
    CREATE DATABASE name?
     
  3. tex32

    tex32 New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2009
    Сообщения:
    202
    Используй SQL
     
  4. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    создать заранее и вытащить из ресурсов ?
     
  5. alex_startup

    alex_startup New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2009
    Сообщения:
    13
    Create Database пробовал, но не получилось, с ним у меня связано много вопросов, на которые интернет ответа пока не дал.
     
  6. mutex_llc

    mutex_llc New Member

    Публикаций:
    0
    Регистрация:
    7 июн 2007
    Сообщения:
    14
    СУБД какая?
     
  7. alex_startup

    alex_startup New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2009
    Сообщения:
    13
    Пока для попробовать выбрал базу Accsess. С остальными, я думаю, будет полная аналогия.
    При создании базы в запросе имя базы - это имя будущего файла, к которому потом будет автоматом добавлено расширение или что-то иное, с чем будет необходимо сопоставить имя файла базы данных? (насколько я понял, в имени базы запрещается использование символов служебных, включая точку, а значит и указание расширения файла).
    При открытии базы через ADOConnect я подсоединяюсь к базе данных и использую его для связи ADOQuery с базой. Как в запросе указать местоположение будущей базы данных помимо её имени и нужен ли для этого ADOConnect.
    Это те самые вопросы, на которые не могу найти ответ.
     
  8. mutex_llc

    mutex_llc New Member

    Публикаций:
    0
    Регистрация:
    7 июн 2007
    Сообщения:
    14
    Для Access можно использовать COM объект "c:\Program Files\Common Files\System\ado\msadox.dll", например на Делфях так :

    Код (Text):
    1. function CreateMDB(const FileName: string): Boolean;
    2. var
    3.   Catalog: OLEVariant;
    4. begin  
    5.   Catalog := CreateOleObject('ADOX.Catalog');
    6.   try
    7.     Catalog.create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + '"' + FileName + '";');
    8.     Catalog := Unassigned;
    9.     Result := True;
    10.   except
    11.     on E: Exception do
    12.       begin
    13.         Result := False;
    14.         DatabaseError(E.Message);
    15.       end;
    16.   end;
    17. end;
    Не будет.
     
  9. mutex_llc

    mutex_llc New Member

    Публикаций:
    0
    Регистрация:
    7 июн 2007
    Сообщения:
    14
    Для Access можно использовать COM объект "c:\Program Files\Common Files\System\ado\msadox.dll", например на СиБлиндере так :

    Код (Text):
    1. //---------------------------------------------------------------------------
    2. #include <vcl.h>
    3. #pragma hdrstop
    4. #include <Forms.hpp>
    5. #include <comobj.hpp>
    6. #include <sysvari.h>
    7. #include <DB.hpp>
    8. //---------------------------------------------------------------------------
    9. int CreateMDB(const char* FileName)
    10. {
    11.   Variant Catalog;
    12.   AnsiString ConnectionString;
    13.  
    14.   try
    15.   {
    16.     ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
    17.     ConnectionString = ConnectionString + FileName;
    18.     Catalog = CreateOleObject("ADOX.Catalog");
    19.     Catalog.Exec(Procedure("create") << ConnectionString);
    20.     Catalog = Unassigned;
    21.     return 1;
    22.   }
    23.   catch(const Exception& e)
    24.   {
    25.     DatabaseError(e.Message);
    26.     return 1;
    27.   }
    28. }
    29. //---------------------------------------------------------------------------
    30. WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
    31. {
    32.   try
    33.   {
    34.      Application->Initialize();
    35.      CreateMDB("BcbTest.mdb");
    36.   }
    37.   catch (Exception &exception)
    38.   {
    39.      Application->ShowException(&exception);
    40.   }
    41.   catch (...)
    42.   {
    43.      try
    44.      {
    45.        throw Exception("");
    46.      }
    47.      catch (Exception &exception)
    48.      {
    49.        Application->ShowException(&exception);
    50.      }
    51.   }
    52.   return 0;
    53. }
    54. //---------------------------------------------------------------------------
    Не будет.
     
  10. alex_startup

    alex_startup New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2009
    Сообщения:
    13
    Это всё здорово, когда-то я такой вариант попробовал и он, по-моему, даже работал. Но хочется полнее разобраться с запросами.
    Допустим, через ADOConnect подсоединяемся к базе данных (там же указывается имя файла базы). Если файл базы данных не обнаружен, вернётся сообщение об ошибке. Далее выполняем запрос CreateDatabase <database name>, где указываем имя будущей базы данных (имя файла базы или что-то отвлечённое?). Для ADOQuery источником данных является ADOConnect, который на этот момент ни куда не ссылается, потому, что файл базы отсутствует. Соответственноо, каким образом ADOQuery будет знать, какого формата база должна быть создана.
    Быть может формат запроса CreateDatabase <database name> более сложен, чем я думаю, но другого не в книгах, не в нете я не находил.
     
  11. mutex_llc

    mutex_llc New Member

    Публикаций:
    0
    Регистрация:
    7 июн 2007
    Сообщения:
    14
    В 1-м стандарте языка SQL (1986 год) нет CreateDatabase и каждая СУБД реализовала эту операцию по своему. Думаю, что общего универсального способа не существует.
    Последний стандарт (SQL2008) тут: http://www.iso.org/iso/iso_catalogue.htm
    Я не читал, он слишком сложен и огромен.
     
  12. alex_startup

    alex_startup New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2009
    Сообщения:
    13
    Всё равно спасибо за подсказки.
     
  13. alex_startup

    alex_startup New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2009
    Сообщения:
    13
    А можно ли каким-то образом увеличить быстродействие работы с базами Access. Слышал, что в ВижуалС всё работает гораздо быстрее (это всё же продукт от того же Microsoft, что и Access). Время записи данных из файла в базу составляет примерно 140 сек (26 500 записей по 11 полей), если использовать запрос INSERT.