Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.06.2014, 17:38
Аватар для fofka
fofka fofka вне форума
Начинающий
 
Регистрация: 12.10.2008
Сообщения: 163
Репутация: -1588
По умолчанию Импорт данных из Excel в базу данных Access

Доброго всем дня.
Для облегчения работы потребовалось сделать импорт данных из Excel в базу данных Access (.mdb). И практически сразу возник вопрос, при открытии файла Excel выдает ошибку Невозможно найти устанавливаемый ISAM. Файл для импорта открываю так
Код:
var
  OpenDialog : TOpenDialog;
  FName1, FName2: string;
  fullFileName : string;
  Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
   ADOConnection1.Connected:=False;
   Windows.MessageBeep(MB_ICONINFORMATION);
   OpenDialog:= TOpenDialog.Create(self);
   OpenDialog.InitialDir := '';
   OpenDialog.Filter := 'Microsoft Excel 2003 (*.xls)|*.xls';
    if OpenDialog.Execute then
      begin
     FName1 := OpenDialog.FileName;
     LabeledEdit1.Text:=ExtractFileName(FName1);
   ADOConnection1.ConnectionString:=
  'Provider=Microsoft.ACE.OLEDB.12.0;' +
  'Data Source='+LabeledEdit1.Text +';' +
  'Extended Properties=Excel Files;'+
  'DriverId=1046;'+
  'MaxBufferSize=2048;'+
  'PageTimeout=5';
   ADOConnection1.Connected:=True;
 end;
end;
При этом, если в ADOConnection1.ConnectionString сразу указать путь к файлу для импорта, как тут http://basicsprog.ucoz.ru/blog/2011-10-02-9, то ошибки нет, файл открывается и в базе (mdb) я вижу импортированные данные, и не важно есть в пути к файлу кириллица или нет. Меня такой подход не устраивает, хочется что бы была возможность указать самому файл. Использую Delphi 7. Microsoft Office 2010. Начал уже на офис, грешить, но если с путем к файлу указанном в exe работает, то офис тут не виноват. В прицепе как работаю с файлами, без импорта данных. В чем может быть проблема? Заранее благодарю за совет.
Вложения
Тип файла: rar Import.rar (38.8 Кбайт, 24 просмотров)
Ответить с цитированием
  #2  
Старый 27.06.2014, 19:03
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Ну и правильно ругается.
Код:
Extended Properties=Excel Files
Не понял, откуда вы такое в строке подключения выкопали?
Замените на:
Код:
Extended Properties=Excel 12.0
В принципе не должно быть проблем, хотя вы и пытаетесь открыть файл более ранней версии Экселя, но если все-же не откроется, то придется вам для Экселя 2003 и 2007 разные строки подключения делать. В примере там все это есть.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 27.06.2014 в 19:09.
Ответить с цитированием
  #3  
Старый 27.06.2014, 20:25
Аватар для fofka
fofka fofka вне форума
Начинающий
 
Регистрация: 12.10.2008
Сообщения: 163
Репутация: -1588
По умолчанию

Страдалецъ, нет разницы. Указал
Код:
Extended Properties=Excel 12.0
, то же самое Невозможно найти устанавливаемый ISAM.
Вот строка подключения ADOConnection1.Connected выбрана непосредственно в Delphi
Код:
Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DSN=Excel Files;DBQ=d:\Мои документы\Delphi программы\Работа с ADO\Импорт с Excel\Мой проект\2.xls;DefaultDir=d:d:\Мои документы\Delphi программы\Работа с ADO\Импорт с Excel\Мой проект;DriverId=1046;MaxBufferSize=2048;PageTimeout=5;"
Так все работает. Но почему?! Ни че не понимаю! Все делал вроде как указано в примере. А не работает.
Ответить с цитированием
  #4  
Старый 27.06.2014, 23:05
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 576
Версия Delphi: 6
Репутация: выкл
По умолчанию

В провайдере разница.
__________________
Не стоит путать форумы с богадельнями. © Bargest
Ответить с цитированием
  #5  
Старый 28.06.2014, 00:59
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Код:
Const
  Excel2007Connection = 'Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=%s';
Var
  AdoConnection: TAdoConnection;
begin
 AdoConnection := TAdoConnection.Create(nil);
 AdoConnection.ConnectionString := Format(Excel2007Connection, ['d:\Мои документы\Delphi программы\Работа с ADO\Импорт с Excel\Мой проект\2.xls']);
 AdoConnection.Open;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
fofka (28.06.2014)
  #6  
Старый 28.06.2014, 17:34
Аватар для fofka
fofka fofka вне форума
Начинающий
 
Регистрация: 12.10.2008
Сообщения: 163
Репутация: -1588
По умолчанию

Страдалецъ, Благодарю за помощь. Все заработало. Сделал как Вы подсказали и все пошло. Импорт данных работает. Для подключения Excel взял Ваш код, а импорт из примера.
Код:
implementation

 Const
  Excel2007Connection = 'Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=%s';

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
   ADOConnection1.Connected:=False;
   Windows.MessageBeep(MB_ICONINFORMATION);
   OpenDialog:= TOpenDialog.Create(self);
   OpenDialog.InitialDir := '';
   OpenDialog.Filter := 'Microsoft Excel 2003 (*.xls)|*.xls';
    if OpenDialog.Execute then
      begin
     FName1 := OpenDialog.FileName;
     LabeledEdit1.Text:=ExtractFileName(FName1);
    ADOConnection1.ConnectionString := Format(Excel2007Connection, [''+LabeledEdit1.Text +'']);
    ADOConnection1.Connected:=True;
    try
   AdoVer:=ADOConnection1.Provider;
   AdoConnection1.Connected:=true;
    except
   ADOConnection1.Connected:=false;
   showmessage('ООшибка подключения.'+ #13 +
   'Ожидаемая версия"' + AdoVer + '"провайдера отличается от текущей');
   Application.Terminate;
  end;
 end;
end;
Прицепил рабочий проект. Мало ли кому сгодится.
Вложения
Тип файла: rar Import.rar (51.7 Кбайт, 146 просмотров)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:58.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter