|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
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
|
||||
|
||||
Это делается несколько иначе:
Код:
INSERT INTO lgotniki_new SELECT * FROM lgotniki_new IN 'С:\SourceBD.mdb'; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 03.02.2016 в 13:40. |
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
Tollly1992 (04.02.2016)
|
#3
|
|||
|
|||
Хоренькак ето туплю жутко на этом моменте(
вот смотрите открываю одну БД и вторую выбираю местоположение. дальше нужно удалить таблицу из первой БД и вставляю в нее всю таблицу из второй БД. Код:
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
|
||||
|
||||
А вот про удаление первой таблицы никто не говорил, приведенный выше код просто добавляет данные в существующую таблицу. Концепция поменялась? Тогда уже так:
Код:
SELECT * INTO lgotniki_new FROM lgotniki_new IN 'С:\SourceBD.mdb'; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
Tollly1992 (04.02.2016)
|
#5
|
|||
|
|||
всем спаисибо вообщем то решил проблему таким образом.
Код:
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
|
||||
|
||||
Удаление данных из таблицы весьма продолжительная операция. Быстрее удалить старую таблицу и сформировать новую как я показал выше.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#7
|
|||
|
|||
Цитата:
Можно еще truncate старой таблице сделать, тоже будет быстро. Не уверен только, что в Акцессе truncate поддерживается |