Форум: "Базы";
Текущий архив: 2003.01.20;
Скачать: [xml.tar.bz2];
ВнизРабота с MS Excel как с БД через ODBS Найти похожие ветки
← →
Nikolai_S (2002-12-23 15:38) [0]В ODBS есть драйвер "Microsoft Excel Driver (*.xls)". Через этот драйвер можно в TADOConnection подключиться к файлу Excel. Но можно ли с этим файлом работать как с БД с помощью запросов SQL? Я запрашиваю список таблиц - выдается пустой список. Кто-ниуюдь знает как работать с Excel через ADO?
← →
stone (2002-12-23 15:56) [1]В Excel должны быть созданы именованные диапазоны ячеек, которые будут доступны как таблицы
← →
sniknik (2002-12-23 15:58) [2]Без проблем, именно как с базой (без форматирования и т.д.) в кладовке есть пример.
← →
Anatoly Podgoretsky (2002-12-23 16:15) [3]Базой является книга, а таблицами листы
← →
Nikolai_S (2002-12-23 16:19) [4]2 Anatoly Podgoretsky
Тогда почему когда в файле есть 3 листа и я вызываю функцию TADOConnection.GetTableNames, то мне выдается пустой список?
← →
Nikolai_S (2002-12-23 16:28) [5]2 Anatoly Podgoretsky
Извиняюсь. Уже разобрался. Нужно было еще системные таблицы запросить. Excel"ские листы понимаются как системные таблицы.
← →
Nikolai_S (2002-12-23 16:39) [6]Теперь появился другой вопрос. Можно ли в обход ODBC подключиться к файлу Excel. Например к MS Access можно подключиться через UDL-файл без ODBC, используя драйвер MS Jet. Но для Excel там нет драйвера... :-(
← →
sniknik (2002-12-23 17:58) [7]Уже говорил в кладовке пример (с подключением к Excel - Jet в том числе), сделай поиск по TestMdb. Включить UDL вместо строки подключения там надо строку расcкоментарить ;EnableUdl=1 в секции Common Ini файла.
← →
Nikolai_S (2002-12-23 18:36) [8]2 sniknik
Спасибо. Разобрался. Даже в исходники лазить не пришлось. Там в ini-файле все видно. Нужно было лишь добавить Extended Properies=Excel 5.0 и все заработало через Jet.
Да, мощная это штука. А то люди работают с самыми разными СУБД. И мне требуется делать возможность импорта в свою базу данных. А когда с Excel можно данные с помощью SQL читать/записывать, то это супер. Можно еще и прямыми SQL-запросами данные из одной СУБД в другую кидать. Вообще быстро работает. Я например из Access в SQL-Server и обратно пробовал. Сильная штука. Насколько я понимаю все это называется OLE DB
← →
sniknik (2002-12-23 18:55) [9]Да хорошо когда все хорошо. :-)) а исходники все же посмотри может полезное для себя найдеш. Типа (часто спрашивают) как формировать строку коннекта, узнать какие таблици в базе, узнать свойства полей без открытия таблицы.
А если придумаеш полезное чего там не хватает пиши вставлю. Только тебе придется меня убедить что это полезно. :о))
← →
Nikolai_S (2002-12-24 11:42) [10]ОК, гляну обязательно. Хотя как все это делается я знаю. Но все равно посмотреть интересно. А вот насчет того как узнать какие таблицы в базе есть вопрос: у меня был конкретный случай, когда в MS SQL Server имелось более 1000 таблиц и когда вызываешь метод TADOConnection.GetTableNames, то это метод слишком долго работал, просто конкретно все тормозил. В чем тут может быть дело? Я подозреваю, что параметр List: TStrings, в который записываются имена таблиц, очень медленно заполняется... Или я не прав?
← →
sniknik (2002-12-24 11:59) [11]Наверное не прав. Но разбирать нужно тот конкретный случай конечно.
GetTableNames всегда отрабатывал моментально, хотя до такого количества таблиц никогда не дотягивал. Можно попробовать сколько будет работать аналог
SELECT Name FROM sysobjects WHERE xtype="U" OR xtype="S"
(List: TStrings исключается, вместо него датасет) и если есть большая разница по времени (или нет) то делать выводы.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.01.20;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.011 c