powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Recordset в массив
17 сообщений из 17, страница 1 из 1
Recordset в массив
    #33537235
timtim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите пожалуйста как передать Recordset(неизвестое кол-во строк и столбцов) в массив. И как с массивом работать? типа: подсчитать кол-во записей в определенном "столбце" массива, выдернуть нужные строки по нужному значению. Help!
...
Рейтинг: 0 / 0
Recordset в массив
    #33537739
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что значит кол-во строк в столбце???? И чем плох Recordset сам по себе... ???
...
Рейтинг: 0 / 0
Recordset в массив
    #33537916
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простейший способ (правда не без недостатков):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
   Dim v As Variant
   v = rs.GetRows
   'Посмотрим результат...
   Dim i As Long, j As Long, s As String
   For i =  0  To UBound(v,  2 )
      For j =  0  To UBound(v,  1 )
         s = s & v(j, i) & vbTab
      Next
      If i >  10  Then Exit For
      s = s & vbCrLf
   Next
   MsgBox s
   'Как видим, столбцы и строки переместились...
Т.е. в полученном массиве строки - это второе измерение, столбцы - первое.
...
Рейтинг: 0 / 0
Recordset в массив
    #33538129
timtim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смысл моей задумки:
из БД данные(которые нужны и уже с обработкой некоторой) можно выдернуть только одним запросом;

на данный момент выдернутые данные обрабатываю в Excel (сортирую,
разношу по разным листам данные с определенным критерием);

хочется делать все без Excel(создавать массивы с данными которые я разношу по листам) и потом обрабатывать массивы;

Подскажите правильным путем я иду.
...
Рейтинг: 0 / 0
Recordset в массив
    #33538148
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему для этого не использовать временные таблицы на сервере?
Кстати, у рекордсета есть методы Sort, Filter и Clone, так что зачем вам еще какие-то массивы нужны - непонятно.
...
Рейтинг: 0 / 0
Recordset в массив
    #33538189
timtim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я просто не очень опытен и не знаю, как все сделать правильно.
А что это за временные таблицы на сервере и не сделаю ли я серверу "больно" создавая эти таблицы.
Clone-интересно как оно действует это как бы сделать Sort Filter, а потом все что отсортировано и отфильтровано поместить во временную таблицу?
Подскажите, пожалуйста, мне все это надо.
...
Рейтинг: 0 / 0
Recordset в массив
    #33538891
timtim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
[/src]Dim df()
Dim string_df As Integer
Dim rrr as integer
Set dbsNorthwind = OpenDatabase("c:\1.mdb")
    Set rst = dbsNorthwind.OpenRecordset("SELECT * FROM лист1")
rst.MoveLast
rst.MoveFirst
'Размерность массива
i =  47 
z = rst.RecordCount -  1 
'задаем размерность массива
ReDim df(z, i)
'заполнение массива
For f =  0  To rst.RecordCount -  1 
    For string_df =  1  To  46 
            df(f, string_df) = rst.Fields("поле" & string_df)
    Next string_df
Next f

For rrr =  1  To z
    If df(rrr,  10 ) = "Холодное пиво" Then MsgBox df(rrr,  37 )
Next rrr
set dbsNorthwind=Noting
[SRC vba]
Подскажите пожалуйста почему сдесь:
Код: plaintext
1.
2.
3.
[/src]For rrr =  1  To z
    If df(rrr,  10 ) = "Холодное пиво" Then MsgBox df(rrr,  37 )
Next rrr
[SRC vba]
не ищется запись "Холодное пиво" в массиве хотя такая запись в df(rrr, 10)есть.
...
Рейтинг: 0 / 0
Recordset в массив
    #33538930
timtim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С заполнением массива чето накосячил. Тока что?
...
Рейтинг: 0 / 0
Recordset в массив
    #33538949
timtim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допетрил:
Код: plaintext
1.
2.
3.
4.
5.
6.
For f =  0  To z 'rst.RecordCount - 1
    For string_df =  1  To  46 
            df(f, string_df) = rst.Fields("поле" & string_df)
    Next string_df
    rst.MoveNext
Next f
rst.MoveNext надо было вставить!
...
Рейтинг: 0 / 0
Recordset в массив
    #33540473
Что-то, мне кажется, ты мудришь.

Не проще ли так?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Sub RstToArray()
    Dim rst As DAO.recordset
    Dim avarData As Variant
    Dim intI As Integer
    
    Set rst = CurrentDb.OpenRecordset( _
      "SELECT * FROM tblCustomers", dbOpenSnapshot)
    
    rst.MoveLast
    rst.MoveFirst
    
    avarData = rst.GetRows(rst.RecordCount)
    
    For intI =  0  To UBound(avarData,  2 )
        If avarData( 1 , intI) = "Smith" Then _
          Debug.Print "Запись найдена в позиции"; intI
    Next intI
