powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
38 сообщений из 38, показаны все 2 страниц
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34159532
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или как сделать чтобы VB6 работал быстрее?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Dim connectString As String
Dim db As ADODB.Connection
Dim t1 As ADODB.Recordset
Set db = New ADODB.Connection
Set t1 = New ADODB.Recordset
  
db.ConnectionString = "DBQ=" & file_mdb & ";UID=admin;PWD=" & password & ";DRIVER={Microsoft Access Driver (*.mdb)};DefaultDir=" & path_mdb & ";"
db.Open
t1.Open "Таблица", db, , , adCmdTable

ii= 0   
Do Until t1.EOF
       ii = ii +  1  ' например какое-то действие
       t1.MoveNext
Loop
               
t1.Close
db.Close
Set t1 = Nothing
Set db = Nothing
Такой же текст программы на Access -е выполняется в миг. Почему на VB6 заметно долго.
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34159614
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если база в сети, а клиент где-то, то может из-за трафика. Посмотри, ты же читаешь запись за записью по одной, она туда-сюда, туда-сюда за тридевять земель. Но это только догадка, т.к. ты не показал нам путь к базе. Или все-таки код разнится. База сидит там же, где и клиент?
И если ты делаешь для всех записей какое-то вычисление, то лучше это выпонить через SQL запрос, минуя цикл.
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34159745
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
База локальна и в ней ~30 000 записей
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34159768
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Окрыть соединение с клиентским курсором, а рекордсет adOpenStatic.
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34159796
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
t1.CursorType = adOpenStatic
t1.Open basa_dbf, db, , , adCmdTable
по скорости ничего не изменилось из-за adOpenStatic
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34159904
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Два замечания для оптимизации этого:
1. Никогда не объявляйте рекордсет как Dim rs As New ADODB.Recodset
Всегда так:
Dim rs as ADODB.Recordset
Set rs = new ADODB.Recodset
Обращение к свойствам и методам рекордсета объявленного как As New - на три порядка медленниее. Это очень заметно в циклах по записям-полям.
2. Если надо вернуть эти записи обратно в БД, то лучше в запросе все манипуляции и сделать. Или возрващать записи не через рекордсет.
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34159918
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще:
Иногда бывает нужен сложный алгоритм по числу записей более 1000.
Есть смысл "перегнать" все это в массив (Type) и уже с ним работать.
Массив пользовательского типа данных работает примерно в 300-500 раз быстрее рекордсета.
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34159930
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так и делаю.
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34159978
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, да. Я и не посмотрел Кому советы даю.
Здесь два узких места:
1) Рекордсет, обращения к полям которого очччень медленные (относительно). Слишком много событий он генерит.
2) Процессное взаимодействие. Между БД и приложением VB будет столько межпроцессных вызовов сколько записей в рекордсете. Надо все записи одним вызовом послать туда. Тогда будет сравнимо по скорости с Аксесс.
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34160290
blinow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот, опять одно по одному.
Вы не то сравниваете.
Access надо сравнивать например с FoxPro, даже с SQLями не годится его сравнивать
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34160366
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WorobjoffНадо все записи одним вызовом послать туда. Тогда будет сравнимо по скорости с Аксесс.
Так как таблицу или запрос отправить, скажем, во многомерный массив, например?
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34160376
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Люди дорые помогите! Не дайте отказаться от VB6 и перейти на Access.
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34160420
Random_Goodman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дотнет - панацея от всех бед.
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34160467
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что надо сделать над записями?
Сколько записей надо обработать?
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34160485
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Random_GoodmanДотнет - панацея от всех бед.Не во всяком дотнет. Блочная вставка таблиц появилась лишь в 2.0.
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34160526
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть Таблица1 - список деталей. ~30 000 записей
Есть Таблица2 - список деталей которые надо удалить из Таблицы1
Удалить надо 20-30 кодов деталей из Таблицы1.
Мой гениальный алгоритм:
1 . Читаю Таблица1
2. Ищу соответствующий код детали в Таблице2
3. Если нашёл, то запись из Таблицы1 отмечаю для удаления ( только отмечаю )
4. Go to на метку 1 .
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34160541
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему нельзя выполнить запрос?
Код: plaintext
DELETE Table1 WHERE ID in (SELECT ID FROM Table2)
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34160546
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или
UPDATE Table1 SET IsDeleted = true WHERE ID in (SELECT ID FROM Table2 )
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34160581
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело в том, что я должен анализировать!
Сколько деталей я удалил из Таблицы 1
Сколько деталей я не нашёл в Таблице 1
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34160641
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Было что-то подобное в моей работе.
Оптимизировал так:
- Рекордсет перегнал в массив Type. (ускорение анализа)
- Возвращал результат в БД так:
Код: plaintext
 Conn.Execute "UPDATE Table1 SET Fld1 = true WHERE ID in (" & strToDeltete & ")", MyAffectedRecords
MyAffectedRecords - это сколько записей удалилось фактически.
Известно и то сколько запрошено на удаление.
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34160685
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как перегнать RecordSet в массив? Примерчик бы!
Благодарю за запросы (см. выше). Что называется навёл на мысль!
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34160754
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
klen_А как перегнать RecordSet в массив? Примерчик бы!Dim Conn1 As
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
ADODB.Connection
Dim rs As ADODB.Recordset

Private Type TArr
   ID As Long
   CustomerID As String
   EmployeeID As Long
End Type
Dim Arr() As TArr

Private Sub Form_Load()
   Set Conn1 = New ADODB.Connection
   Conn1.CursorLocation = adUseClient
   Conn1.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Northwind"
   GetArray
   Dim i As Long
   Dim s As String
   For i =  0  To  10 
      s = s & Arr(i).ID & ", "
   Next
   MsgBox s
End Sub

Private Sub GetArray()
   Dim v As Variant
   Dim i As Long
   Dim n As Long
   Set rs = New ADODB.Recordset
   rs.Open "SELECT OrderID, CustomerID, EmployeeID FROM Orders", Conn1, adOpenForwardOnly, adLockReadOnly, adCmdText
   v = rs.GetRows
   n = UBound(v,  2 )
   ReDim Arr(n)
   For i =  0  To n
      With Arr(i)
         .ID = v( 0 , i)
         .CustomerID = v( 1 , i)
         .EmployeeID = v( 2 , i)
      End With
   Next
End Sub
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34160781
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vorobjoff. Классно! Благодарю!
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34160843
Фотография _bob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
klen_Дело в том, что я должен анализировать!
Сколько деталей я удалил из Таблицы 1
Сколько деталей я не нашёл в Таблице 1


сколько деталей не нашел: select count(*) from Table2 t2 left outer join Table1 t1 on t2.id = t1.id where t1.id is null

сколько удалишь: select count(*) from Table2 t2 inner join Table1 t1 on t2.id = t1.id

ну и удаляешь этим же джоином
это если таблицы в акцессе, а если на сиквеле, там процедурой вообще крысота будет

тока в транзакцию это все удовольствие нужно поместить, а то сосчитаешь, а тут тебе записей навставляют
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34161239
Фотография PA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
klen_А как перегнать RecordSet в массив? Примерчик бы!
GetRows Method
GetRows Method Example
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34166041
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
klen_А как перегнать RecordSet в массив? Примерчик бы!
Благодарю за запросы (см. выше). Что называется навёл на мысль!

Да нафига в массив-то? Разницы с сканировании не ощутишь.

Тот же Access ведь с табличкой не через ODBC работает, так что просто поменяй провайдера с ODBC на OLEDB. Ну как в примере от Worobjoff.

Плюс к тому статический курсор и можно еще BatchOptimistic.
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34166105
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrF[quot klen_]просто поменяй провайдера с ODBC на OLEDB. Ну как в примере от Worobjoff.
Действительно стало работать быстрее. Спасибо.
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34166118
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Access всё равно читает таблицу в миг. Буквально пару секунд.
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34166132
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Access не читает всю таблицу сразу, он зачитывает первые N записей - те, которые помещаются на экран.
Да и в любом случае обмен данными между интерфейсами занимает времени больше, нежели при использовании только одной Access, это нормально.
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34167214
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
klen_ Access всё равно читает таблицу в миг. Буквально пару секунд.

Что понимаешь читает? Выводит на экран? Ну и в программе на VB можно точно так-же ее вывести.
И вообще - скорость не должна зависеть от того на чем пишешь - на Access, VB или C++.
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34167223
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MelkiadesAccess не читает всю таблицу сразу, он зачитывает первые N записей - те, которые помещаются на экран.

Обыкновенный серверный курсор...

MelkiadesДа и в любом случае обмен данными между интерфейсами занимает времени больше, нежели при использовании только одной Access, это нормально.

Да никакой разницы, вообще-то... ;)
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34167397
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrF
MelkiadesДа и в любом случае обмен данными между интерфейсами занимает времени больше, нежели при использовании только одной Access, это нормально.

Да никакой разницы, вообще-то... ;)
Что значит никакой? Access что, работает с базой mdb через ODBC или через OLEDB?
Я, конечно, не спец по Access, но имхо он работает с базой через собственное API, а не через этих провайдеров. Вот вам и разница.
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34167701
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
' текст на VB6   ЧИТАЕТ ЗА 12 СЕКУНД ~30 000 ЗАПИСЕЙ
  db.Provider = "Microsoft.Jet.OLEDB.4.0" ' с этим провайдером чтение таблиц происходит быстрее.
  db.Open file_mdb, "Admin", password
  t1.Open "Таблица1", db, , , adCmdTable
  Do Until t1.EOF
       t1.MoveNext
  Loop
  t1.Close
  db.Close

' текст на Access-е  ЧИТАЕТ ЗА ПАРУ СЕКУНД ~30 000 ЗАПИСЕЙ
Dim t1 As Recordset, db As Database
Set db = CurrentDb()
Set t1 = db.OpenRecordset("Таблица1")
Do Until t1.EOF
       t1.MoveNext
Loop
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34167965
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все дело в межпроцессном взаимодействии.
Если после каждого MoveVext приложение обращается к БД, тормозить будет.
А если зафетчить все записи сразу, обращение будет лишь одно.

Каждый раз, при обращении к другому процессу (в д.случае к МДБ) теряется время впустую. Приложение-клиент тупо ждет когда ОС "вспомнит" о его запросе и передаст его приложению-серверу.
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34168266
ЁхынПалыч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
klenSet db = CurrentDb()
Метод косвенно указывает на то, что в коде Акса используется ДАО, а не АДО, а ДАО быстрее АДО само по себе (правда, вряд ли в столько раз, скорее на NN процентов), и как раз предназначено для работы с ДЖЕТ машиной максимально шустро.

Зы-1: Это в дополнение к другим возможным объяснениям.

Зы-2: Скорее трабла в долгом коннекте АДО к источнику, поскольку оно вот такое интеллектуальное. А КуррентДБ с рекордсетом ДАО фетчит сразу весь набор в память, да ещё в той же рабочей области, что и текущий коннект ДЖЕТА.

Зы-3: Замерьте не весь кусок кода, а только циклы, исключив собственно коннект АДО из замера. Думаю, не будет такой разницы в разы. Там и "собака порылась"... :-)

ИМХО, однако.
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34172105
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WorobjoffВсе дело в межпроцессном взаимодействии.
Если после каждого MoveVext приложение обращается к БД, тормозить будет.
А если зафетчить все записи сразу, обращение будет лишь одно.

Вообще-то при клиентском курсоре все данные сразу тащатся на клиентскую машину.
Оттого и его название ;)
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34172122
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
klen_текст на VB6 ЧИТАЕТ ЗА 12 СЕКУНД ~30 000 ЗАПИСЕЙ
текст на Access-е ЧИТАЕТ ЗА ПАРУ СЕКУНД ~30 000 ЗАПИСЕЙ

Вы прям волшебники какие-то...
Ниже приведены результаты исходники и результаты теста на VB6.
Видно что резко отличается лишь время заполнения таблицы.
А примитивное сканирование 30000 записей в любом случае выполняется менее чем за секунду.

Откуда взяли пару (а тем более 12! ) секунд??? Это ж какой талант надо иметь ;)

автор--- Columns = 15, Rows = 30000
ADODB: ADODB_FillTable 37,656
ADODB: ScanTable (Client Cursor) 0,530
ADODB: ScanTable (Server Cursor) 0,312
DAO: DAO_FillTable 2,406
DAO: ScanTable (Snapshot Cursor) 0,438
DAO: ScanTable (Dynaset Cursor) 0,141


Исходник тестового модуля:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
Option Explicit

Const m_iColumnsCount As Integer =  15 
Const m_iRowsCount As Integer =  30000 

Dim m_sMdbPath As String, m_sConnectionString As String

Public Sub Main()
    
    Debug.Print vbCrLf & "--- Columns = " & m_iColumnsCount & ", Rows = " & m_iRowsCount
    
    If Not CreateTestMDB Then Exit Sub
    ADODB_FillTable
    ADODB_ScanTable True
    ADODB_ScanTable False
    
    If Not CreateTestMDB Then Exit Sub
    DAO_FillTable
    DAO_ScanTable True
    DAO_ScanTable False
End Sub

Private Sub DAO_ScanTable(bSnapshot As Boolean)
    Dim db As DAO.Database, r As DAO.Recordset, ii As Long
    Dim tt As Single
    
    Set db = DAO.DBEngine.OpenDatabase(m_sMdbPath)
    
    tt = Timer
    
    Set r = db.OpenRecordset("SELECT * FROM Test", IIf(bSnapshot, dbOpenSnapshot, dbOpenDynaset))
    Do Until r.EOF
        ii = ii + r( 0 )
        r.MoveNext
    Loop

    Debug.Print "DAO:   ScanTable (" & IIf(bSnapshot, "Snapshot", "Dynaset") & " Cursor) " & Format$(Timer - tt, "#,##0.000")
End Sub

Private Sub ADODB_ScanTable(bClient As Boolean)
    Dim r As New ADODB.Recordset, cn As New ADODB.Connection, ii As Long
    Dim tt As Single
    
    Set cn = New ADODB.Connection
    cn.CursorLocation = IIf(bClient, adUseClient, adUseServer)
    cn.Open m_sConnectionString
    
    tt = Timer
    
    r.Open "SELECT * FROM Test", cn, adOpenStatic, adLockOptimistic
    Do Until r.EOF
        ii = ii + r( 0 )
        r.MoveNext
    Loop
    Debug.Print "ADODB: ScanTable (" & IIf(bClient, "Client", "Server") & " Cursor) " & Format$(Timer - tt, "#,##0.000")
End Sub

Private Sub DAO_FillTable()
    Dim db As DAO.Database, r As DAO.Recordset, i As Long, k As Integer
    Dim tt As Single
    
    Set db = DAO.DBEngine.OpenDatabase(m_sMdbPath)
    
    tt = Timer
    
    Set r = db.OpenRecordset("SELECT * FROM Test", dbOpenDynaset)
    
    DBEngine.BeginTrans
    For i =  1  To m_iRowsCount
        r.AddNew
        For k =  0  To m_iColumnsCount -  1 
            Select Case k Mod  3 
                Case  0 ,  1 : r(k) = i
                Case  2 : r(k) = i & " тестовая строчка " & k
            End Select
        Next k
        r.Update
    Next i
    DBEngine.CommitTrans

    Debug.Print "DAO:     DAO_FillTable           " & Format$(Timer - tt, "#,##0.000")
End Sub

Private Sub ADODB_FillTable()
    Dim cn As New ADODB.Connection, r As New ADODB.Recordset, i As Long, k As Integer
    Dim tt As Single
    
    Set cn = New ADODB.Connection
    cn.CursorLocation = adUseClient
    cn.Open m_sConnectionString
    
    tt = Timer
    
    cn.BeginTrans
    r.Open "SELECT * FROM Test", cn, adOpenStatic, adLockBatchOptimistic
    For i =  1  To m_iRowsCount
        r.AddNew
        For k =  0  To m_iColumnsCount -  1 
            Select Case k Mod  3 
                Case  0 ,  1 : r(k) = i
                Case  2 : r(k) = i & " тестовая строчка " & k
            End Select
        Next k
        r.Update
    Next i
    r.UpdateBatch
    cn.CommitTrans

    Debug.Print "ADODB: ADODB_FillTable           " & Format$(Timer - tt, "#,##0.000")
End Sub

Private Function CreateTestMDB() As Boolean
    Dim s As String, cat As New ADOX.Catalog, t As ADOX.Table, c As ADOX.Column, i As Long, j As Long
    
    m_sMdbPath = App.Path & "\Text.mdb"
    On Error Resume Next
    Kill m_sMdbPath
    On Error GoTo  0 
    
    On Error GoTo Err_
    Set cat = New ADOX.Catalog
    m_sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=""" & m_sMdbPath & """"
    cat.Create m_sConnectionString

    Set t = New ADOX.Table
    t.Name = "Test"
    For i =  1  To m_iColumnsCount
        Select Case i Mod  3 
            Case  1 : t.Columns.Append "F" & i, adInteger
            Case  2 : t.Columns.Append "F" & i, adDouble
            Case  0 : t.Columns.Append "F" & i, adVarWChar,  25 
        End Select
    Next i
    cat.Tables.Append t
    cat.Tables.Refresh
    CreateTestMDB = True
    Exit Function

Err_:
    MsgBox Err.Description, vbCritical
End Function
...
Рейтинг: 0 / 0
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
    #34172125
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MelkiadesЧто значит никакой? Access что, работает с базой mdb через ODBC или через OLEDB?
Я, конечно, не спец по Access, но имхо он работает с базой через собственное API, а не через этих провайдеров. Вот вам и разница.

Access вообще-то работает с базой через провайдер, который ему укажут.
Это был бы маразм для него собственное API работы с данными изобретать.
...
Рейтинг: 0 / 0
38 сообщений из 38, показаны все 2 страниц
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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