Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 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
    ;Dim Cnxn As New ADODB.Connection
    ;Dim rstAuthors As New ADODB.Recordset
    ;Dim strCnxn As String
    ;Dim strSQLAuthors As String
        
    ;Dim strTitle As String
        
    ' Open connection
    Set Cnxn = New ADODB.Connection
    strCnxn = "Provider='sqloledb';Data 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
    ;Debug.Print "Last Name Ascending:"
    ;Debug.Print "First Name Last Name" & vbCr
    
    rstAuthors.MoveFirst
    ;Do Until rstAuthors.EOF
        ;Debug.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
    ;Debug.Print "Last Name Descending"
    ;Debug.Print "First Name Last Name" & vbCr
    
    ;Do Until rstAuthors.EOF
        ;Debug.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

Если мне не изменяет память, такой параметр установлен по умолчанию, так что дело не в этом.
Microsoft Access SDK 2.8

Что-то никак не найду, у меня инет жутко тормозной... если бы кинули линк был был рад, не много ли он весит? А то мне более 50мегов врят ли потянуть и так неделю тянуть предется. :(
Универсальнее всего сортировать рекордсет SQL-запросом.

Если бы я еще знал как это делается :) В ACCESS понятное дело, но как в VB я себе не представляю.

Ответить

Номер ответа: 5
Автор ответа:
 SerJEANt



ICQ: 3132838 

Вопросов: 10
Ответов: 38
 Профиль | | #5 Добавлено: 20.06.05 10:58
SQL-запросом

Если я правильно понял, здесь что-то есть: 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&;DisplayLang=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
Если бы я еще знал как это делается :) В ACCESS понятное дело, но как в VB я себе не представляю


Adodc1.RecordSource = "SELECT * FROM таблица ORDER BY поле" ' по возрастанию


Adodc1.RecordSource = "SELECT * FROM таблица ORDER BY поле DESC" ' по убыванию

Ответить

Страница: 1 |

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



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