Форум по Delphi программированию

 



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.02.2016, 12:39
Tollly1992 Tollly1992 вне форума
Прохожий
 
Регистрация: 03.02.2016
Сообщения: 5
Версия Delphi: Delphi
Репутация: 10
По умолчанию MS Access Пенренос таблицы из одной БД в другую - Delphi БД

Добрый день. Столкнулся с проблемой пересноса таблицы из одно БД в другую средствами ADO. сейчас это реализованно по записям. когда работаешь с 100 записями в таблице это проблем не вызывает но теперь есть необходимость обрабатывать по 100 тыс. записей и это явно не подходиткомп виснет минут на 20.
вот пример.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var i,gde:integer;  Filename,s:string;
begin
adoconnection2.Connected:=true;
adotable2.Open;
     OpenDialog1.Execute;
     Filename:=opendialog1.FileName;
     ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;'+
         'Data Source='+filename+';Persist Security Info=False';
      ADOConnection1.Connected:=true;
      ADOTable1.TableName:='lgotniki_new';
      adotable1.Open;
Gde:=0;
 
{ÂñòГ*ГўГЄГ* Г§Г*ГЇГЁГ±ГЁ}
adotable2.Last;
adotable1.First;
for i:=0 to ADOTable1.RecordCount-1 do begin
        ADOTable2.Insert;
        ADOTable2.Fields[0].Value:=ADOTable1.Fields[0].Value;
        ADOTable2.Fields[1].Value:=ADOTable1.Fields[1].Value;
        ADOTable2.Fields[2].Value:=ADOTable1.Fields[2].Value;
        ADOTable2.Fields[3].Value:=ADOTable1.Fields[3].Value;
        ADOTable2.Fields[4].Value:=ADOTable1.Fields[4].Value;
        ADOTable2.Fields[5].Value:=ADOTable1.Fields[5].Value;
        ADOTable2.Fields[6].Value:=ADOTable1.Fields[6].Value;
        ADOTable2.Fields[7].Value:=ADOTable1.Fields[7].Value;
        ADOTable2.Fields[8].Value:=ADOTable1.Fields[8].Value;
        ADOTable2.Fields[9].Value:=ADOTable1.Fields[9].Value;
        ADOTable2.Fields[10].Value:=ADOTable1.Fields[10].Value;
        ADOTable2.Fields[11].Value:=ADOTable1.Fields[11].Value;
        ADOTable2.Fields[12].Value:=ADOTable1.Fields[12].Value;
        ADOTable2.Fields[13].Value:=ADOTable1.Fields[13].Value;
        ADOTable2.Fields[14].Value:=ADOTable1.Fields[14].Value;
        ADOTable2.Fields[15].Value:=ADOTable1.Fields[15].Value;
        ADOTable2.Fields[16].Value:=ADOTable1.Fields[16].Value;
        ADOTable2.Fields[17].Value:=ADOTable1.Fields[17].Value;
        ADOTable2.Fields[18].Value:=ADOTable1.Fields[18].Value;
        ADOTable2.Fields[19].Value:=ADOTable1.Fields[19].Value;
        ADOTable2.Fields[20].Value:=ADOTable1.Fields[20].Value;
        ADOTable2.Post;
         Gde:=Gde+1;
          adotable1.Next;
         end;
      ADOTable1.First;
      Label2.Caption:='ГЃГ*Г§Г* Г¤Г*Г*Г*ûõ ГіГ¤Г*Г·Г*Г® îáГ*îâëåГ*Г*';
      Label3.Caption:='Êîëè÷åñòâî Г§Г*ãðóæåГ*Г*ûõ Г§Г*ГЇГЁГ±ГҐГ© ='+INTTOSTR(GDE);
      label2.Visible:=true;
      label3.Visible:=true;
      adoquery1.SQL.Text:='select COUNT(*)from lgotniki';
adoquery1.Active:=true;
s:=adoquery1.Fields[0].Value;
label6.Caption:='îáùåå êîëè÷åñòâî Г§Г*ГЇГЁГ±ГҐГ© Гў ГІГ*áëèöå = '+s;
label6.Visible:=true;
adotable2.Close;
adotable1.Close;
adoconnection2.Connected:=false;
ADOConnection1.Connected:=false;
 
end;
Ответить с цитированием
  #2  
Старый 03.02.2016, 13:13
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,715
Репутация: 52347
По умолчанию

Это делается несколько иначе:
Код:
INSERT INTO lgotniki_new
SELECT *
FROM lgotniki_new IN 'С:\SourceBD.mdb';
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 03.02.2016 в 13:40.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
Tollly1992 (04.02.2016)
  #3  
Старый 03.02.2016, 16:08
Tollly1992 Tollly1992 вне форума
Прохожий
 
Регистрация: 03.02.2016
Сообщения: 5
Версия Delphi: Delphi
Репутация: 10
По умолчанию

Хоренькак ето туплю жутко на этом моменте(
вот смотрите открываю одну БД и вторую выбираю местоположение. дальше нужно удалить таблицу из первой БД и вставляю в нее всю таблицу из второй БД.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var   Filename,s:string;
begin
adoconnection2.Connected:=true;
adotable2.Open;
     OpenDialog1.Execute;
     Filename:=opendialog1.FileName;
     ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;'+
         'Data Source='+filename+';Persist Security Info=False';
      ADOConnection1.Connected:=true;
      ADOTable1.TableName:='lgotniki';
      adotable1.Open;


//Âñòàâêà
      adoquery8.SQL.Add('INSERT INTO lgotniki_MFC.lgotniki SELECT *');
      adoquery8.SQL.Add('FROM lgotniki_NEW.lgotniki_new ');
      adoquery8.Active:=true;

Последний раз редактировалось Tollly1992, 03.02.2016 в 16:17.
Ответить с цитированием
  #4  
Старый 03.02.2016, 18:12
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,715
Репутация: 52347
По умолчанию

А вот про удаление первой таблицы никто не говорил, приведенный выше код просто добавляет данные в существующую таблицу. Концепция поменялась? Тогда уже так:
Код:
SELECT * INTO lgotniki_new FROM lgotniki_new IN 'С:\SourceBD.mdb';
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
Tollly1992 (04.02.2016)
  #5  
Старый 04.02.2016, 11:16
Tollly1992 Tollly1992 вне форума
Прохожий
 
Регистрация: 03.02.2016
Сообщения: 5
Версия Delphi: Delphi
Репутация: 10
По умолчанию

всем спаисибо вообщем то решил проблему таким образом.
Код:
var   Filename,s:string;
begin
adoconnection2.Connected:=true;
adotable2.Open;
     OpenDialog1.Execute;
     Filename:=opendialog1.FileName;
     ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;'+
         'Data Source='+filename+';Persist Security Info=False';
      ADOConnection1.Connected:=true;
      ADOTable1.TableName:='lgotniki_new';
      adotable1.Open;


//Âñòàâêà
   adoquery9.SQL.Add(' delete from lgotniki;');
    adoquery9.ExecSQL;
    adoquery8.SQL.Add(' INSERT INTO [lgotniki MFC].[lgotniki] SELECT * ');
      adoquery8.SQL.Add('FROM [lgotniki_NEW].[lgotniki_new] ');
      adoquery8.ExecSQL;
    Label2.Caption:='Áàçà äàííûõ óäà÷íî îáíîâëåíà';
      label2.Visible:=true;
осталось еще щас сжатие запихнуть чтоб БД не жирнела и все хорошо)
Ответить с цитированием
  #6  
Старый 04.02.2016, 12:19
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,715
Репутация: 52347
По умолчанию

Удаление данных из таблицы весьма продолжительная операция. Быстрее удалить старую таблицу и сформировать новую как я показал выше.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #7  
Старый 04.02.2016, 12:41
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 232
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

Цитата:
Сообщение от Страдалецъ
Быстрее удалить старую таблицу и сформировать новую как я показал выше.

Можно еще truncate старой таблице сделать, тоже будет быстро. Не уверен только, что в Акцессе truncate поддерживается
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:05.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2021

ВКонтакте   Facebook   Twitter