Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel - данные из внешнего источника в массив как? / 19 сообщений из 19, страница 1 из 1
05.06.2007, 16:35:30
    #34575649
Dimy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - данные из внешнего источника в массив как?
в макросе экселя необходимо получить данные из внешнего источника (например mssql) и положить их не на лист, а в массив для дальнейшей обработки.
в данный момент использую querytable, хотелось бы сразу в массив.
...
Рейтинг: 0 / 0
05.06.2007, 16:43:52
    #34575678
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - данные из внешнего источника в массив как?
Код: plaintext
array = recordset.GetRows( Rows, Start, Fields )
I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
06.06.2007, 10:54:36
    #34577057
Dimy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - данные из внешнего источника в массив как?
[quot HandKot]
Код: plaintext
array = recordset.GetRows( Rows, Start, Fields )
данная функция работает только через DAO, а есть ли другие варианты, чтобы через oledb provider?
...
Рейтинг: 0 / 0
06.06.2007, 11:19:17
    #34577124
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - данные из внешнего источника в массив как?
Мож чё не то говорю, но если просто массив заполнить? не пойдёт?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Sub sad()
 Dim x&, y&
 Dim MyArray( 10 ,  10 ) As Variant
    For x =  1  To  10 
     For y =  1  To  10 
      MyArray(x, y) = ... 'здесь что угодно
     Next y
    Next x
End Sub
...
Рейтинг: 0 / 0
06.06.2007, 11:26:52
    #34577150
Dimy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - данные из внешнего источника в массив как?
DeggasadМож чё не то говорю, но если просто массив заполнить? не пойдёт?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Sub sad()
 Dim x&, y&
 Dim MyArray( 10 ,  10 ) As Variant
    For x =  1  To  10 
     For y =  1  To  10 
      MyArray(x, y) = ... 'здесь что угодно
     Next y
    Next x
End Sub


не пойдет, т.к. в массив нужно запихнуть результат sql-запроса неопределенной длины, желательно через oledb
...
Рейтинг: 0 / 0
06.06.2007, 12:50:22
    #34577372
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - данные из внешнего источника в массив как?
Dimy DeggasadМож чё не то говорю, но если просто массив заполнить? не пойдёт?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Sub sad()
 Dim x&, y&
 Dim MyArray( 10 ,  10 ) As Variant
    For x =  1  To  10 
     For y =  1  To  10 
      MyArray(x, y) = ... 'здесь что угодно
     Next y
    Next x
End Sub


не пойдет, т.к. в массив нужно запихнуть результат sql-запроса неопределенной длины, желательно через oledb
Я не знаю что такое oledb.
Ну а если узнать сначала длинну!
...
Рейтинг: 0 / 0
06.06.2007, 14:13:38
    #34577751
OLAPER2005
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - данные из внешнего источника в массив как?
А может так?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
    With Range("Query1").QueryTable
        .Refresh BackgroundQuery:=False
    End With

With Range("Query1")
i2 = Range("Query1").Row
i3 = Range("Query1").Rows.Count
j2 = Range("Query1").Column
j3 = Range("Query1").Columns.Count
End With
If Range("Query1").QueryTable.FieldNames Then
i2 = i2 +  1 
i3 = i3 -  1 
End If


ReDim a( 1  To i3,  1  To j3)
For i =  1  To i3
For j =  1  To j3
a(i, j) = Cells(i + i2 -  1 , j + j2 -  1 )
Next j
Next i
...
Рейтинг: 0 / 0
06.06.2007, 16:06:37
    #34578280
Dimy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - данные из внешнего источника в массив как?
OLAPER2005А может так?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
    With Range("Query1").QueryTable
        .Refresh BackgroundQuery:=False
    End With

With Range("Query1")
i2 = Range("Query1").Row
i3 = Range("Query1").Rows.Count
j2 = Range("Query1").Column
j3 = Range("Query1").Columns.Count
End With
If Range("Query1").QueryTable.FieldNames Then
i2 = i2 +  1 
i3 = i3 -  1 
End If


ReDim a( 1  To i3,  1  To j3)
For i =  1  To i3
For j =  1  To j3
a(i, j) = Cells(i + i2 -  1 , j + j2 -  1 )
Next j
Next i


так не пойдет, т.к. querytable подразумевает вывод результата запроса на лист, в данном примере массив считывается с листа, а хотелось бы сразу результаты запроса в массив запихнуть
...
Рейтинг: 0 / 0
06.06.2007, 17:00:54
    #34578511
vbapro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - данные из внешнего источника в массив как?
можно через ADO (это фрагмент класса, подключения здесь нет):
Код: 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.
Property Get CoutryList() As String()
'возвращаем названия всех стран
Dim SQL As String
Dim COUNTRYID As Long
Dim CountryArray() As String
Dim ArrayIndex As Long

    SQL = "SELECT COUNTRY FROM COUNTRIES;"
        
    rs.Open SQL, lclCn
    
    ReDim CountryArray( 1 )
    ArrayIndex = LBound(CountryArray)
    
    Do Until rs.EOF
        CountryArray(ArrayIndex) = rs!Country
        ArrayIndex = ArrayIndex +  1 
        ReDim Preserve CountryArray(ArrayIndex)
        rs.MoveNext
    Loop
    
'    убираем лишний последний пустой элемент
    ReDim Preserve CountryArray(ArrayIndex -  1 )
    CoutryList = CountryArray
    If Not rs.State = adStateClosed Then rs.Close
End Property
...
Рейтинг: 0 / 0
06.06.2007, 17:09:15
    #34578564
f
f
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - данные из внешнего источника в массив как?
А чем вам рекордсет не массив ?
...
Рейтинг: 0 / 0
06.06.2007, 17:15:38
    #34578600
OLAPER2005
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - данные из внешнего источника в массив как?
Тогда я не понял смысл вопроса.
Доступ к данным м.б. либо через querytable либо через ADO.
ADO почему-то не подходит.

Из queryTable в массив никак не запихнуть.

Используйте ADO.

Где-то так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
i3=RS.RecordCount- 1 
i= 1 
while not eof
for j= 1  To RS.Fields.Count
a(i,j)=RS.Fields(j)

i=i+ 1 
RS.MoveNext
wend

...
Рейтинг: 0 / 0
08.06.2007, 14:02:12
    #34583986
Dimy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - данные из внешнего источника в массив как?
OLAPER2005Тогда я не понял смысл вопроса.
Доступ к данным м.б. либо через querytable либо через ADO.
ADO почему-то не подходит.

Из queryTable в массив никак не запихнуть.

Используйте ADO.

...

ок, так и сделал (через oledb)


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Dim cnt As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim myArray As Variant

cnt.Open "Provider=SQLOLEDB.1;Password=psw;User ID=user;Data Source=sqlserv;Initial Catalog=sqlbase"
rst.Open "select column1, column2 from table1", cnt

myArray = rst.GetRows

rst.Close
cnt.Close
...

ну а дальше с myArray делаю что хочу ... :)
...
Рейтинг: 0 / 0
08.06.2007, 18:20:59
    #34584965
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - данные из внешнего источника в массив как?
Dimy[quot HandKot]
Код: plaintext
array = recordset.GetRows( Rows, Start, Fields )
данная функция работает только через DAO, а есть ли другие варианты, чтобы через oledb provider?
точно?
а я думал через ADO тоже

Код: 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.
ADO API Reference   
GetRows Method
Retrieves multiple records of a Recordset object into an array.

Syntax
array = recordset.GetRows( Rows, Start, Fields )
Return Value
Returns a Variant whose value is a two-dimensional array.

Parameters
Rows 
Optional. A GetRowsOptionEnum value that indicates the number of records to retrieve. The default is adGetRowsRest. 
Start 
Optional. A String value or Variant that evaluates to the bookmark for the record from which the GetRows operation should begin. You can also use a BookmarkEnum value. 
Fields 
Optional. A Variant that represents a single field name or ordinal position, or an array of field names or ordinal position numbers. ADO returns only the data in these fields. 
Remarks
Use the GetRows method to copy records from a Recordset into a two-dimensional array. The first subscript identifies the field and the second identifies the record number. The array variable is automatically dimensioned to the correct size when the GetRows method returns the data.

