Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка при подключении к *.xls [D6, XP]


Страницы:   1 2

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-редактор сразу согласился :-)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо