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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2011, 14:50   #1
rita3
Пользователь
 
Регистрация: 04.05.2010
Сообщений: 17
По умолчанию Как открыть любую таблицу БД аксесс через opendialog?

Добрый день. Подскажите, пожалуйста, что я не правильно пишу в коде? На форме есть adoconnection, adotable, datasourse, dbgrid, opendialog. Нужно открыть любую таблицу и БД через opendialog. При запуске приложения, когда выбираю имеющуюся таблицу с помощью opendialog выводится ошибка: 'Недопустимое имя файла'
Вот код:
PHP код:
begin
  openDialog1 
:= TOpenDialog.Create(self);
  
openDialog1.InitialDir := GetCurrentDir;
  
openDialog1.Options := [ofFileMustExist];
  
openDialog1.Filter :=     'MS Access files|*.mdb;*.accdb';

  if 
openDialog1.Execute
  then 
//ShowMessage('File : '+openDialog.FileName)
   
begin
   adoconnection1
.connected:=false;
adoconnection1.connectionstring:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='ExtractFilePath(opendialog1.filename)+  ';Persist Security Info=False';
adoconnection1.connected:=true;
adotable1.Connection:=adoconnection1;
adotable1.TableName:=extractfilename(opendialog1.filename);
adotable1.Active:=true;
   
end
  
else ShowMessage('Îòêðûòèå ôàéëà îñòàíîâëåíî');

  
// Îñâîáîæäåíèå äèàëîãà
  
openDialog1.Free;
end
rita3 вне форума Ответить с цитированием
Старый 05.04.2011, 19:24   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,542
По умолчанию

Цитата:
adoconnection1.connectionstring:='P rovider=Microsoft.Jet.OLEDB.4.0;Dat a Source='+ ExtractFilePath(opendialog1.filename)+ ';Persist Security Info=False';
Объясните смысл выделенного?
зайдите и посмотрите
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 05.04.2011 в 19:27.
evg_m вне форума Ответить с цитированием
Старый 05.04.2011, 19:37   #3
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Цитата:
Сообщение от rita3 Посмотреть сообщение
... openDialog1.Filter := 'MS Access files|*.mdb;*.accdb';
...
adoconnection1.connectionstring:='Provider=Microsoft.Jet.OLEDB.4.0...
...
adotable1.TableName:=extractfilename(opendialog1.filenam e);
1. Вы открываете и *.mdb и *.accdb.
2. Для MS Access 2007 другой драйвер, а именно Microsoft.ACE.OLEDB.12.0. Нет возможности сейчас попробовать, попробуйте открыть с его помощью также *.mdb.
3. Что за таблицу Вы пытаетесь открыть? База данных MS Access идёт одним файлом в котором и таблицы и индексы и ... Посмотрите http://programmersforum.ru/showthread.php?t=98856 , может это Вам поможет в данной части, т.е. узнать имена существующих таблиц.

Последний раз редактировалось OlegVE; 05.04.2011 в 19:40.
OlegVE вне форума Ответить с цитированием
Старый 06.04.2011, 15:46   #4
rita3
Пользователь
 
Регистрация: 04.05.2010
Сообщений: 17
По умолчанию

Открывать *.accdb не принципиально. Мне бы открыть единственную пока таблицу в единственной базе, но в будущем ожидается несколько баз с 1 таблицей или 1 база с несколькими таблицами, поэтому я не могу прописать имя таблицы в ADOTable1.TableName.
Спасибо за ссылку. Но могу я открывать таблицы через opendialog, не вводя имя таблицы в эдиты и др.?
rita3 вне форума Ответить с цитированием
Старый 06.04.2011, 16:08   #5
rita3
Пользователь
 
Регистрация: 04.05.2010
Сообщений: 17
По умолчанию

Цитата:
Сообщение от rita3 Посмотреть сообщение
Цитата:
Цитата:
adoconnection1.connectionstring:='P rovider=Microsoft.Jet.OLEDB.4.0;Dat a Source='+ ExtractFilePath(opendialog1.filenam e)+ ';Persist Security Info=False';
Объясните смысл выделенного?
Если я использую ExtractFileName(opendialog1.filenam e),вместо ExtractFilePath(opendialog1.filenam e) то выходит ошибка:
Ядро БД MicrosoftJet не может найти входную таблицу 'mdb'. Проверьте существование таблицы и правильность имени'
Подскажите, пожалуйста, что из них нужно использовать и как решить ошибки, появляющиеся в любом случае?
rita3 вне форума Ответить с цитированием
Старый 06.04.2011, 16:47   #6
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Вам уже подсказывали (evg_m)
Код:
adoconnection1.connectionstring:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+ ExtractFilePath(opendialog1.filename)+  ';Persist Security Info=False';
если не поняли, замените на следующий код
Код:
adoconnection1.connectionstring:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+ opendialog1.filename+  ';Persist Security Info=False';
у Вас появиться следующая ошибка
P.S. База данных Paradox размещается в папке, а база данных MS Access в файле...

Последний раз редактировалось OlegVE; 06.04.2011 в 16:53.
OlegVE вне форума Ответить с цитированием
Старый 06.04.2011, 16:56   #7
rita3
Пользователь
 
Регистрация: 04.05.2010
Сообщений: 17
По умолчанию

Ошибка-то появилась: Ядро БД MicrosoftJet не может найти входную таблицу 'mdb'. Проверьте существование таблицы и правильность имени'
И как же ее исправить?

Я все равно не поняла, что мне с БД и файлом делать?

Последний раз редактировалось artemavd; 06.04.2011 в 17:45.
rita3 вне форума Ответить с цитированием
Старый 06.04.2011, 17:08   #8
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

1. Откройте в MS Access свою базу данных.
2. Запомните или скопируйте название любой таблицы.
3. Вставьте это название вместо
Код:
adotable1.TableName:=extractfilename(opendialog1.filename);
следующее
Код:
adotable1.TableName:='ИмяЗапомненнойИлиСкопированнойТаблицы';
Я Вам уже давал ссылку на то, как узнать какие таблицы есть в открытой Вами базе данных... Посмотрите, потому что ответить на вопрос "Ничего не понимаю" трудно. Есть только исходные данные: алфавит rita3 знает
P.S. Перед любыми манипуляциями лучше ставить свойство Active в False.
Код:
adoconnection1.connected:=true; 
adotable1.Active:=False;
adotable1.Connection:=adoconnection1; 
...

Последний раз редактировалось OlegVE; 06.04.2011 в 17:51.
OlegVE вне форума Ответить с цитированием
Старый 06.04.2011, 17:51   #9
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Получение пути к MDB файлу:
Код:
 if Form1.dlgOpen1.Execute then
 begin
  Form4.sStatusBar2.Panels[1].Text:=Form1.dlgOpen1.FileName;
 end;
Подключение к выбранной БД:
Код:
 Form2.con1.Close;
 Form2.con1.ConnectionString:='Provider=VFPOLEDB.1;Data Source=' + Form4.sStatusBar2.Panels[1].Text + ';Mode=Share Deny None;User ID="";Mask Password=False;Cache Authentication=False;Encrypt Password=False;Collating Sequence=MACHINE;DSN="";DELETED=True;CODEPAGE=1251;MVCOUNT=16384;ENGINEBEHAVIOR=90;TABLEVALIDATE=3;REFRESH=5;VARCHARMAPPING=False;ANSI=True;';
 Form2.con1.Open;
P.S. Развели тут писанину по пустяковому вопросу!
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 06.04.2011, 18:16   #10
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Извините artemavd, но похоже что эта тема вместо помощи новичкам попала в БД в Delphi. Жаль что Вы этого не поняли. Боюсь теперь Вам придётся объяснять что такое Form4.sStatusBar2.Panels[1].Text и Provider=VFPOLEDB.1 и как последний использовать с *.mdb и *.accdb и всё остальное связанное с этим драйвером.
Спасибо за замечание
Цитата:
P.S. Развели тут писанину по пустяковому вопросу!

Последний раз редактировалось OlegVE; 06.04.2011 в 18:18.
OlegVE вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как открыть ПАПКУ в OpenDialog? TaurusBrown Компоненты Delphi 8 31.10.2010 18:41
Lazarus: как открыть БД через TSQLQuery? Sazary Lazarus, Free Pascal, CodeTyphon 0 31.08.2010 19:43
Как по нажатию на Button открыть документ, выбранный в OpenDialog Stranger333 Общие вопросы Delphi 4 12.11.2009 14:27
базу аксесс пропустить через SQL Ane4ka Microsoft Office Access 5 27.05.2008 10:38
как открыть файл через прогу? ЧИЖ Общие вопросы Delphi 12 29.05.2007 17:45