Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Программное создание БД Access 
V
    Опции темы
ilyuha
Дата 10.10.2007, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Народ, помогите пожалуйста smile 
Пишу программу ведения БД, с использованием, как все уже поняли, ADO. так вот, почти совсем уже разобрался(что  мне надо). возник вопрос - как создавать БД(.mdb) во время исполнения программы?
2-ой день из гугла не вылажу - кое-что нашел, но, то что нашел, мягко говоря, понимается с трудом smile 

люди, плиииииззз, помогите! курсач горит, дедлайн близок :(
очень прошу.
PM MAIL   Вверх
Rodman
Дата 10.10.2007, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



PM MAIL WWW Skype GTalk YIM MSN   Вверх
Savek
Дата 10.10.2007, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 10.4.2006
Где: Воронеж

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



внизу этой траницы смотрел?
PM MAIL   Вверх
ilyuha
Дата 10.10.2007, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Rodman, спасибо огромное! хотел поставить тебе +, но мало постов у меня :(
будут вопросы - спрошу - надеюсь не откажете smile
PM MAIL   Вверх
ALeXandrK
Дата 10.10.2007, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 342
Регистрация: 31.1.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 6



Поставил + от ilyuha.
Не забудь тему закрыть smile 


--------------------
Богат не/ни тот, у кого много, а тот, кому хватает
PM WWW   Вверх
ilyuha
Дата 13.10.2007, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Прошу прощение за открытие данной темы из-за другого вопроса. просто не хочется флудить и захламлять раздел.
ситуация следущая.
есть структура,  я ее заполняю записью таблицы. в структуре имеется переменная типа TStringList. как ее вытянуть из таблицы?
сиквел-запросом? каким?
подскажите плиз smile 

знаю - глупый вопрос, но это мое первое знакомство с ADO и довольно сложно оно протекает...

надеюсь на вас...
PM MAIL   Вверх
Rodman
Дата 13.10.2007, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



создай новый топик и покажи код (структуру и что и где не получается!)
PM MAIL WWW Skype GTalk YIM MSN   Вверх
ilyuha
Дата 7.11.2007, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Прошу прощения за то, что снова поднимаю этот топик, но у меня возникла серьезная трабла....

создаю я так:
процедура в главном модуле - 
Код

procedure TForm1.N11Click(Sender: TObject);
var
  DBName: string;
  dir: string;
begin
  DBName:=InputBox('Создание БД','Введите имя файла БД','');
  if DBName='' then
    begin
      MessageDlg('Вы должны ввести имя создаваемого файла.',mtInformation,[mbOK],0);
      Exit;
    end
    else begin
      iDataModule.DBpath:=GetCurrentDir+DBName+'.mdb';
      iDataModule.CreateAccesMDBFile;
    end;
end;

из нее вызывается процедура  создания БД, находящаяся в модуле - 
Код

procedure TiDataModule.CreateAccesMDBFile;
const
  EngineCount=2;
  Engine: array[0..EngineCount] of string=('DAO.DBEngine','DAO.DBEngine.35','DAO.DBEngine.36');
var
  DAO: Variant;
  i: byte;

  function CheckClass(ClassName: string): boolean;
  var
   HRes: HResult;
  begin
    Result:=CoCreateInstance(ProgIDToClassID(ClassName),nil,CLSCTX_LOCAL_SERVER,IDispatch,HRes)=S_OK; // EOleSysError!!!
  end;

begin
  for i:=0 to EngineCount do
    if CheckClass(Engine[i]) then
      begin
        DAO:=CreateOleObject(Engine[i]);
        DAO.Workspaces[0].CreateDataBase(DBpath,';LANGID=0x0409;CP=1252;COUNTRY=0,',32);
        Exit;
      end;
  raise Exception.Create('Ошибка создания БД');
end;



и, в отмеченной мной строчке, вознекает ошибка EOleSysError "Недопустимая строка с указанием класса" smile 

помогите плиз, люди добрые....

ЗЫ на тачке стоит 2007-ой офис
PM MAIL   Вверх
ama_kid
Дата 8.11.2007, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

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



ilyuha
А если попробовать создавать файл БД не через древний DAO, а через более новый ADO? У меня всю жизнь работал такой код:
Код
function CreateAccessDataBase(FileName: string):string;
var
 cat: OLEVariant;
begin
 Result := '';
 try
  cat := CreateOleObject('ADOX.Catalog');
  cat.Create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + FileName +';');
  cat := NULL;
 except
  on e: Exception do
   Result := e.message;
 end;
end;



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
ilyuha
Дата 8.11.2007, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ama_kid, я этот способ пробовал в самом начале - та же фигня, только указанная выше ошибка возникает _при_вызове_этой функции...  smile 

но заметил такую вещь - при запуске проги из дельфи с функцией создания БД через ADOX, возникает вышеописанная ошибка, а из винды вылетает моя мессага обработчика исключений(Ошибка создания БД). в то же время, при описанном мною способе, как из среды так и  из венды, вылетает одно и то же - недопустимая строка с указанием класса  smile 

народ, помогите плиз... один не справлюсь smile
PM MAIL   Вверх
ama_kid
Дата 8.11.2007, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

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



ilyuha, вопрос на засыпку: зачем тебе непосредственный вызов функции CoCreateInstance? Во-первых, непонятно, что ты этим хочешь добиться (проверка на возможность использования данного энджайна?), а во вторых - в любом случае CreateOleObject - это обертка для неё и если создать не получится - то это выяснится уже в процессе создания... В общем, у меня заработал такой код, переделанный из твоего:
Код

procedure CreateAccesMDBFile(FileName:string);
const
  EngineCount=2;
  Engine: array[0..EngineCount] of string=('DAO.DBEngine','DAO.DBEngine.35','DAO.DBEngine.36');
var
  DAO: OLEVariant;
  i: byte;
begin
  for i:=0 to EngineCount do
   begin
    try
     DAO:=CreateOleObject(Engine[i]);
     DAO.Workspaces[0].CreateDataBase(FileName,';LANGID=0x0409;CP=1252;COUNTRY=0,',32);
     Exit;
    except
    end;
    end;
  raise Exception.Create('Ошибка создания БД');
end;
Но, как я и сказал - создает этот код БД древнего формата... smile 


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
ilyuha
Дата 8.11.2007, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ama_kid, тупо скопипастил этот сырец - не пашет... та же ошибка.... но при  вызове этой процедуры из главного модуля...
уже не знаю, че делать...

народ, хельп ми((((
PM MAIL   Вверх
ama_kid
Дата 8.11.2007, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

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



ilyuha, ну приложи максимально обрезанный проект, в котором наблюдается эта ошибка, в аттач, посмотрим... У меня почему-то складывается ощущение, что у тебя не все в порядке с драйверами DAO\ADO... MSOffice-то вообще стоит на машине? Драйвера DAO\ADO зарегистрированы?


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
ilyuha
Дата 8.11.2007, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ну, воть, обрезал в модуле  оставил некоторые ф-ии для понимания

Цитата(ama_kid @  8.11.2007,  17:59 Найти цитируемый пост)
MSOffice-то вообще стоит на машине? 

ну да... я же писал
Цитата(ilyuha @  7.11.2007,  13:29 Найти цитируемый пост)
на тачке стоит 2007-ой офис 



Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  primer.zip 3,43 Kb
PM MAIL   Вверх
ama_kid
Дата 8.11.2007, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

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



Цитата(ilyuha @  8.11.2007,  18:45 Найти цитируемый пост)
ну, воть, обрезал в модуле  оставил некоторые ф-ии для понимания
Может я, конечно, немного непонятно выразился, но я просил минимальную компилируемую версию проекта  smile Ради интереса - попробуй запустить то, что ты приаттачил smile
Ну ладно, поработав напильником над твоим проектом, я запустил твой датамодуль и получил то, на что рассчитывал - файл создается без проблем, поэтому подозрения на твою систему оправдываются... Попробуй найти файлы dao350.dll и dao360.dll в папке "C:\Program Files\Common Files\Microsoft Shared\DAO\" и запусти на исполнение команду, например "regsvr32 dao360.dll" - должно появиться сообщение, что библиотека успешно зарегистрирована... Если после таких манипуляций база данных не заработает - тогда не знаю, возможно в 2007-м офисе как-то по другому все сделано, я еще с ним не работал...



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

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

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


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


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

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

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


 




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


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

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