![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка при подключении к *.xls [D6, XP]
DimonS © (2009-06-19 03:15:00)Добрый день всем.
Вот объясните кто-нибудь, что за глюк такой странный?
Подключаю 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. Ни разу при подключениях к другим провайдерам/базам не встречал такого бага.
DimonS (2009-07-06 11:09:00) [1]
> Плохиш © (03.07.09 10:49) [30]
>
> > DimonS (03.07.09 02:41) [27]
> >
> >
>
> Ковычки закрывающие значение Extended Properties при копировании
> потерялись или не поставлены?
Да, дело было не в бобине...
Забыл, конечно.
Все заработало как надо!
Плохиш (2009-07-03 10:49:00) [2]
> DimonS (03.07.09 02:41) [27]
>
>
Ковычки закрывающие значение Extended Properties при копировании потерялись или не поставлены?
sniknik (2009-07-03 10:00:00) [3]> В общем, остановился на предыдущем работающем варианте.
>> " 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.
вывод - если предыдущее работает, а это нет, значит ты что-то в ней напортачил. изменил так, что ядро считает за исам что-то другое, а не указанное в обоих случаях одно и то же значение.
Anatoly Podgoretsky (2009-07-03 09:02:00) [4]> DimonS (03.07.2009 02:41:27) [27]
Это отсутствует ISAM - Excel Files для Excel 8.0
DimonS (2009-07-03 02:41:00) [5]
> 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".
Поиск по инету сказал, что вроде какой-то библиотеки не хватает, ну и фих на нее. Хотя офис установлен полностью.
В общем, остановился на предыдущем работающем варианте. Пару столбцов привести к численному формату пятнадцать секунд делов, не напрягает.
Всем спасибо за помощь и разъяснения!
DimonS (2009-07-02 10:52:00) [6]
> sniknik © (02.07.09 10:33) [25]
Спасибо, попробую завтра. А то у меня рабочий день уже закончился :)
sniknik (2009-07-02 10:33:00) [7]> А в колонке действительно не только цифры, но и много пустых строк.
не все так просто... значения 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:32:00) [8]
> Anatoly Podgoretsky © (02.07.09 10:07) [23]
А я и не спорю :)
Просто делать нечего было, а тут спросили как можно сравнить разные прайсы с ключевым полем. Вот и решил попробовать. Ну заодно и много нового узнал.
А внедрять куда-то такое - это, конечно, гиблое дело.
Anatoly Podgoretsky (2009-07-02 10:07:00) [9]> DimonS (02.07.2009 9:58:22) [22]
Это гиблое дело, слишком много нюансов, и каждое новое сравнение - новые нюансы.
DimonS (2009-07-02 09:58:00) [10]
> sniknik © (02.07.09 09:52) [21]
> а вообще это не дело использовать книгу ексель как базу.
> очень уж много у нее всяких неприятных нюансов.
Это не база, просто попытался сравнить прайсы одной фирмы на отличие цен и товаров за разные дни.
А в колонке действительно не только цифры, но и много пустых строк. Так что скорее всего ты прав насчет этого. Не знал я такой тонкости :)
sniknik (2009-07-02 09:52:00) [11]> В чем может быть проблема?
с определением типа провайдером у данной колонки. там в настройках есть такая "фича", количество строк с начала, по которым он предположительно определяется, и если у тебя в начале в этих строках только цифры то колонка получит числовой тип, ну а если дальше встречаются непереводимые в числа строки, то будет внутренняя ошибка и колонка останется неинициалицированной значениями.
может конечно и что то другое, но это наиболее вероятно.
если это то, и данные у тебя не гарантированы в одном типе, то можно принудительно открывать их все в строковом. правда не помню как, поищи в хелпе по jet.
> На моем компе стоит Офис 2007 лицензионный, на втором Офис 2003. Может это повлиять?
только в плане разных дефоултных настроек ими jet-а.
а вообще это не дело использовать книгу ексель как базу. очень уж много у нее всяких неприятных нюансов.
DimonS (2009-07-02 09:32:00) [12]Добавлю еще.
В файле на всех полях стоит общий формат ячеек.
Если цифровые поля перевести к числовому формату, то все отображается нормально. В чем такая проблемка? В более старой версии офиса?
DimonS (2009-07-02 09:28:00) [13]Не занимался своей программкой какое-то время. Теперь попробовал ее на другом компе. И вылезла ошибка. Причем интересная.
В общем, файл екселевский открывается, но если на моей машине запрос выдает несколько сотен строк, то на другой - 0. Запрос элементарный:
ADOQuery2.SQL.Add('select * from [Ëèñò1$] where F1:F and F40');
ADOQuery2.Parameters.ParamValues['F']:='''';
Разбор полетов дал такой результат (отобразил результат в Гриде): поле F4 выводится пустым.
Получается так, что на другой машине строковые поля выводятся нормально, а числовые остаются в запросе пустыми.
В чем может быть проблема?
На моем компе стоит Офис 2007 лицензионный, на втором Офис 2003. Может это повлиять? Пробовал на разных машинах, результат одинаковый.
DimonS (2009-06-29 02:40:00) [14]
> Германн © (26.06.09 00:33) [15]
> Самое смешное, что использовать сей мастер мне, в своё время,
> подсказал Си-шник.
Не знаю, мастером пользовался с тех пор, как ADO начал осваивать. Но иногда проще использовать все-таки UDL-файл.
brother (2009-06-26 10:44:00) [15]> Самое смешное, что использовать сей мастер мне, в своё время,
> подсказал Си-шник.
+1
Плохиш (2009-06-26 10:43:00) [16]
> DimonS (25.06.09 23:59) [14]
>
>
> > Плохиш © (24.06.09 10:54) [11]
>
>
> > Хм, я не хожу такими далёкими путями, я использую мастер
> > создания строки подключения в делфи.
>
> Ну я тоже так и делаю, просто для примера привел, разница
> небольшая.
Хм, в BDS2006 мастер сам "Excel 8.0" подставляет.
Германн (2009-06-26 00:33:00) [17]
> Плохиш © (24.06.09 10:54) [11]
>
>
> > DimonS (24.06.09 02:46) [10]
>
>
> > Может я что-то делаю не так. Пошел по такому пути.
> > Создаю UDL-файл.
>
> Хм, я не хожу такими далёкими путями, я использую мастер
> создания строки подключения в делфи.
>
Самое смешное, что использовать сей мастер мне, в своё время, подсказал Си-шник.
DimonS (2009-06-25 23:59:00) [18]
> Плохиш © (24.06.09 10:54) [11]
> Хм, я не хожу такими далёкими путями, я использую мастер
> создания строки подключения в делфи.
Ну я тоже так и делаю, просто для примера привел, разница небольшая.
> Достаточно написать в свойстве "Extended Properties" значение
> "Excel 8.0", UDL-редактор сразу согласился
Сенкс, вот этого я не знал. Все заработало! :)
blackman (2009-06-24 17:21:00) [19]Подключиться к файлу Excel с использованием Microsoft.Jet.OLEDB
http://articles.org.ru/cn/showdetail.php?cid=8113
Плохиш (2009-06-24 10:59:00) [20]
> > Создаю UDL-файл.
>
Достаточно написать в свойстве "Extended Properties" значение "Excel 8.0", UDL-редактор сразу согласился :-)