Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2010, 18:20   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
Вопрос Создание MDB. Сообщение об ошибке

Мне нужно из программы создать файл MDB. Нашел в этой теме пример, а этой показано как создать таблицу через запрос. Я написал из первой темы так:
Код:
procedure TForm1.BtnExportClick(Sender: TObject);
var
 ADOEngine: Variant;
begin
 if not FileExists(Form1.RzStatusPane36.Caption + 'base_' +
        ExtractFileDir(Form1.RzStatusPane36.Caption) + '.mdb') then
 begin
 try
  ADOEngine:=CreateOleObject('ADOX.Catalog');
  ADOEngine.Create('Provider=Microsoft.Jet.OLEDB.4.0; DataSource=' +
                   Form1.RzStatusPane36.Caption + 'export_base_'+
                   ExtractFileDir(Form1.RzStatusPane36.Caption) + '.mdb; Jet OLEDB:Engine Type=5;');
  ADOEngine.ActiveConnection.Close;
  ADOEngine:=Null;
 except on E:Exception do
  ShowMessage(E.Message);
 end;
 end
 else
 begin
  ShowMessage('ÁÄ óæå ñóùåñòâóåò!');
 end;
end;
Но выдалось сообщение:
Как мне создать программно MDBшку с полями:
ID
File
Num
Path
больше никаких полей не будет.
???
Изображения
Тип файла: png Безымянный.png (18.7 Кб, 81 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 02.12.2010, 10:25   #2
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Зачем такие сложности?
Код:
procedure TForm1.RzBitBtn1Click(Sender: TObject);
begin
  Query.Close;
  Query.SQL.Text := 'CREATE TABLE Tabl2 (`Id` COUNTER, `File` STRING (200),`Num` INT, `Path` STRING (200))';
  Query.ExecSQL;
end;
Стоп. И сам файл создать нужно? Ща посмотрю...

Последний раз редактировалось _SERGEYX_; 02.12.2010 в 10:27.
_SERGEYX_ вне форума Ответить с цитированием
Старый 02.12.2010, 10:50   #3
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Вот так у меня получилось.
Может можно и проще, но я хз...
Код:
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;

procedure TForm1.RzBitBtn1Click(Sender: TObject);
begin
  CreateAccessDatabase('000.mdb');
  ADOConnection1.Connected := False;
  ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=000.mdb;Persist Security Info=False';
  ADOConnection1.Connected := True;
  Query.Connection := ADOConnection1;
  Query.Close;
  Query.SQL.Text := 'CREATE TABLE Table1 (`Id` COUNTER, `File` STRING (200),`Num` INT, `Path` STRING (200))';
  Query.ExecSQL;
  ShowMessage('Готово');
end;
Ну, и там try .. except сам допиши.

Последний раз редактировалось _SERGEYX_; 02.12.2010 в 10:54.
_SERGEYX_ вне форума Ответить с цитированием
Старый 21.02.2011, 11:06   #4
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Друзья, подскажите, что это ошибка при создании БД происходит (D7)?
На строке:
Код:
cat := CreateOleObject('ADOX.Catalog.2.8'); //"Недопустимая строка с указанием класса"
cat := CreateOleObject('ADOX.Catalog'); //то же самое
В реестре ADOX.Catalog.2.8 есть.
Прик вне форума Ответить с цитированием
Старый 21.02.2011, 15:30   #5
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Код:
uses comobj, sysutils;
Прописано?
_SERGEYX_ вне форума Ответить с цитированием
Старый 21.02.2011, 16:08   #6
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Цитата:
Сообщение от _SERGEYX_ Посмотреть сообщение
Код:
uses comobj, sysutils;
Прописано?
Само собой - прописано. Иначе бы не компилировался код. Ошибка то в run-time.
Прик вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сообщение об ошибке... Arinka Помощь студентам 9 25.05.2010 16:58
Сообщение об ошибке ruavia3 Microsoft Office Excel 3 13.10.2009 23:10
Сообщение об ошибке Kreadlling Общие вопросы C/C++ 3 08.09.2009 13:30
Сообщение об ошибке! QWERT1988 Общие вопросы Delphi 4 01.06.2009 17:14
Выдать сообщение об ошибке Detka Общие вопросы Delphi 17 10.07.2008 15:06