Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Recordset в массив / 17 сообщений из 17, страница 1 из 1
10.02.2006, 14:51:23
    #33537235
timtim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Recordset в массив
Подскажите пожалуйста как передать Recordset(неизвестое кол-во строк и столбцов) в массив. И как с массивом работать? типа: подсчитать кол-во записей в определенном "столбце" массива, выдернуть нужные строки по нужному значению. Help!
...
Рейтинг: 0 / 0
10.02.2006, 16:41:03
    #33537739
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Recordset в массив
Что значит кол-во строк в столбце???? И чем плох Recordset сам по себе... ???
...
Рейтинг: 0 / 0
10.02.2006, 17:35:03
    #33537916
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Recordset в массив
Простейший способ (правда не без недостатков):
Код: 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
10.02.2006, 19:00:55
    #33538129
timtim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Recordset в массив
Смысл моей задумки:
из БД данные(которые нужны и уже с обработкой некоторой) можно выдернуть только одним запросом;

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

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

Подскажите правильным путем я иду.
...
Рейтинг: 0 / 0
10.02.2006, 19:12:19
    #33538148
Melkiades
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Recordset в массив
А почему для этого не использовать временные таблицы на сервере?
Кстати, у рекордсета есть методы Sort, Filter и Clone, так что зачем вам еще какие-то массивы нужны - непонятно.
...
Рейтинг: 0 / 0
10.02.2006, 19:36:51
    #33538189
timtim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Recordset в массив
Я просто не очень опытен и не знаю, как все сделать правильно.
А что это за временные таблицы на сервере и не сделаю ли я серверу "больно" создавая эти таблицы.
Clone-интересно как оно действует это как бы сделать Sort Filter, а потом все что отсортировано и отфильтровано поместить во временную таблицу?
Подскажите, пожалуйста, мне все это надо.
...
Рейтинг: 0 / 0
11.02.2006, 16:57:19
    #33538891
timtim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Recordset в массив
Код: 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
11.02.2006, 17:53:58
    #33538930
timtim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Recordset в массив
С заполнением массива чето накосячил. Тока что?
...
Рейтинг: 0 / 0
11.02.2006, 18:15:16
    #33538949
timtim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Recordset в массив
Допетрил:
Код: 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
13.02.2006, 12:26:03
    #33540473
Recordset в массив
Что-то, мне кажется, ты мудришь.

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

Код: 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
18.02.2006, 16:08:01
    #33553946
timtim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Recordset в массив
Вопрос назрел!
Как мне из массива Myarr(i,36) выбрать все уникальные записи?
...
Рейтинг: 0 / 0
20.02.2006, 09:57:15
    #33554961
Recordset в массив
Так.

Код: 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
20.02.2006, 13:30:33
    #33555659
timtim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Recordset в массив
Спасибо, получилось.
Использовал вариант №2.
...
Рейтинг: 0 / 0
20.02.2006, 19:23:30
    #33556911
timtim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Recordset в массив
Уважаемый Пользователь2!
Объясните пожалуйста что это:
Код: plaintext
Dim col As New Collection
и как эти Collection's можно использовать при разработке программ.
...
Рейтинг: 0 / 0
21.02.2006, 09:01:33
    #33557357
Recordset в массив
Создаем коллекцию (семейство). Создается также как и другие объекты. Представляет собой динамическую структуру данных, в которую можно добавлять и удалять элементы, не боспокоясь об изменении размерности и сохранности данных.

Объект 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
21.02.2006, 09:47:23
    #33557455
timtim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Recordset в массив
Спасибо за объяснение.
...
Рейтинг: 0 / 0
21.02.2006, 10:57:15
    #33557659
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Recordset в массив
Пользователь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
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Recordset в массив / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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