![]() |
|
|
![]()
|
|
| Алина |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 14.5.2005 Репутация: нет Всего: нет |
Есть необходимость импортировать данные из Экселевской таблицы в Access'овскую. На форме есть DataSource, привязанный к ADOTable1, BDGrid, который отображает данные из DataSource.
При запуске приложения данные из Экселя достаются, передаются в ADOTable, но после закрытия приложения изменений в аксесовском файле нет.
Что я делаю не так? |
|||
|
||||
| YurikGL |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 5.7.2005 Где: Уфа Репутация: нет Всего: 2 |
меняем на что-то типа ADODataSet1.open //а то так и не открыли датасет то? ADODataSet1.first; repeat for i:=1 to adoTable.recordcount do adoTable1.fields[i].value:=adoDataset1.fields[i].value; adodataset1.next until adodataset1.eof --------------------
|
|||
|
||||
| Алина |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 14.5.2005 Репутация: нет Всего: нет |
А почему цикл до adoTable.recordcount? оно вообще до вставки данных равно нулю, и как мы можем заряжать цикл до recordcount? можно так: ADODataSet1.first; repeat for i:=1 to adoTable.flields.count do adoTable1.fields[i].value:=adoDataset1.fields[i].value; adodataset1.next until adodataset1.eof Но как в таком случае сказать таблице, что мы каждый раз добавляем в нее новую запись? Может есть способ проще, чем перебирать датасет по кортежам-полям (там ведь может быть несколько миллионов кортежей)? |
|||
|
||||
| YurikGL |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 5.7.2005 Где: Уфа Репутация: нет Всего: 2 |
Сглупил... да fields.count конечно... к
добавь adoTable1.insert for i:=..... do adoTable1.fields[i].value:=adoDataset1.fields[i].value; adoTable1.post з.ы. в конце дня туплю сильно... извиняйте.... з.ы.ы. вроде были стандартные средства экспорта из access в excel и наоборот з.ы.ы.ы вроде где-то видел кусок запроса, который в одном запросе обращался к разным базам средствами ADO и втыкал через insert into записи из одной базы в другую.... но это - частное решение и повторить то, что там было написано, я не готов.... В общем случае - перебираем поля и записи. з.ы.ы.ы.ы можно еще взять в буфер и вставить из буфера... работает достаточно быстро Это сообщение отредактировал(а) YurikGL - 17.12.2005, 18:38 --------------------
|
||||
|
|||||
| Алина |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 14.5.2005 Репутация: нет Всего: нет |
стандартные средства - это на один раз, имхо... иначе замаешься с ними...
из буфера стало реально работать быстрее в четыре раза примерно! |
|||
|
||||
| YurikGL |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 5.7.2005 Где: Уфа Репутация: нет Всего: 2 |
Только по превышению определенного объема память кончается и буфер начинает глючить. Поэтому в свое время я переносил именно по записи... Кстати, можно еще через OLE работать... --------------------
|
|||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |