Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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 [&#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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.006 c
1-1213975256
Андрей
2008-06-20 19:20
2009.09.06
Перехват событий


3-1226639341
rar
2008-11-14 08:09
2009.09.06
Длинная строка


15-1246528418
DelphiN!
2009-07-02 13:53
2009.09.06
Определить замыкание 2х ножек com порта


2-1246881735
mfender
2009-07-06 16:02
2009.09.06
Уничтожение передаваемых параметров в DLL


1-1213850890
Xandr
2008-06-19 08:48
2009.09.06
Длительный процесс





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский