Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Multiple-step operation generated errors

830
29 декабря 2003 года
MVal
76 / / 17.10.2002
Вот такая ситуация.
Вообщем прицепляюсь я через ADOTable к фоксовой базе через MS VisualFox-овского провайдера, чтобы слить в нее данные.
Далее начинаю процесс их передачи. В начале все идет хорошо, но потом (после того как скинет где-то сотню записей) выдает вот такую ошибку (см. вложенный файл).
Использую BCB5 пропатченый SP1 и ADOSp1.
Если кто с таким встречался - поделитесь, как с ним бороться.
358
29 декабря 2003 года
moonmike
423 / / 18.10.2002
А код перекачки данных можно сюда запостить?
830
29 декабря 2003 года
MVal
76 / / 17.10.2002
Цитата:
Originally posted by moonmike
А код перекачки данных можно сюда запостить?


Конечно.
...
ADOTable1->Open();
for (int r=0; r<=ADOQuery1->RecordCount; r++)
{
ADOTable1->Append();
for (int f=0; f<ADOQuery1->FieldList->Count; f++)
{ ADOTable1->FieldByName(ADOQuery1->FieldList->Strings[f])->AsVariant=ADOQuery1->FieldByName(ADOQuery1->FieldList->Strings[f])->AsVariant;
};
ADOQuery1->Next();
}
...
Теперь комментарии:
ADOTable1 - та табличка, куда сливаются данные
В ADOQuery1 получаю данные из другой базы в виде, приемлимом для передачи в ADOTable1.

А Вот теперь начинаются интересные вещи: код вроде как бы начинает работать и передает примерно сотню записей (запрос выдает порядка 10000 зап.) а потом не с того ни с сего выдает эту выше упомянутую ошибку.
Вот я и думаю - если это мой глюк, то почему она "маленько" поработает? Если это глюк ADO (до пропатчивания у него например вообще были интересные вещи - когда закрываешь пустой датасет - он ругался на EOF) - дак для этого я его и патчил.

358
30 декабря 2003 года
moonmike
423 / / 18.10.2002
Я бы сделал примерно так:
int i = 0
ADOTable1->Open();
for (int r=0; r<=ADOQuery1->RecordCount; r++)
{
ADOTable1->Append();
for (int f=0; f<ADOQuery1->FieldList->Count; f++)
{ ADOTable1->FieldByName(ADOQuery1->FieldList->Strings[f])->AsVariant=ADOQuery1->FieldByName(ADOQuery1->FieldList->Strings[f])->AsVariant;
};
ADOQuery1->Next();
i++;
if(i==50)
{
ADOTable1->Post();
i = 0;
}
}
То есть такое впечатление что переполняется кэш. Либо вообще делать Post() после каждого Append();
830
05 января 2004 года
MVal
76 / / 17.10.2002
Вообщем как оказалось это был не мой баг, и даже не борландовский - а майкрософтовский.
Поставил провайдера от 8-го фокса - вроде заработала и том виде, в каком было первоначально.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог