![]() |
|
![]() ![]() ![]() |
|
Vit |
|
||||||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 14 Всего: 207 |
Давеча пришлось поработать с Excel. Хочу поделиться несколькими впечатлениями.
Подключался к Excel используя ADO и строку подключения: ConnectionString=Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\имя файла.XLS;Extended Properties="Excel 8.0"; Первые грабли такие: Берём TADOQuery, подключаем connectionstring, выполняем запрос типа "Create Table...", если файл XLS не существует, то запрос благополучно создаёт указанный XLS файл со страницей, а вот если использовать TADOConnection для подключения - то подключится к несуществующему файлу и создать таким образом файл не получится... Вторые грабли посложнее будут, угрохал 3 часа и начал было даже сомневаться в своей умственной полноценности... Код простейший: перегоняю из таблицы другой базы данных данные в excel выполняя примерно следующий алгоритм (это упрощённый псевдокод):
И в результате получаю достаточно странную сортировку в Excel. Надо сказать что в Excel я делал собственно отчёт и сортировка мне была важна... Плясал с бубном долго, выяснилось что запрос 'Insert into MyExcelSheet ...' вставляет новую запись ПЕРВОЙ строкой, а не последней, как это принято в базах данных! Итого пришлось код переписать:
Третьи грабли: после выполнения хотя бы одного запроса на Excel, даже если вызывался ExecSQL и таблица не открыта - файл Excel остаётся заблокированным! Его нельзя открыть. Мне надо было полученный файл Excel после заполнения из программы открыть в Excel... Чтобы это сделать надо у ADOQuery обнулить ConnectionString:
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
||||||
|
|||||||
bas |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 446 Регистрация: 14.8.2002 Где: Молдова, Кишинев Репутация: 1 Всего: 2 |
Проверил оба варианта (BCB5) - все нормально. И всталяеться в конец как и должно быть. |
|||
|
||||
SergeBS |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1111 Регистрация: 10.6.2005 Где: Владимир Репутация: 11 Всего: 22 |
Vit
А зачем такой заковыристый способ? ADO все-таки под сервера заточено (в основном). Я через OLE все делал и вроде проблем нет. Тем более если из таблицы что-то шарашить - сразу в диапазон матрицу вписываешь. Вполне даже быстро получается. Если поячеечно - гораздо медленней. Насчет вставки первой строкой - вставляет туда, где selection. Т.е. все проблемы - что нужно прыгать в нужное место, а затем вставлять. Да, а насчет connection string - KeepConnection = true(default)? И потому ADOconnection и блокирует доступ - это ж не сервер, а файл. В этом небось грабельки. Проверь. Насколько шустро получаются все эти вставки у тебя через ADO? |
|||
|
||||
bas |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 446 Регистрация: 14.8.2002 Где: Молдова, Кишинев Репутация: 1 Всего: 2 |
На порядок. |
|||
|
||||
SergeBS |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1111 Регистрация: 10.6.2005 Где: Владимир Репутация: 11 Всего: 22 |
bas
Мне всякие порядки неинтересны. "Столько-то записей на таком-то проце за столько-то секунд" - это я пойму. |
|||
|
||||
bas |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 446 Регистрация: 14.8.2002 Где: Молдова, Кишинев Репутация: 1 Всего: 2 |
AMD 2ГГц (ОЗУ 256) Win 98 Off.-2000
Одно поле символьное 65500 записей - 4мин 50 сек. Данные выбирались циклом (см. сооб. Vit) из DBase + ADO. Это сообщение отредактировал(а) bas - 15.9.2005, 10:28 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |