powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
25 сообщений из 38, страница 1 из 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
25 сообщений из 38, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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