Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Данные не сохраняются в файле, ADO+Excel+Access 
:(
    Опции темы
Алина
Дата 17.12.2005, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 14.5.2005

Репутация: нет
Всего: нет



Есть необходимость импортировать данные из Экселевской таблицы в Access'овскую. На форме есть DataSource, привязанный к ADOTable1, BDGrid, который отображает данные из DataSource.

При запуске приложения данные из Экселя достаются, передаются в ADOTable, но после закрытия приложения изменений в аксесовском файле нет.

Код

ADODataSet1.ConnectionString:=
                                'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\WorkA\himija\inp' +
                                '_exp\list1.xls;Extended Properties="Excel 8.0";'; // это экселевский файл с 
                                                                                                              // данными на импорт
with ADODataSet1 do begin
  CommandType := cmdText;
  CommandText := 'SELECT * FROM list1'; //это таблица с данными
  Open;
end;

if form1.ADOTable1.Active then {закрываем таблицу, если она открыта}
  form1.ADOTable1.Close;
tempstring := ExtractFilePath(Application.ExeName);  //выковыриваем путь к базе данных
tempstring:= Copy(tempstring,0, length(tempstring)-1);// удаляем из него последний слэш
MainPath:= Copy(tempstring,0,LastDelimiter('\',tempstring));//выковыриваем подстроку - кусок пути,
                                                                                                //на один уровень выше
form1.ADOTable1.ConnectionString :=
                               'Provider=Microsoft.Jet.OLEDB.4.0;' + // цепляем таблицу к базе
                               'Data Source=' + MainPath + 'db1.mdb;' +
                               'Mode=Share Deny Read|Share Deny Write;' +
                               'Persist Security Info=False';
ADOTable1.open;
form1.ADOTable1.Recordset:=ADODataSet1.Recordset; //перекидываем наборы строк

Что я делаю не так?
PM MAIL   Вверх
YurikGL
Дата 17.12.2005, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 5.7.2005
Где: Уфа

Репутация: нет
Всего: 2



Цитата
form1.ADOTable1.Recordset:=ADODataSet1.Recordset;


меняем на что-то типа
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


--------------------
 
PM MAIL WWW ICQ   Вверх
Алина
Дата 17.12.2005, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 14.5.2005

Репутация: нет
Всего: нет



Код

with ADODataSet1 do begin
CommandType := cmdText;
CommandText := 'SELECT * FROM list1'; //это таблица с данными
Open; // [b]тут мы открываем датасет[/b]
end;


А почему цикл до 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

Но как в таком случае сказать таблице, что мы каждый раз добавляем в нее новую запись?
Может есть способ проще, чем перебирать датасет по кортежам-полям (там ведь может быть несколько миллионов кортежей)?
PM MAIL   Вверх
YurikGL
Дата 17.12.2005, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 5.7.2005
Где: Уфа

Репутация: нет
Всего: 2



Цитата
А почему цикл до adoTable.recordcount?

Сглупил... да fields.count конечно...

к
Цитата
adoTable1.fields[i].value:=adoDataset1.fields[i].value;

добавь
adoTable1.insert
for i:=..... do adoTable1.fields[i].value:=adoDataset1.fields[i].value;
adoTable1.post

з.ы. в конце дня туплю сильно... извиняйте....
з.ы.ы. вроде были стандартные средства экспорта из access в excel и наоборот
з.ы.ы.ы вроде где-то видел кусок запроса, который в одном запросе обращался к разным базам средствами ADO и втыкал через insert into записи из одной базы в другую.... но это - частное решение и повторить то, что там было написано, я не готов.... В общем случае - перебираем поля и записи.
з.ы.ы.ы.ы можно еще взять в буфер и вставить из буфера... работает достаточно быстро smile

Это сообщение отредактировал(а) YurikGL - 17.12.2005, 18:38
--------------------
 
PM MAIL WWW ICQ   Вверх
Алина
Дата 17.12.2005, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 14.5.2005

Репутация: нет
Всего: нет



стандартные средства - это на один раз, имхо... иначе замаешься с ними...

из буфера стало реально работать быстрее в четыре раза примерно!
PM MAIL   Вверх
YurikGL
Дата 17.12.2005, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 5.7.2005
Где: Уфа

Репутация: нет
Всего: 2



Цитата
из буфера стало реально работать быстрее в четыре раза примерно!

Только по превышению определенного объема память кончается и буфер начинает глючить.
Поэтому в свое время я переносил именно по записи...
Кстати, можно еще через OLE работать...
--------------------
 
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0463 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.