Страница: 1 |
Страница: 1 |
Вопрос: Paradox в VB6
Добавлено: 10.12.08 12:11
Автор вопроса:
st_b
Помогите кто знает, вот с таким кодом отбор из базы (70000 записей) занимает 3 мин. что я сделал не так?
'новое соединение
Set con = New ADODB.Connection
' новый набор записей
Set rs = New ADODB.Recordset
' строка соединения
con = "CollatingSequence=ASCII;DefaultDir=;Driver={Microsoft Paradox Driver (*.db )};DriverId=538;FIL=Paradox 5.X;FILEDSN=C:\Program Files\Common Files\ODBC\Data Sources\Foxpro.dsn;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=600;ParadoxNetPath=C:\WINDOWS\system32;ParadoxNetStyle=4.x;ParadoxUserName=admin;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;"
con.Open con
mec=08 ' пример
With rs
.ActiveConnection = con
.CursorLocation = adUseClient
.CursorType = adOpenForwardOnly
.Source = "SELECT * FROM " & имя & " WHERE data like '%." & mec & "'" & " order by sch, data"
.Open
End With
Set Me.DataGrid1.DataSource = rs
Ответы
Всего ответов: 11
Номер ответа: 1
Автор ответа: Father
Вопросов: 0
Ответов: 159
Профиль | | #1
Добавлено: 11.12.08 12:39
два предположения:
1) like медленно работает - пересмотреть логику запроса
2) в переменной -имя- (которое кстати не продекларировано) содержатся имена двух и более таблиц и происходит их декартово перемножение.
Номер ответа: 2
Автор ответа: st_b
Вопросов: 5
Ответов: 9
Профиль | | #2
Добавлено: 11.12.08 13:23
Большое спасибо за ответ!!! Переменная “имя” описана, я просто не указал этот кусочек кода. (Private Sub Command1_Click()
Dim имя, dlin As String
Dim con As ADODB.Connection
Dim rs As ADODB.Recordset). Действительно like тормозит выполнение запроса, но мне кажется не на столько. Моя таблица F4041.db (одна), вот только полей (столбцов) в ней 71. Я просто уже не знаю что и делать, может использовать DAO (может будет быстрей?), хотя я не работал с DAO и не знаю тонкостей.
Номер ответа: 3
Автор ответа: Father
Вопросов: 0
Ответов: 159
Профиль | | #3
Добавлено: 11.12.08 13:41
Поле data - случайно не календарная дата? Не правильнее-ли в таком случае использовать MONTH(data)= " & mec ..., а не строковую функцию поиска like.
Закомментируй временно строку 'Set Me.DataGrid1.DataSource = rs
Проверь соотношение времени запроса с ней и без нее.
ADO или DAO - без разницы, чтобы кардинально ускорить выполнение запроса строить надо всё на ODBC API (см. SQLFetch и т.д.) и выводить в сетку, поддерживающую виртуальный режим отображения. Хотя 70000 записей это мало. Перематривай запрос, может заранее проиндексировать таблицу?
Номер ответа: 4
Автор ответа: st_b
Вопросов: 5
Ответов: 9
Профиль | | #4
Добавлено: 11.12.08 14:05
заремил Set Me.DataGrid1.DataSource = rs
Время выполнения rs.open:
.Source = "SELECT * FROM " & имя & " WHERE data like '%." & mec & "'" & " order by sch, data" 3 минуты
.Source = "SELECT * FROM F4031" 2.53 мин.
Номер ответа: 5
Автор ответа: Father
Вопросов: 0
Ответов: 159
Профиль | | #5
Добавлено: 11.12.08 14:22
И чтобы окончательно убедиться: "SELECT data FROM F4031" ?
Номер ответа: 6
Автор ответа: st_b
Вопросов: 5
Ответов: 9
Профиль | | #6
Добавлено: 11.12.08 14:46
"SELECT data FROM F4031" 2.50 мин странно все это....
Номер ответа: 7
Автор ответа: st_b
Вопросов: 5
Ответов: 9
Профиль | | #7
Добавлено: 11.12.08 14:53
Кстати импорт таблицы F4031 в Access 2003 занимает 2,50 Выполнение запроса 2 сек.
Номер ответа: 8
Автор ответа: Father
Вопросов: 0
Ответов: 159
Профиль | | #8
Добавлено: 11.12.08 15:10
Замечательно!
Едем дальше..
Номер ответа: 9
Автор ответа: st_b
Вопросов: 5
Ответов: 9
Профиль | | #9
Добавлено: 11.12.08 15:48
Даже не знаю....все это менше секунды..
Номер ответа: 10
Автор ответа: st_b
Вопросов: 5
Ответов: 9
Профиль | | #10
Добавлено: 12.12.08 15:08
получается что любые дальнейшие операции с rerordset проходят быстро....
Номер ответа: 11
Автор ответа: st_b
Вопросов: 5
Ответов: 9
Профиль | | #11
Добавлено: 15.12.08 14:45
Последний вопрос.....можно ли использовать BDE в VB6