Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Работа с данными

Страница: 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
Проверь соотношение времени запроса с ней и без нее.
полей (столбцов) в ней 71
- действительно столько нужно для вывода?
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
"SELECT data FROM F4031" 2.50 мин странно все это....

Замечательно!
Едем дальше..
  1.  
  2. Dim con2 As New ADODB.Connection
  3. con2.ConnectionString = "Driver={Microsoft Paradox Driver (*.db ....."
  4. con2.Open ' Время открытия?
  5.  
  6. Dim rc2 As ADODB.Recordset
  7. Set rc2 = con2.Execute("SELECT data FROM F4031")
  8. ' Время запроса?


Ответить

Номер ответа: 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

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам