Сортировка не работает с использованием dbOpenDynaset в VBA - PullRequest
0 голосов
/ 28 апреля 2020

Как мне отсортировать название вина в порядке c, используя dbOpenDynaset

Вот мой код VBA

Dim critère As String
Dim strFormateDesNomVins As String

Dim maBase       As Database
Dim tblVins      As Recordset

Set maBase = CurrentDb()
Set tblVins = maBase.OpenRecordset("tblVins", dbOpenDynaset)

critère = "[NoTypeVin]=" & typeVin
tblVins.Sort = "NomVin ASC"
tblVins.FindFirst critère
Do Until tblVins.NoMatch
     strFormateDesNomVins = strFormateDesNomVins & tblVins!NomVin & vbCrLf
    tblVins.FindNext critère
Loop

Эта часть кода не работает

tblVins.Sort = "NomVin ASC"

Я хочу отсортировать название вина по порядку c. Как это сделать с помощью dbOpenDynaset Спасибо за вашу помощь.

Ответы [ 2 ]

1 голос
/ 28 апреля 2020

Вместо того, чтобы пытаться использовать .Sort и .FindFirst/.FindNext, лучше открыть набор записей, который уже отфильтрован и упорядочен так, как вы хотите:

Sub sWine()
    Dim db As DAO.Database
    Dim rsData As DAO.Recordset
    Dim strSQL As String
    Dim strFormateDesNomVins As String
    Dim typeVin As Long
    typeVin = 1
    Set db = DBEngine(0)(0)
    strSQL = "SELECT NomVin FROM tblVins WHERE NoTypeVin=" & typeVin & " ORDER BY NomVin ASC;"
    Set rsData = db.OpenRecordset(strSQL, dbOpenDynaset)
    If Not (rsData.BOF And rsData.EOF) Then
        Do
            strFormateDesNomVins = strFormateDesNomVins & rsData!NomVin & vbCrLf
            rsData.MoveNext
        Loop Until rsData.EOF
    End If
    Debug.Print strFormateDesNomVins
    rsData.Close
    Set rsData = Nothing
    Set db = Nothing
End Sub

В приведенном выше примере я создаю набор записей, основанный на tblVins, отсортированный по NomVin и имеющий только записи, в которых NoTypeVin равен typeVin (в данном случае 1). Привет

1 голос
/ 28 апреля 2020

Это работает, но вы должны назначить отсортированный набор записей (новому) и затем использовать это:

tblVins.Sort = "NomVin ASC"
Set tblVins = tblVins.OpenRecordset()

или:

Set tblVinsSorted = tblVins.OpenRecordset()

или создать его отсортированным изначально:

Set tblVins = maBase.OpenRecordset("Select * From tblVins Order By NomVin", dbOpenDynaset)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...