Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 ADODataSet при коннекте к файлу Excel  [new]
EasyCode
Member

Откуда:
Сообщений: 14
Здравствуйте.
Создал подключение элемента ADODataSet к файлу excel. На одном компьютере работает отлично.
При запуске программы на другом компьютере - выдает ошибку пути (см. картинку), как сделать путь к файлу с таблицей такой, чтобы можно было запустить программу на другом компьютере без ошибок?
Проблема именно в пути. Если поменять в ручную, то нормально работает, а что если на другом компьютере не окажется Делфи, чтобы изменить путь? Вот в этом проблема.
Прошу помощи!
http://prntscr.com/lrxt4k
7 дек 18, 15:09    [21757129]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ADODataSet  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 24602
EasyCode
Проблема именно в пути.

Русские буквы? Пробелы?
7 дек 18, 15:20    [21757143]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ADODataSet  [new]
EasyCode
Member

Откуда:
Сообщений: 14
wadman,

Нет. На данный момент - G:\Rasschet\Project1.exe
Дело в том, что я не знаю на другом компьютере какая буква будет и не могу путь прописать именно для другого компьютера, чтоб там работало. У меня на компьютере все нормально функционирует.
7 дек 18, 15:29    [21757155]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ADODataSet  [new]
DarkMaster
Member

Откуда: Donetsk,Ukraine
Сообщений: 6127
EasyCode
Если поменять в ручную, то нормально работает, а что если на другом компьютере не окажется Делфи, чтобы изменить путь? Вот в этом проблема.


TOpenFileDialog уже отменили? Заставь пользователя выбирать нужный ему файл Экселя.
7 дек 18, 15:42    [21757176]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ADODataSet  [new]
EasyCode
Member

Откуда:
Сообщений: 14
DarkMaster,
Дело в том, что по функционалу программы, пользователь не должен сам открывать файл. Эта таблица используется как БД для последующих процедур в программе.
7 дек 18, 15:45    [21757182]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ADODataSet  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 24602
EasyCode
Дело в том, что по функционалу программы, пользователь не должен сам открывать файл.

Указать расположение файла и открыть его - разные операции.
7 дек 18, 15:48    [21757194]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ADODataSet  [new]
EasyCode
Member

Откуда:
Сообщений: 14
wadman,

Это я понимаю.
В коде запрос к таблице 1 раз только используется, когда ищет значение из таблицы.
Дальше запросов к таблице нет.
Она даже не открывается в программе, ее пользователь вообще не видит и не должен.
Путь прописать как правильно, чтоб программа вообще открывалась без этой ошибки, вот в чем вопрос.
7 дек 18, 15:51    [21757200]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ADODataSet  [new]
DarkMaster
Member

Откуда: Donetsk,Ukraine
Сообщений: 6127
EasyCode
wadman,
Путь прописать как правильно, чтоб программа вообще открывалась без этой ошибки, вот в чем вопрос.


Ну так держи рядом к программой файл настроек (да хоть ini тот же) где и храни правильный путь для пользователя.
7 дек 18, 15:54    [21757207]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ADODataSet  [new]
Beltar
Member

Откуда:
Сообщений: 143
1) Не указан драйвер. Странно.

2) У тебя в ADOConnection всегда забиты твои настройки. Даже свойство Connected будет именно в том состоянии, в котором находилось в момент компиляции. Поскольку оно становится активным при любых попытках что-то получить из базы при разработке, то на другом компе оно просто полезет по твоим настройкам. Меня в свое время это настолько достало, что сейчас в любом DataModule, где лежит соединение (не только ADO касается). Первым делом выполняю сразу в onCreate

if ADOConnection1.Connected then
  begin
  ShowErrorMessage('Закрой соединение');
  Application.Terminate;
  end;


Т. е. даже под отладкой не допускаю запуска с активным соединением.

3) Посмотри строку соединения. Тебе нужно все эти параметры как-то сохранить и при запуске программа должна их считать. На их основе собираешь строку соединения и подключаешься.

Как именно будешь сохранять это уже на твое усмотрение. Только с прочими настройками не следует мешать.

Если у тебя файл Access, то можно путь к нему делать относительным. Ну или в папку с прогой положить.
7 дек 18, 15:56    [21757211]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ADODataSet  [new]
EasyCode
Member

Откуда:
Сообщений: 14
Вот что в ConnectionString указано
автор
Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DBQ=D:\table.russia.xls;DefaultDir=D:\;Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DriverId=1046;FIL=excel 12.0;FILEDSN=D:\table.russia.xls.dsn;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;ReadOnly=1;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;"


Просто это настройки для моего ПК, а на другом ПК допустим будет буква не D, а "E". И я не знаю как прописать путь так, чтобы он смог считывать эту таблицу и на другом ПК. Сам файл таблицы лежит в основной папке с программой.
7 дек 18, 16:02    [21757223]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ADODataSet  [new]
EasyCode
Member

Откуда:
Сообщений: 14
DarkMaster,

Вот именно что, то что правильного пути на другом ПК нет. Потому что буква диска с расположением программы постоянно меняется. На разных ПК по разному.
7 дек 18, 16:03    [21757227]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ADODataSet  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 1944
EasyCode
Вот именно что, то что правильного пути на другом ПК нет. Потому что буква диска с расположением программы постоянно меняется. На разных ПК по разному.
Вот для подобных задач и существуют конфиги для программ. А где они лежат - в ini-файлах, реестре, базе данных, локально, удаленно и т.д и т.п. или каждый раз спрашиваются у юзера - решаешь ты.
7 дек 18, 16:36    [21757293]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ADODataSet  [new]
DarkMaster
Member

Откуда: Donetsk,Ukraine
Сообщений: 6127
EasyCode,

Вот это:
Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DBQ=D:\table.russia.xls;DefaultDir=D:\;Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DriverId=1046;FIL=excel 12.0;FILEDSN=D:\table.russia.xls.dsn;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;ReadOnly=1;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;"

Замени на:

Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DBQ=%%TABLENAME%%;DefaultDir=%%DIRNAME%%;Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DriverId=1046;FIL=excel 12.0;FILEDSN=D:\table.russia.xls.dsn;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;ReadOnly=1;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;"

Строчку хранишь в ini. На старте приложения читаешь строку из ini. Делаешь замену %%DIRNAME%% и %%TABLENAME%% на путь к файлу и директорию по умолчанию для пользователя и спокойно работаешь.

DIRNAME и TABLENAME хранишь в Ini. И настраиваешь для каждого конкретного пользователя...

Аминь.
7 дек 18, 16:40    [21757309]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ADODataSet  [new]
DarkMaster
Member

Откуда: Donetsk,Ukraine
Сообщений: 6127
DarkMaster,

А ну и FILEDSN не забыть. По аналогии.
7 дек 18, 16:41    [21757311]     Ответить | Цитировать Сообщить модератору
 Re: ADODataSet при коннекте к файлу Excel  [new]
EasyCode
Member

Откуда:
Сообщений: 14
DarkMaster,

Спасибо
7 дек 18, 17:12    [21757370]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить