![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Уважаемые мастера, подскажите как перегнать данные из FireBird [D6, MSSQL]
svt © (2006-12-21 09:19:00)Уважаемые мастера, подскажите как перегнать данные из FireBird to MSSQL. Есть около одного лимона записей в базе FireBird по некоторым причинам необходимо некоторые данные перегнать в MSSQL.
Я написал следующий код, но даже на машине с 2-мя гигами оперативки не смог всю перегнать. Я понимаю, что мог не правильно написать код. Прошу совета как это реализовать. ВОт только по частям перегонять не удобно.
ADOConnection1.Connected:=true;
IBDatabase1.Connected:=true;
IBTransaction1.Active:=true;
IBTable1.Active:=true;
IBTable1.First;
while IBTable1.Eof<>true do
begin
ADOCommand1.CommandText:='insert into DneprPeople(FirstName,MiddleName,LastName,BirthDay,DeathDay,Atoh,BirthPlace,Sett lement,Street,House,Building,Flat,CN,IR,Indx)'
+'values ('''+apos(IBTable1VOT_FIRSTNAME.AsString)+''','''+apos(IBTable1VOT_MIDDLENAME.AsString)+''','''
+apos(IBTable1VOT_LASTNAME.AsString)+''','''+Datetostr(IBTable1VOT_BIRTHDATE.AsDateTime)+''','''
+DateToStr(IBTable1VOT_DEATHDATE.AsDateTime)+''','''+Inttostr(IBTable1VOT_ATOH.AsInteger)+''','''
+apos(IBTable1VOT_BIRTHPLACE.AsString)+''','''+apos(IBTable1VOT_L_SETTLEMENT.AsString)+''','''
+apos(IBTable1VOT_L_STREET.AsString)+''','''+apos(IBTable1VOT_L_HOUSE.AsString)+''','''
+apos(IBTable1VOT_L_BUILDING.AsString)+''','''+apos(IBTable1VOT_L_FLAT.AsString)+''','''
+inttostr(IBTable1VOT_CN.AsInteger)+''','''+inttostr(IBTable1VOT_IR.AsInteger)+''','''+apos(IBTable1VOT_L_INDEX.AsString)+''')';
ADOCommand1.Execute;
IBTable1.Next;
end;
Спасибою.
Anatoly Podgoretsky (2006-12-21 12:30:00) [1]> svt (21.12.2006 9:53:03) [3]
Начни с параметров и однонаправленых курсоров.
аноним (2006-12-21 11:29:00) [2]
> IBDataSet. вот вопрос. как перейти к 200000 записи? вопрос
> банален, но все же.
по диапазону первичного ключа, например
svt (2006-12-21 10:49:00) [3]
> Виталий Панасенко (21.12.06 10:06) [5]
поставил значение в true... вроде работает... память не заканчивается:)
спасибо
Desdechado (2006-12-21 10:43:00) [4]DataPump из поставки Delphi чем не устраивает?
Виталий Панасенко (2006-12-21 10:06:00) [5]
> svt (21.12.06 09:53) [3]
>
> > Почему? Ждать надоело или причина какая была?
>
> прекратил операцию и объяснил это нехваткой памяти.
И, я думаю, правильно обьяснил. Ты втянул на клиента туеву хучу инфы.Она ведь должна где-нибудь храниться ? Думаю, это обьясняет и
> вот вопрос. как перейти к 200000 записи? вопрос банален,
> но все же.
Выкинь IBTable, используй IBDataSet(или IBQuery) и включи UniDirectional=True. Курсор будет однонаправленным, при перемещении на следующую строку НД предыдущие данные освобождают память. Ха, глянул только что - у IBTable тоже есть это св-во(я просто IBX не использую)
svt (2006-12-21 09:58:00) [6]
> а найти одбс драйвер с с самого мс скуля всосать данные
> не пробовал ?
к сожалению, пока мои познания не так велики, но если объяснить что и как, то я попробую.:)
svt (2006-12-21 09:53:00) [7]
> Почему? Ждать надоело или причина какая была?
прекратил операцию и объяснил это нехваткой памяти.
> но, блин, параметры то для кого придумали.
Если через параметры решиться проблема, то будем их использовать.
но может проблема и не в не использовании параметров.
Возможно я не правильно использую компоненты или использую но не те! я учту IBDataSet. вот вопрос. как перейти к 200000 записи? вопрос банален, но все же.
ORMADA (2006-12-21 09:50:00) [8]а найти одбс драйвер с с самого мс скуля всосать данные не пробовал ?
Sergey13 (2006-12-21 09:30:00) [9]> Я написал следующий код, но даже на машине с 2-мя гигами
> оперативки не смог всю перегнать.
Почему? Ждать надоело или причина какая была?
Можно сделать то-ж самое (раз уж написано), только вместо IBTable1 взять IBDataSet и загонять в него записи например по диапазону ID (типа <200000, 2000000-500000,>500000), потом то-же самое, но, блин, параметры то для кого придумали.