C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
как выполнить 1000 insert'ов???
Tertium
Отправлено: 04.06.2005, 22:34


Машинист паровоза

Группа: Почетный участник
Сообщений: 192



Народ, что-то я не вкуриваю.
выполняю в цикле последовательно 1000 запросов INSERT, из них только 120-150 попадают в базу. Причём не первые, а так, выборочные. Впечатление такое, что запросы идут, но не все успевают вписаться в базу. Вроде бы никакие евенты не откликаются. Транзакции пробовал — ноль эмоций. Магия какая-то... или, как обычно, главного в документации Борланда — нет.
** avtoritet
Отправлено: 05.06.2005, 00:35


Не зарегистрирован







Странно все это!
Что за база, компонеты используемые и их свойства( те, что ты изменил от устанавливаемого по умолчанию достаточно(?
Tertium
Отправлено: 05.06.2005, 04:13


Машинист паровоза

Группа: Почетный участник
Сообщений: 192



TADOConnection + TADOQuery
ничего такого не менял, настроил тока соединение. ну, я вообще-то не впервые эти компоненты вижу. А вот 1000 инсертов полпробовал впервые и вот... Да что там, даже 10 — выполняются только первый и пятый... мистика какая-то

Отредактировано Tertium — 05/06/2005, 04:13
** avtoritet
Отправлено: 05.06.2005, 05:18


Не зарегистрирован







Тут скорее нужно видеть базу и исходники, чтобы сказать наверняка.
Щас у себя пробовал — все тип-топ!
Ну, вот так примерно, наверное у тебя, да?
CODE

for(int i=0;i<10000;i++){
adoQ->Insert();
adoQ->FieldByName("K_N")->Value = i+1;
adoQ->FieldByName("K_FIO")->Value = IntToStr(i+1)+" не глюкноло";
adoQ->Post();
}
ShowMessage(adoQ->RecordCount);


Отредактировано Георгий — 05/06/2005, 14:18
Tertium
Отправлено: 05.06.2005, 13:57


Машинист паровоза

Группа: Почетный участник
Сообщений: 192



не, я во как делал.
CODE

for (int i=0;i<1000;i++)
{
 ADOQuery1->SQL->Text= AnsiString().sprintf("use Gambling insert into Stats(machine_id,currentIn,currentOut,last_query) values(%d,%d,%d,'%s')",
  rand()%150,i,rand()*rand(),TDateTime(rand()*rand()).FormatString("yyyy-mm-dd hh:nn:ss"));
 ADOQuery1->ExecSQL();
}


может, нельзя пользоваться ExecSQL?
Tertium
Отправлено: 05.06.2005, 14:18


Машинист паровоза

Группа: Почетный участник
Сообщений: 192



Слушай, пришли на мыло свой пример полностью, а ? ботва какая-то, никак не хочет работать!! С инсертом, грит, мол, не открыт датасет, и не хрена в него лезть... А в примере же у них так... ничего не понимаю...
Так до нервного срыва и прямой работы с одбс недолго! smile.gif А не хотелось бы...

tertium<собака>front.ru
Tertium
Отправлено: 05.06.2005, 16:34


Машинист паровоза

Группа: Почетный участник
Сообщений: 192



Господа, мы столкнулись с тем редким случаем, когда не моя программа глючит, а сам MSSQL-сервер smile.gif. Видимо, он не уживается с 2003 виндами. Народ по крайней мере говорит о необходимости установки SP3 под MSSQL.
Да и под MySQL всё работает, как часы.
** avtoritet
Отправлено: 06.06.2005, 02:21


Не зарегистрирован







Сори, только сейчас к компу подобрался, выходные всетаки!
Ну как я понял, тебе уже не нужен мой исходник. Тем более, что у меня все локально без сетей, МyСКЛ сервера.

Насчет SP3 and MSSQL тоже слышал, говрят- это один из выходов из сложившейся ситуации.
full_lamer
Отправлено: 06.06.2005, 08:15


Машинист паровоза

Группа: Участник
Сообщений: 225



есть такое дело SQL под W2k3 идет с тормозами, при запросах теряется половина данных... факт.
greyICH
Отправлено: 13.06.2005, 17:04


Не зарегистрирован







не, народ! у меня стоит MSSQL server SP3 на win2003. Никаких проблем! если доустановка sp3 не поможет — попробуй обновить mdac на клиенте. взять его можно на сайте мелкомягких.

Вернуться в Работа с базами данных в C++Builder