Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.09.06;
Скачать: CL | DM;

Вниз

Ошибка при подключении к *.xls   Найти похожие ветки 

 
DimonS   (2009-06-19 03:15) [0]

Добрый день всем.
Вот объясните кто-нибудь, что за глюк такой странный?
Подключаю ADOConnection к Екселевскому файлу *.xls. Таким способом (при нажатии кнопки):
ADOConnection1.Close;
 ADOConnection1.ConnectionString:="Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DSN=файлы Excel;";
 ADOConnection1.ConnectionString:=ADOConnection1.ConnectionString+"DBQ=C:\brain.xls;DefaultDir=C:\;DriverId=790;MaxBufferSize=2048;PageTimeout=5;" ";
 ADOConnection1.Open;


При подключении выбрасывает ошибку: Аргументы имеют неверный тип, выходят за пределы... и т. д.
Причем ошибка выскакивает при отладке во второй строке.
Но самое интересное - при повторном подключении подключается отлично, делаются выборки и т. д.  Т. е. такая конструкция

try
 ADOConnection1.Close;
 ADOConnection1.ConnectionString:="Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DSN=файлы Excel;";
 ADOConnection1.ConnectionString:=ADOConnection1.ConnectionString+"DBQ=C:\brain.xls;DefaultDir=C:\;DriverId=790;MaxBufferSize=2048;PageTimeout=5;" ";
 ADOConnection1.Open;
except
 ADOConnection1.Close;
 ADOConnection1.ConnectionString:="Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DSN=файлы Excel;";
 ADOConnection1.ConnectionString:=ADOConnection1.ConnectionString+"DBQ=C:\brain.xls;DefaultDir=C:\;DriverId=790;MaxBufferSize=2048;PageTimeout=5;" ";
 ADOConnection1.Open;
end;

срабатывает. Но это же не выход, хочется понять откуда ноги растут у этого бага.

PS. Семнадцатую строку проверил.
PSPS. Ни разу при подключениях к другим провайдерам/базам не встречал такого бага.


 
Плохиш ©   (2009-06-19 15:23) [1]

Почему бы не использовать Microsoft.Jet.OLEDB


 
Anatoly Podgoretsky ©   (2009-06-19 15:49) [2]

Он и будет использовать Jet.OLEDB, только с сильными извращениями.


 
blackman ©   (2009-06-19 17:23) [3]

Управление Excel с использованием OLE
http://articles.org.ru/cn/showdetail.php?cid=7582
И другие на тему Delphi/Pascal » MsOffice
http://articles.org.ru/cn/?c=92


 
DimonS   (2009-06-22 10:50) [4]


> Почему бы не использовать Microsoft.Jet.OLEDB

А им можно к Excel подключиться? При выборе файла при настройке подключения просит Акцессовский.


> Управление Excel с использованием OLE

Это я знаю, не один десяток отчетов делал через Ексель. Но тут нужно сравнить два прайса по ключевому полю. Знаю, что можно это как-то реализовать средствами самого екселя, но как - влом копаться, да и времени нет.


 
Медвежонок Пятачок ©   (2009-06-22 10:51) [5]

тогда придется не сравнивать два прайса по ключевому полю


 
Плохиш ©   (2009-06-22 11:54) [6]


> DimonS   (22.06.09 10:50) [4]
>
>
> > Почему бы не использовать Microsoft.Jet.OLEDB
>
> А им можно к Excel подключиться?

- no comment -


 
DimonS   (2009-06-23 18:28) [7]


> Плохиш ©   (22.06.09 11:54) [6]
>
> > DimonS   (22.06.09 10:50) [4]
> >
> >
> > > Почему бы не использовать Microsoft.Jet.OLEDB
> >
> > А им можно к Excel подключиться?
>
> - no comment -


И это все? А пример можно? А то на других форумах ответ такой же. Но вот примеров нету почему-то. Нигде.
Ссылка подойдет, дайте ее пожалуста.


 
имя   (2009-06-23 18:34) [8]

Удалено модератором


 
Плохиш ©   (2009-06-23 18:39) [9]


> DimonS   (23.06.09 18:28) [7]

надо

> При выборе файла при настройке

просто изменить фильтр выбора файлов.


 
DimonS   (2009-06-24 02:46) [10]


> Плохиш ©   (23.06.09 18:39) [9]


> просто изменить фильтр выбора файлов.


Может я что-то делаю не так. Пошел по такому пути.
Создаю UDL-файл.
Выбираю поставщика данных Microsoft Jet 4.0 OLE DB Provider.
На вкладке Подключение нажимаю на выбор файлов. В фильтрах есть только *.mdb и Все файлы. Выбираю Все файлы. Нахожу свой *.xls.
Жму Проверить подключение.
"Не выполнена проверка подключения из-за ошибки инициализации поставщика. Нераспознаваемый формат базы данных..."

Что я сделал неправильно? :)
Если использовать Microsoft OLE DB Provider for ODBC rivers, то подключение нормально происходит.


 
Плохиш ©   (2009-06-24 10:54) [11]


> DimonS   (24.06.09 02:46) [10]


> Может я что-то делаю не так. Пошел по такому пути.
> Создаю UDL-файл.

Хм, я не хожу такими далёкими путями, я использую мастер создания строки подключения в делфи.

PS. Строка подключения

   ConnectionString =
     "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\Meine Dokumente\" +
     "xxx.xls;Mode=Read;Extended Properties=Excel 8.0;Persist Sec" +
     "urity Info=False"


 
Плохиш ©   (2009-06-24 10:59) [12]


> > Создаю UDL-файл.
>

Достаточно написать в свойстве "Extended Properties" значение "Excel 8.0", UDL-редактор сразу согласился :-)


 
blackman ©   (2009-06-24 17:21) [13]

Подключиться к файлу Excel с использованием Microsoft.Jet.OLEDB
http://articles.org.ru/cn/showdetail.php?cid=8113


 
DimonS   (2009-06-25 23:59) [14]


> Плохиш ©   (24.06.09 10:54) [11]


> Хм, я не хожу такими далёкими путями, я использую мастер
> создания строки подключения в делфи.

Ну я тоже так и делаю, просто для примера привел, разница небольшая.


> Достаточно написать в свойстве "Extended Properties" значение
> "Excel 8.0", UDL-редактор сразу согласился

Сенкс, вот этого я не знал. Все заработало! :)


 
Германн ©   (2009-06-26 00:33) [15]


> Плохиш ©   (24.06.09 10:54) [11]
>
>
> > DimonS   (24.06.09 02:46) [10]
>
>
> > Может я что-то делаю не так. Пошел по такому пути.
> > Создаю UDL-файл.
>
> Хм, я не хожу такими далёкими путями, я использую мастер
> создания строки подключения в делфи.
>

Самое смешное, что использовать сей мастер мне, в своё время, подсказал Си-шник.


 
Плохиш ©   (2009-06-26 10:43) [16]


> DimonS   (25.06.09 23:59) [14]
>
>
> > Плохиш ©   (24.06.09 10:54) [11]
>
>
> > Хм, я не хожу такими далёкими путями, я использую мастер
> > создания строки подключения в делфи.
>
> Ну я тоже так и делаю, просто для примера привел, разница
> небольшая.

Хм, в BDS2006 мастер сам "Excel 8.0" подставляет.


 
brother ©   (2009-06-26 10:44) [17]

> Самое смешное, что использовать сей мастер мне, в своё время,
> подсказал Си-шник.

+1


 
DimonS   (2009-06-29 02:40) [18]


> Германн ©   (26.06.09 00:33) [15]


> Самое смешное, что использовать сей мастер мне, в своё время,
>  подсказал Си-шник.


Не знаю, мастером пользовался с тех пор, как ADO начал осваивать. Но иногда проще использовать все-таки UDL-файл.


 
DimonS   (2009-07-02 09:28) [19]

Не занимался своей программкой какое-то время. Теперь попробовал ее на другом компе. И вылезла ошибка. Причем интересная.
В общем, файл екселевский открывается, но если на моей машине запрос выдает несколько сотен строк, то на другой - 0. Запрос элементарный:

ADOQuery2.SQL.Add("select * from [&#203;&#232;&#241;&#242;1$] where F1<>:F and F4<>0");
ADOQuery2.Parameters.ParamValues["F"]:="""";


Разбор полетов дал такой результат (отобразил результат в Гриде): поле F4 выводится пустым.
Получается так, что на другой машине строковые поля выводятся нормально, а числовые остаются в запросе пустыми.
В чем может быть проблема?

На моем компе стоит Офис 2007 лицензионный, на втором Офис 2003. Может это повлиять? Пробовал на разных машинах, результат одинаковый.


 
DimonS   (2009-07-02 09:32) [20]

Добавлю еще.
В файле на всех полях стоит общий формат ячеек.
Если цифровые поля перевести к числовому формату, то все отображается нормально. В чем такая проблемка? В более старой версии офиса?


 
sniknik ©   (2009-07-02 09:52) [21]

> В чем может быть проблема?
с определением типа провайдером у данной колонки. там в настройках есть такая "фича", количество строк с начала, по которым он предположительно определяется, и если у тебя в начале в этих строках только цифры то колонка получит числовой тип, ну а если дальше встречаются непереводимые в числа строки, то будет внутренняя ошибка и колонка останется неинициалицированной значениями.

может конечно и что то другое,  но это наиболее вероятно.

если это то, и данные у тебя не гарантированы в одном типе, то можно принудительно открывать их все в строковом. правда не помню как, поищи в хелпе по jet.

> На моем компе стоит Офис 2007 лицензионный, на втором Офис 2003. Может это повлиять?
только в плане разных дефоултных настроек ими jet-а.

а вообще это не дело использовать книгу ексель как базу. очень уж много у нее всяких неприятных нюансов.


 
DimonS   (2009-07-02 09:58) [22]


> sniknik ©   (02.07.09 09:52) [21]


> а вообще это не дело использовать книгу ексель как базу.
>  очень уж много у нее всяких неприятных нюансов.

Это не база, просто попытался сравнить прайсы одной фирмы на отличие цен и товаров за разные дни.

А в колонке действительно не только цифры, но и много пустых строк. Так что скорее всего ты прав насчет этого. Не знал я такой тонкости :)


 
Anatoly Podgoretsky ©   (2009-07-02 10:07) [23]

> DimonS  (02.07.2009 9:58:22)  [22]

Это гиблое дело, слишком много нюансов, и каждое новое сравнение - новые нюансы.


 
DimonS   (2009-07-02 10:32) [24]


> Anatoly Podgoretsky ©   (02.07.09 10:07) [23]

А я и не спорю :)
Просто делать нечего было, а тут спросили как можно сравнить разные прайсы с ключевым полем. Вот и решил попробовать. Ну заодно и много нового узнал.

А внедрять куда-то такое - это, конечно, гиблое дело.


 
sniknik ©   (2009-07-02 10:33) [25]

> А в колонке действительно не только цифры, но и много пустых строк.
не все так просто... значения null там тоже есть, пустые должны бы получить его.

вот нашел в старых записях, должно все поля представлять текстом и без заголовков (имен полей, если в лист сохранена таблица)
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\brain.xls;Extended Properties="Excel 8.0;HDR=No;IMEX=1"
так будет максимально независимо от "нюансов",  но приводить типы к нужным и делать проверки перевода придется самому.


 
DimonS   (2009-07-02 10:52) [26]


> sniknik ©   (02.07.09 10:33) [25]

Спасибо, попробую завтра. А то у меня рабочий день уже закончился :)


 
DimonS   (2009-07-03 02:41) [27]


> sniknik ©   (02.07.09 10:33) [25]

Попробовал
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\brain.xls;Extended Properties="Excel 8.0;HDR=No;IMEX=1

У меня выкидывает ошибку "Невозможно найти установленный ISAM".
Поиск по инету сказал, что вроде какой-то библиотеки не хватает, ну и фих на нее. Хотя офис установлен полностью.

В общем, остановился на предыдущем работающем варианте. Пару столбцов привести к численному формату пятнадцать секунд делов, не напрягает.

Всем спасибо за помощь и разъяснения!


 
Anatoly Podgoretsky ©   (2009-07-03 09:02) [28]

> DimonS  (03.07.2009 02:41:27)  [27]

Это отсутствует ISAM - Excel Files для Excel 8.0


 
sniknik ©   (2009-07-03 10:00) [29]

> В общем, остановился на предыдущем работающем варианте.

>> "Excel 8.0", UDL-редактор сразу согласился
> Сенкс, вот этого я не знал. Все заработало! :)
вот это используемый исам,  в предыдущем.

> Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\brain.xls;Extended Properties="Excel 8.0;HDR=No;IMEX=1"
вот это он же. я его перед постом строки исправил т.к. строку нашел в использованных и довольно старых тестах. он там  был еще от 5.0.

вывод - если предыдущее работает, а это нет, значит ты что-то в ней напортачил. изменил так, что ядро считает за исам что-то другое, а не указанное в обоих случаях одно и то же значение.


 
Плохиш ©   (2009-07-03 10:49) [30]


> DimonS   (03.07.09 02:41) [27]
>
>

Ковычки закрывающие значение Extended Properties при копировании потерялись или не поставлены?


 
DimonS   (2009-07-06 11:09) [31]


> Плохиш ©   (03.07.09 10:49) [30]
>
> > DimonS   (03.07.09 02:41) [27]
> >
> >
>
> Ковычки закрывающие значение Extended Properties при копировании
> потерялись или не поставлены?


Да, дело было не в бобине...
Забыл, конечно.

Все заработало как надо!



Страницы: 1 вся ветка

Текущий архив: 2009.09.06;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.014 c
2-1246958245
sashbc
2009-07-07 13:17
2009.09.06
vcl видимо


15-1246653254
Юрий
2009-07-04 00:34
2009.09.06
С днем рождения ! 4 июля 2009 суббота


15-1247224234
Cyrax
2009-07-10 15:10
2009.09.06
Как называется передача по радио про здоровье и питание...


15-1246653405
Knight
2009-07-04 00:36
2009.09.06
Downloader-ы...


2-1246712483
Incognito
2009-07-04 17:01
2009.09.06
Как сделать Combobox и DateTimePicker только readonly