If you do not specify a value for the Rows argument, the GetRows method automatically retrieves all the records in the Recordset object. If you request more records than are available, GetRows returns only the number of available records.

If the Recordset object supports bookmarks, you can specify at which record the GetRows method should begin retrieving data by passing the value of that record's Bookmark property in the Start argument.

If you want to restrict the fields that the GetRows call returns, you can pass either a single field name/number or an array of field names/numbers in the Fields argument.

After you call GetRows, the next unread record becomes the current record, or the EOF property is set to True if there are no more records.

See Also
Visual Basic Example | Visual C++ Example | Visual J++ Example

Applies To: Recordset Object
...
Рейтинг: 0 / 0
08.06.2007, 18:44:23
    #34585016
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - данные из внешнего источника в массив как?
HandKot Dimy[quot HandKot]
Код: plaintext
array = recordset.GetRows( Rows, Start, Fields )
данная функция работает только через DAO, а есть ли другие варианты, чтобы через oledb provider?
точно?
а я думал через ADO тоже


Автор топика уже сам пришёл к этому и в предыдущем посте выложил пример с его применением!
...
Рейтинг: 0 / 0
08.06.2007, 19:42:29
    #34585117
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - данные из внешнего источника в массив как?
Dimyок, так и сделал (через oledb)Вообще-то, ты сделал это через ADO а не через OLE DB. Ты никак не сможешь работать в Бейсике с OLE DB :)
...
Рейтинг: 0 / 0
09.06.2007, 09:33:58
    #34585575
Dimy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - данные из внешнего источника в массив как?
White OwlВообще-то, ты сделал это через ADO а не через OLE DB. Ты никак не сможешь работать в Бейсике с OLE DB :)

см. внимательнее строку коннекта в моем примере :)
...
Рейтинг: 0 / 0
11.06.2007, 17:59:00
    #34588633
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - данные из внешнего источника в массив как?
Dimy White OwlВообще-то, ты сделал это через ADO а не через OLE DB. Ты никак не сможешь работать в Бейсике с OLE DB :)см. внимательнее строку коннекта в моем примере :)Читай внимательнее документацию.
ADO всегда использует какой-либо транспорт, либо ODBC, либо OLE DB. Определяется это при помощи задания проперти Provider либо через ключевое слово Provider в строке коннекта.
А чтобы точно узнать каким интерфейсом пользуется программа достаточно посмотреть на тип переменных коннекта/резалтсета:
Код: plaintext
1.
Dim cnt As New ADODB.Connection
Dim rst As New ADODB.Recordset
...
Рейтинг: 0 / 0
13.06.2007, 08:49:54
    #34590630
Dimy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - данные из внешнего источника в массив как?
White Owl Dimy White OwlВообще-то, ты сделал это через ADO а не через OLE DB. Ты никак не сможешь работать в Бейсике с OLE DB :)см. внимательнее строку коннекта в моем примере :)Читай внимательнее документацию.
ADO всегда использует какой-либо транспорт, либо ODBC, либо OLE DB. Определяется это при помощи задания проперти Provider либо через ключевое слово Provider в строке коннекта.
А чтобы точно узнать каким интерфейсом пользуется программа достаточно посмотреть на тип переменных коннекта/резалтсета:
Код: plaintext
1.
Dim cnt As New ADODB.Connection
Dim rst As New ADODB.Recordset


ну дык это и ежу понятно, что ADO! а провайдер - OLE DB именно об этом и шла речь - о провайдере
...
Рейтинг: 0 / 0
13.06.2007, 17:57:51
    #34592797
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - данные из внешнего источника в массив как?
Dimyну дык это и ежу понятно, что ADO! а провайдер - OLE DB именно об этом и шла речь - о провайдереУважаемый ежик, не надо путать транспорт и интерфейс. Твоей программе совершенно до лампочки какой там провайдер. Ты можешь заменить строку подключения и остальная программа ничего не заметит. Как работал метод GetRows так и будет работать. Потому что это метод интерфейса а не транспорта.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel - данные из внешнего источника в массив как? / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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