End Sub
...
Рейтинг: 0 / 0
Recordset в массив
    #33553946
timtim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос назрел!
Как мне из массива Myarr(i,36) выбрать все уникальные записи?
...
Рейтинг: 0 / 0
Recordset в массив
    #33554961
Так.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Sub X()
    Dim avarItems( 1  To  10 ) As Variant
    Dim col As New Collection
    Dim intI As Integer
    
    Randomize
    
    Debug.Print "Исходные данные:"
    
    On Error Resume Next
    
    For intI =  1  To  10 
        avarItems(intI) = Int(( 10  * Rnd) +  1 )
        Debug.Print avarItems(intI)
        col.Add avarItems(intI), CStr(avarItems(intI))
    Next intI
    
    Debug.Print "Уникальные записи:"
    
    For intI =  1  To col.Count
        Debug.Print col.Item(intI)
    Next intI
End Sub

Или так.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
Sub Y()
    Dim avarItems( 1  To  10 ) As Variant
    Dim avarItemsTemp( 1  To  10 ) As Variant
    Dim intI As Integer
    Dim intJ As Integer
    Dim intIdx As Integer
    Dim bln As Boolean
    
    Randomize
    
    intIdx =  1 
    
    Debug.Print "Исходные данные:"
    
    For intI =  1  To  10 
        avarItems(intI) = Int(( 10  * Rnd) +  1 )
        Debug.Print avarItems(intI)
    Next intI
    
    Debug.Print "Уникальные записи:"
    
    For intI =  1  To  10 
        For intJ =  1  To  10 
            If avarItems(intI) = avarItemsTemp(intJ) Then
                bln = True
                Exit For
            End If
        Next intJ
        If Not bln Then
            avarItemsTemp(intIdx) = avarItems(intI)
            Debug.Print avarItemsTemp(intIdx)
            intIdx = intIdx +  1 
        Else
            bln = False
        End If
    Next intI
End Sub
...
Рейтинг: 0 / 0
Recordset в массив
    #33555659
timtim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, получилось.
Использовал вариант №2.
...
Рейтинг: 0 / 0
Recordset в массив
    #33556911
timtim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый Пользователь2!
Объясните пожалуйста что это:
Код: plaintext
Dim col As New Collection
и как эти Collection's можно использовать при разработке программ.
...
Рейтинг: 0 / 0
Recordset в массив
    #33557357
Создаем коллекцию (семейство). Создается также как и другие объекты. Представляет собой динамическую структуру данных, в которую можно добавлять и удалять элементы, не боспокоясь об изменении размерности и сохранности данных.

Объект Collection имеет одной свойство, возвращающее число элементов набора и три метода.

В моем первом примере.

1.Dim col As New Collection
Создаем семейство.

2.col.Add avarItems(intI), CStr(avarItems(intI))
Добавляем новый элемент в семейство.
Присваиваем параметру Item число, и параметру Key тоже число в строковом эквиваленте.
Всвязи с тем, что в коллекцию нельзя добавить значение с тем же ключем, будут добавляться только значения с уникальным ключом. Ошибку, которая возникает при добавлении одинакового ключа предварительно обрабатываем с помощью оператора On Error Resume Next.

3. For intI = 1 To col.Count
Debug.Print col.Item(intI)
Next intI
Выводим элементы семейства.

За дополнительной информацией воспользуйся справкой.
...
Рейтинг: 0 / 0
Recordset в массив
    #33557455
timtim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за объяснение.
...
Рейтинг: 0 / 0
Recordset в массив
    #33557659
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пользователь2Создаем коллекцию (семейство). Создается также как и другие объекты. Представляет собой динамическую структуру данных, в которую можно добавлять и удалять элементы, не боспокоясь об изменении размерности и сохранности данных.

Объект Collection имеет одной свойство, возвращающее число элементов набора и три метода.

В моем первом примере.

1.Dim col As New Collection
Создаем семейство.

2.col.Add avarItems(intI), CStr(avarItems(intI))
Добавляем новый элемент в семейство.
Присваиваем параметру Item число, и параметру Key тоже число в строковом эквиваленте.
Всвязи с тем, что в коллекцию нельзя добавить значение с тем же ключем, будут добавляться только значения с уникальным ключом. Ошибку, которая возникает при добавлении одинакового ключа предварительно обрабатываем с помощью оператора On Error Resume Next.

3. For intI = 1 To col.Count
Debug.Print col.Item(intI)
Next intI
Выводим элементы семейства.

За дополнительной информацией воспользуйся справкой.

супер
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Recordset в массив
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]