Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Уважаемые мастера, подскажите как перегнать данные из 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), потом то-же самое, но, блин, параметры то для кого придумали.


Наверх

Титульная страница Поиск, карта сайта Написать письмо