Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы. / 25 сообщений из 38, страница 1 из 2
28.11.2006, 08:16
    #34159532
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
Или как сделать чтобы 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
28.11.2006, 09:16
    #34159614
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
Если база в сети, а клиент где-то, то может из-за трафика. Посмотри, ты же читаешь запись за записью по одной, она туда-сюда, туда-сюда за тридевять земель. Но это только догадка, т.к. ты не показал нам путь к базе. Или все-таки код разнится. База сидит там же, где и клиент?
И если ты делаешь для всех записей какое-то вычисление, то лучше это выпонить через SQL запрос, минуя цикл.
...
Рейтинг: 0 / 0
28.11.2006, 10:05
    #34159745
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
База локальна и в ней ~30 000 записей
...
Рейтинг: 0 / 0
28.11.2006, 10:12
    #34159768
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
Окрыть соединение с клиентским курсором, а рекордсет adOpenStatic.
...
Рейтинг: 0 / 0
28.11.2006, 10:22
    #34159796
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
Код: plaintext
1.
t1.CursorType = adOpenStatic
t1.Open basa_dbf, db, , , adCmdTable
по скорости ничего не изменилось из-за adOpenStatic
...
Рейтинг: 0 / 0
28.11.2006, 10:50
    #34159904
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
Два замечания для оптимизации этого:
1. Никогда не объявляйте рекордсет как Dim rs As New ADODB.Recodset
Всегда так:
Dim rs as ADODB.Recordset
Set rs = new ADODB.Recodset
Обращение к свойствам и методам рекордсета объявленного как As New - на три порядка медленниее. Это очень заметно в циклах по записям-полям.
2. Если надо вернуть эти записи обратно в БД, то лучше в запросе все манипуляции и сделать. Или возрващать записи не через рекордсет.
...
Рейтинг: 0 / 0
28.11.2006, 10:53
    #34159918
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
И еще:
Иногда бывает нужен сложный алгоритм по числу записей более 1000.
Есть смысл "перегнать" все это в массив (Type) и уже с ним работать.
Массив пользовательского типа данных работает примерно в 300-500 раз быстрее рекордсета.
...
Рейтинг: 0 / 0
28.11.2006, 10:57
    #34159930
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
Я так и делаю.
...
Рейтинг: 0 / 0
28.11.2006, 11:07
    #34159978
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
Кстати, да. Я и не посмотрел Кому советы даю.
Здесь два узких места:
1) Рекордсет, обращения к полям которого очччень медленные (относительно). Слишком много событий он генерит.
2) Процессное взаимодействие. Между БД и приложением VB будет столько межпроцессных вызовов сколько записей в рекордсете. Надо все записи одним вызовом послать туда. Тогда будет сравнимо по скорости с Аксесс.
...
Рейтинг: 0 / 0
28.11.2006, 12:15
    #34160290
blinow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
Ну вот, опять одно по одному.
Вы не то сравниваете.
Access надо сравнивать например с FoxPro, даже с SQLями не годится его сравнивать
...
Рейтинг: 0 / 0
28.11.2006, 12:33
    #34160366
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
WorobjoffНадо все записи одним вызовом послать туда. Тогда будет сравнимо по скорости с Аксесс.
Так как таблицу или запрос отправить, скажем, во многомерный массив, например?
...
Рейтинг: 0 / 0
28.11.2006, 12:34
    #34160376
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
Люди дорые помогите! Не дайте отказаться от VB6 и перейти на Access.
...
Рейтинг: 0 / 0
28.11.2006, 12:42
    #34160420
Random_Goodman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
Дотнет - панацея от всех бед.
...
Рейтинг: 0 / 0
28.11.2006, 12:51
    #34160467
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
Что надо сделать над записями?
Сколько записей надо обработать?
...
Рейтинг: 0 / 0
28.11.2006, 12:56
    #34160485
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
Random_GoodmanДотнет - панацея от всех бед.Не во всяком дотнет. Блочная вставка таблиц появилась лишь в 2.0.
...
Рейтинг: 0 / 0
28.11.2006, 13:04
    #34160526
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
Есть Таблица1 - список деталей. ~30 000 записей
Есть Таблица2 - список деталей которые надо удалить из Таблицы1
Удалить надо 20-30 кодов деталей из Таблицы1.
Мой гениальный алгоритм:
1 . Читаю Таблица1
2. Ищу соответствующий код детали в Таблице2
3. Если нашёл, то запись из Таблицы1 отмечаю для удаления ( только отмечаю )
4. Go to на метку 1 .
...
Рейтинг: 0 / 0
28.11.2006, 13:07
    #34160541
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
А почему нельзя выполнить запрос?
Код: plaintext
DELETE Table1 WHERE ID in (SELECT ID FROM Table2)
...
Рейтинг: 0 / 0
28.11.2006, 13:09
    #34160546
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
или
UPDATE Table1 SET IsDeleted = true WHERE ID in (SELECT ID FROM Table2 )
...
Рейтинг: 0 / 0
28.11.2006, 13:16
    #34160581
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
Дело в том, что я должен анализировать!
Сколько деталей я удалил из Таблицы 1
Сколько деталей я не нашёл в Таблице 1
...
Рейтинг: 0 / 0
28.11.2006, 13:26
    #34160641
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
Было что-то подобное в моей работе.
Оптимизировал так:
- Рекордсет перегнал в массив Type. (ускорение анализа)
- Возвращал результат в БД так:
Код: plaintext
 Conn.Execute "UPDATE Table1 SET Fld1 = true WHERE ID in (" & strToDeltete & ")", MyAffectedRecords
MyAffectedRecords - это сколько записей удалилось фактически.
Известно и то сколько запрошено на удаление.
...
Рейтинг: 0 / 0
28.11.2006, 13:34
    #34160685
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
А как перегнать RecordSet в массив? Примерчик бы!
Благодарю за запросы (см. выше). Что называется навёл на мысль!
...
Рейтинг: 0 / 0
28.11.2006, 13:50
    #34160754
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
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
28.11.2006, 13:56
    #34160781
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
Vorobjoff. Классно! Благодарю!
...
Рейтинг: 0 / 0
28.11.2006, 14:10
    #34160843
_bob
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
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
28.11.2006, 15:48
    #34161239
PA
PA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
klen_А как перегнать RecordSet в массив? Примерчик бы!
GetRows Method
GetRows Method Example
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы. / 25 сообщений из 38, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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