Страница: 1 |
Страница: 1 |
Вопрос: Простой вопрос : сортировка с помощью ADODC, как?
Добавлено: 06.06.05 16:23
Автор вопроса: SerJEANt | ICQ: 3132838
Собственно сабж! Как использовать следующее: Adodc.Recordset.Sort ,а дальше что пишется? Или как-то по другому надо сортировать?
PS. База dbf
Ответы
Всего ответов: 8
Номер ответа: 1
Автор ответа:
Hunter2003
ICQ: 287314254
Вопросов: 14
Ответов: 72
Профиль | | #1
Добавлено: 15.06.05 09:06
Вот пример кода из Microsoft Data Access SDK 2.8:
'To integrate this code
'replace the data source and initial catalog values
'in the connection string
Public Sub Main()
On Error GoTo ErrorHandler
' connection and recordset variables
 im Cnxn As New ADODB.Connection
 im rstAuthors As New ADODB.Recordset
 im strCnxn As String
 im strSQLAuthors As String
 im strTitle As String
' Open connection
Set Cnxn = New ADODB.Connection
strCnxn = "Provider='sqloledb'ata Source='MySqlServer';" & _
"Initial Catalog='Pubs';Integrated Security='SSPI';"
Cnxn.Open strCnxn
' open client-side recordset to enable sort method
Set rstAuthors = New ADODB.Recordset
rstAuthors.CursorLocation = adUseClient
strSQLAuthors = "SELECT * FROM Authors"
rstAuthors.Open strSQLAuthors, Cnxn, adOpenStatic, adLockReadOnly, adCmdText
' sort the recordset last name ascending
rstAuthors.Sort = "au_lname ASC, au_fname ASC"
' show output
 ebug.Print "Last Name Ascending:"
 ebug.Print "First Name Last Name" & vbCr
rstAuthors.MoveFirst
 o Until rstAuthors.EOF
 ebug.Print rstAuthors!au_fname & " " & rstAuthors!au_lname
rstAuthors.MoveNext
Loop
' sort the recordset last name descending
rstAuthors.Sort = "au_lname DESC, au_fname ASC"
' show output
 ebug.Print "Last Name Descending"
 ebug.Print "First Name Last Name" & vbCr
 o Until rstAuthors.EOF
 ebug.Print rstAuthors!au_fname & " " & rstAuthors!au_lname
rstAuthors.MoveNext
Loop
' clean up
rstAuthors.Close
Cnxn.Close
Set rstAuthors = Nothing
Set Cnxn = Nothing
Exit Sub
ErrorHandler:
' clean up
If Not rstAuthors Is Nothing Then
If rstAuthors.State = adStateOpen Then rstAuthors.Close
End If
Set rstAuthors = Nothing
If Not Cnxn Is Nothing Then
If Cnxn.State = adStateOpen Then Cnxn.Close
End If
Set Cnxn = Nothing
If Err <> 0 Then
MsgBox Err.Source & "-->" & Err.Description, , "Error"
End If
End Sub
Либо задавай сортировку в SQL запросе.
Номер ответа: 2
Автор ответа:
SerJEANt
ICQ: 3132838
Вопросов: 10
Ответов: 38
Профиль | | #2
Добавлено: 17.06.05 14:55
Так, оки, другой вопрос, допустим сортируем базу mdb, пишем всего одну строчку кода: Adodc.Recordset.Sort "Имя_поля ASC"в данном случае по возрастанию) все сортируется, НО при выходе из программы данные в таблице вновь становятся не отсортированными, где копать?
PS. Такая сортировка "одной строкой" кстати почему-то не работает с базами dbf или я что-то опять перемудрил.
Номер ответа: 3
Автор ответа:
Hunter2003
ICQ: 287314254
Вопросов: 14
Ответов: 72
Профиль | | #3
Добавлено: 19.06.05 17:34
1. Так что же ты хочешь?!!! Рекордсет - это набор записей отобранный по какому либо критерию. Ты можешь удалять записи, изменять, добавлять и т.д. А сортировка влияет только на сам рекордсет, а не на физический набор записей в таблице. Если нужно сделать сортировку по какому либо полю в таблице, то кто тебе мешает юзать индексы?
2. Свойство Sort работает и на dbf. Прежде чем сортировать рекордсет нужно при подключении к базе указать на тип используемого курсора:
Adodc1.CursorLocation = adUseClient. А лучше всего скачай с мелкософта Microsoft Access SDK 2.8. Там все описано и с примерами.
P.S. Универсальнее всего сортировать рекордсет SQL-запросом.
Номер ответа: 4
Автор ответа:
SerJEANt
ICQ: 3132838
Вопросов: 10
Ответов: 38
Профиль | | #4
Добавлено: 20.06.05 10:54
Hunter2003
Не понял, что за индексы?
Adodc1.CursorLocation = adUseClient
Если мне не изменяет память, такой параметр установлен по умолчанию, так что дело не в этом.
Что-то никак не найду, у меня инет жутко тормозной... если бы кинули линк был был рад, не много ли он весит? А то мне более 50мегов врят ли потянуть и так неделю тянуть предется.
Если бы я еще знал как это делается В ACCESS понятное дело, но как в VB я себе не представляю.
Номер ответа: 5
Автор ответа:
SerJEANt
ICQ: 3132838
Вопросов: 10
Ответов: 38
Профиль | | #5
Добавлено: 20.06.05 10:58
Если я правильно понял, здесь что-то есть: http://vbnet.ru/forum/show.aspx?id=77222
Номер ответа: 6
Автор ответа:
SerJEANt
ICQ: 3132838
Вопросов: 10
Ответов: 38
Профиль | | #6
Добавлено: 20.06.05 11:39
Вот что-то нашел, не знаю то или нет, здесь правда почему-то SDK_2.6, а не 2.8 http://www.microsoft.com/downloads/details.aspx?FamilyID=cf5bf48d-9bbb-4ca2-9b03-4ee000db37ff&isplayLang=en
Номер ответа: 7
Автор ответа:
Hunter2003
ICQ: 287314254
Вопросов: 14
Ответов: 72
Профиль | | #7
Добавлено: 21.06.05 10:58
Microsoft Access SDK 2.8 лежит здесь: http://www.microsoft.com/downloads/details.aspx?FamilyID=5067faf8-0db4-429a-b502-de4329c8c850&displaylang=en
Весит он около 15 метров.
Индекс это физическая сортировка таблицы по определенному полю для обеспечения быстрого поиска (очень необходимо при наличии связанных таблиц). А также он обеспечивает контроль за задвоенными значениями на уровне ядра бызы данных. Как например Access для ключевого поля позволяет создать счетчик. Это удобно если записи удаляться не будут, иначе в значениях ключевого поля будут промежутки. Удобнее всего в VB генерить свой уникальный ключ и подставлять его при добавлении новых записей. Таким образом можно отслеживать и заполнять промежутки в значениях ключей.
Номер ответа: 8
Автор ответа:
Hunter2003
ICQ: 287314254
Вопросов: 14
Ответов: 72
Профиль | | #8
Добавлено: 21.06.05 11:07