Перегон БД из MsSQLserver в Firebird - ошибка Out of memory.
IBTable3->Open;
while (!ADOTable3->Eof)
{
IBTable3->Append;
IBTable3->FieldByName("stockid")->AsString = ADOTable3->FieldByName("stockid")->AsString;
IBTable3->Post;
ADOTable3->Next;
}
ADOTable3->Close;
IBTable3->Close;
код такой...
никто не подскажет, в чем проблема?
спасиб заранее
попробуй явный коммит добавить после каждых N инсертов
например N = 100 или 1000
типа того:
while (!ADOTable3->Eof)
{
IBTable3->Append;
IBTable3->FieldByName("stockid")->AsString = ADOTable3->FieldByName("stockid")->AsString;
IBTable3->Post;
count++;
if count mod N = 0
IBTable3->Commit;
ADOTable3->Next;
}
сорри, но я даж не знаю на каком языке это написано
сорри, но я даж не знаю на каком языке это написаноблин... сорри - сорри. моя вина:
BuilderC++, использую компоненты панелей ADO (для коннекта к серверу) и InterBase (для коннекта к Embedded FireBird)
IBTable3->Commit; - такого нет...
Че та мне кажется, что твой подход совсем плохой.
Если операция будет проводится один раз, то лучше воспользоваться тулзой для перекачки данных.
Если это необходимо закодить, то имхо лучше генерить батчки из SQL-запросов на insert и вставлять их в БД (хотя неплохо бы на код IBTable3->Post; взглянуть - что там внутри творится).
Еще наверно стоит локализовать проблемы - кто дает out of memory - ADO или IB. (в первом случае надо закоментить вставку в IB, во втором уменьшить объем выборки).
закоментитьимелось ввиду закоммитить?
IBTable3->Commit; - такого нет...ну а там нельзя посмотреть список того что есть?
может она как-то по-другому называется, типа IBTable3->CommitWork
может это на уровне выше, т.е. у IBTable3 есть "родитель", верней объект который его создал
и у него есть Commit
открой доку по этому делу
Нет, именно закомментить, т.е. убрать код, который работает с IB.
если закомментить код то он выполняться же не будет
Именно, надо отрубить IB. Поскольку может быть просто ADO пытается таблицу засосать и у него это не получается => надо решать проблему с ADO.
выборка-то делаться будет, не делаться будет только вставка
соответственно и можно будет убедиться, что проблема в выборке или проблема в вставке
я думал он решение проблемы в скобках указал
а это он указал как проблему найти
для того чтобы проблему решить - сначала ее надо найти
При больших объемах почему-то ругается на Out of Memory.Да не, здесь все просто - надо докупить больше памяти!
Да не, здесь все просто - надо докупить больше памяти!кстати не факт
возможно где-то в настройках (одного из драйверов или одной из баз) есть параметр, который надо поменять чтобы все стало ок
Оставить комментарий
markyzz
При больших объемах почему-то ругается на Out of Memory.