powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ADO и Update
25 сообщений из 28, страница 1 из 2
ADO и Update
    #34090404
Pr0teus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почему при обновлении таблицы, а именно при добавлении записей - это добавление с каждым разом все медленне и медленнее?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
l_objRecordSetAdd.CursorLocation = adUseServer
l_objRecordSetAdd.Open "SELECT * FROM customers WHERE .F. INTO CURSOR cur_add_", l_objDBCConnection, adOpenStatic, adLockOptimistic

If (l_objRecordSetAdd.State = adStateOpen) Then
   For ln_index =  0  To  2000 
      l_objRecordSetAdd.AddNew

      ' цикл присваивающий необходимые значения полям Recordset'а

      l_objRecordSetAdd.Update
      
      If (Err <>  0 ) Then
            l_objLog.m_WriteLine "Error - " & Err.Description
            l_objRecordSetAdd.CancelUpdate
            Err.Clear
      End If
   Next ln_index
End If


Вот это все хозяйство почему-то с 700 добавленной записи начинает постепенно замедляться, и все медленнее и медленнее добавляет. Делал и с отсоединенным рекордсетом, таже фигня. И с транзакцией и без, все тоже. Где собака порылась?
...
Рейтинг: 0 / 0
ADO и Update
    #34090436
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что нефиг юзать курсоры.
Вообще в первый раз вижу такое использование курсоров - SELECT INTO CURSOR
...
Рейтинг: 0 / 0
ADO и Update
    #34090484
Pr0teus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В таком случае как мне добавлять записи. А кроме добавления есть еще и модификация, причем тоже пакетная.
...
Рейтинг: 0 / 0
ADO и Update
    #34090494
Pr0teus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне надо создать на сервере курсор аналогичный какой-либо таблице и заполнить его новыми записями, чтобы потом с этим курсором работать.
...
Рейтинг: 0 / 0
ADO и Update
    #34090512
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так а не нельзя одним инсертом вставить, нафига в цикле?
...
Рейтинг: 0 / 0
ADO и Update
    #34090544
Pr0teus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Надо подумать, у меня просто не все значения могут присутствовать для вставки. И еще, чем так плох запрос

Код: plaintext
1.
l_objRecordSetAdd.Open "SELECT * FROM customers WHERE .F. INTO CURSOR cur_add_", l_objDBCConnection, adOpenStatic, adLockOptimistic

Собственно как раз и создает мне пустой курсор, идентичный таблице customers. И обратиться я потом к нему могу

Код: plaintext
1.
RecorSet.Open "SELECT * FROM cur_add_"
...
Рейтинг: 0 / 0
ADO и Update
    #34090595
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вам надо создать 2000 записей в БД с null-значениями во всех полях?
И это обязательно сделать на стороне сервера?
...
Рейтинг: 0 / 0
ADO и Update
    #34090606
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pr0teusМне надо создать на сервере курсор аналогичный какой-либо таблице и заполнить его новыми записями, чтобы потом с этим курсором работать.
Попытался представить себе ситуацию, при которой обычные SELECT, UPDATE и DELETE не справятся - и не смог. Зачем здесь курсор?
Бедный сервер...
...
Рейтинг: 0 / 0
ADO и Update
    #34090657
Pr0teus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне надо создать на стороне сервера курсор и заполнить его более чем 2000 записями с не пустыми значениями (тут просто для примера привел). Долго все это дело работает и при новых итерациях все замедляется и замедляется, хотя и понятно - ведь все новая втавка в рекордсет занимает с каждым разом больше времени.
...
Рейтинг: 0 / 0
ADO и Update
    #34090679
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем вставлять через курсор ? Есть же хранимка, есть connection.execute .
...
Рейтинг: 0 / 0
ADO и Update
    #34090708
Pr0teus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По поводу Execute я тоже подумал, но как полученный курсор сделать, чтобы он мог принимать записи по INSERT.

Код: plaintext
1.
2.
3.
l_strSQLTmp = "SELECT * FROM customers WHERE .F. INTO CURSOR cur_add_"
l_objDBCConnection.Execute(l_strSQLTmp)

...
Рейтинг: 0 / 0
ADO и Update
    #34090718
Pr0teus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще раз повтояряюсь, мне нужен курсор идентичный таблице.
...
Рейтинг: 0 / 0
ADO и Update
    #34090849
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз интересуюсь: чем обычная выборка из таблицы вас не устраивает?
...
Рейтинг: 0 / 0
ADO и Update
    #34090875
