Форум: "Начинающим";
Текущий архив: 2009.09.06;
Скачать: [xml.tar.bz2];
ВнизОшибка при подключении к *.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 [Ëèñò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;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.006 c