Pr0teus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Меня обычная выборка всем устраивает. Но мне нужна не выборка, а курсор на сервере, чтобы в него перегнать большие данные за раз, а потом манипулировать ими, а именно делать уже из него выборки и сравнения с информацией, что храниться в той таблице, на основе которой он сделан.
...
Рейтинг: 0 / 0
ADO и Update
    #34090896
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pr0teusЕще раз повтояряюсь, мне нужен курсор идентичный таблице.Можно сделать временную таблицу идентичную нужной, пакетно добавить записи в нее, Pr0teusа потом манипулировать ими, а именно делать уже из него выборки и сравнения с информацией, что храниться в той таблице, на основе которойона сделана.
Без всяких курсоров и тормозов.
...
Рейтинг: 0 / 0
ADO и Update
    #34090990
Pr0teus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хорошо, и как мне сделать еще одну таблицу, ведь я не знаю ни ее полей, ни типов. Все что у меня есть это ее название и файл с данными для загрузки, при чем в нем могут быть информация только по части полей. Например в таблице храняться Фамилия и Имя, а в файле только Фамилия, и нужно эти новые Фамилии в сервер загрузить и только новые, т.е. те что есть в БД откидываются (это как пример).
...
Рейтинг: 0 / 0
ADO и Update
    #34091099
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
cn.CursorLocation = adUseClient
cn.Open
cn.Execute "select top 0 * into #tmp from " & table 'Создается таблица
rs.Open "select * from #tmp", cn, adOpenStatic, adLockBathOptimistic 'Делается выборка
...
rs.AddNew 'Добавляются записи
...
rs.UpdateBatch 'Все загоняется в базу
А дальше сам, тебе виднее что с чем сравнивать.
...
Рейтинг: 0 / 0
ADO и Update
    #34091183
Pr0teus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне это не поможет, т.к. БД - это Fox Pro 6
...
Рейтинг: 0 / 0
ADO и Update
    #34091189
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy, не факт, что в СУБД, где работает синтаксис типа "WHERE .F. INTO CURSOR" присутствуют временные таблицы. Впрочем, ее можно заменить и на постоянную, а потом убить.
...
Рейтинг: 0 / 0
ADO и Update
    #34091230
Pr0teus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Постоянная таблица - это самый крайний шаг, в БД не должно остаться ничего лишнего. Поэтому и хочеться временную структуру.
...
Рейтинг: 0 / 0
ADO и Update
    #34091333
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ёклмн, афтор, если б ты самого начала сказал, что это фокс, я бы вообще не лез с советами. По умолчанию SQL server или Access.
...
Рейтинг: 0 / 0
ADO и Update
    #34092060
Pr0teus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создается такое впечатление, что этот ADO не приспособлен для обновления больших объемов данных. Почему-то и память кушает и вставки теже замедляются. Да и в связке с Fox Pro 6 тоже не ахти. Хз в общем.
...
Рейтинг: 0 / 0
ADO и Update
    #34092130
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем в ADO использовать.
Если это FOX, то файл можно писать напрямую. Открыли For Binary и поехали.
Вот пример
...
Рейтинг: 0 / 0
ADO и Update
    #34092394
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pr0teusСоздается такое впечатление, что этот ADO не приспособлен для обновления больших объемов данных. Почему-то и память кушает и вставки теже замедляются. Да и в связке с Fox Pro 6 тоже не ахти. Хз в общем.Не надо валить на ADO фоксовские проблемы. На sql сервер через updatebatch 2000 записей влетают меньше, чем за секунду через то же ADO. Почему замедляется уже объяснили, а память кушает потому, что курсор находится в памяти, и записи добавляются в память, тогда как временные таблицы того же sql сервера хранятся в базе tempdb, соответственно в файле tempdb_data.mdf.
...
Рейтинг: 0 / 0
ADO и Update
    #34092486
Pr0teus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Напрямую из Fox'а я не стал лишь потому, что ADO без проблем биндит данные, т.е. мне не надо заботиться о типах, т.к. загрузка идет из XML файла.
По поводу быстроты, то сделал тест, такой же цикл вставка 10000 записей в таблицу из 20 полей char все в 1-й транзакции, то прошло влет. Не могу врубиться почему, когда из XML вставляю поля, то съедается так много памяти и так все замедляется.
Хотя по отдельности все очень быстро.
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ADO и Update
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]