Результат SQL запроса в массив

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Результат SQL запроса в массив

Сообщение kuhtiov » 04.10.2015 (Вс) 18:06

доброго дня! Мне необходимо писать в массив результат SQL-запроса, для его последующей обработке.
Не уверен про способ, который выбран. У меня в примере данные в массив пишутся в цикле. Думаю, это не совеем правильно. Поправьте меня, пжлст

Код: Выделить всё
serverip = "192.168.0.6"
port = "3306"
datebasename = "rp_project"
user = "root"
password = ""
table_name = "users"

Set CNN = New Connection
CNN.ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};" _
                      & "SERVER=" & serverip & ";" _
                      & " DATABASE=" & datebasename & ";" _
                      & " PORT=" & port & ";" _
                      & "UID=" & user & ";PWD=" & password & "; OPTION=3"

CNN.Open , conn      'Opening the database
   Set rs = CNN.Execute("Select * From users")

   'rs.Open , conn
            'Debug.Print rs.Fields.Count
                Do While Not rs.EOF
                     i = i + 1
                     ' Тут пишем в массив
                     Rez (i) = rs.Fields(0).Value
            rs.MoveNext
            Loop
        rs.Close

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Результат SQL запроса в массив

Сообщение ger_kar » 04.10.2015 (Вс) 19:31

Ну вообще кроме обхода рекордсета в цикле есть и другие способы, например использовать метод рекордсета GetRows, который сразу выгружает содержимое рекордсета в массив.
GetRows Method

Retrieves multiple records of a Recordset object into an array.

Syntax:
array = recordset.GetRows( Rows, Start, Fields )

Return Value
Returns a two-dimensional array.

Parameters

Rows Optional. A Long expression indicating the number of records to retrieve. Default is adGetRowsRest (-1).

Start Optional. A String or Variant that evaluates to the bookmark for the record from which the GetRows operation should begin. You can also use one of the following BookmarkEnum values.

Constant Description
adBookmarkCurrent Start at the current record.
adBookmarkFirst Start at the first record.
adBookmarkLast Start at the last record.

Fields Optional. A Variant representing 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.

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.

Или вот на русском в сокращенном варианте
Помещает записи объекта Recordset в массив. Возвращает двумерный массив. Параметры:
Rows - необязательный. Единственно возможное значение и значение по умолчанию - adGetRowsRest(-1). Отыскивает все записи Recordset от текущей позиции или от закладки, указанной параметром Start.
Start - необязательный. Закладка (Bookmark), которая используется как начальная позиция для поиска.
Fields - необязательный. Имя или порядковая позиция поля, либо массив имен или порядковых позиций полей. ADO возвращает только данные из этих полей.
Бороться и искать, найти и перепрятать

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Re: Результат SQL запроса в массив

Сообщение kuhtiov » 04.10.2015 (Вс) 19:45

О, спасибо, не знал. Щас погуглю )

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Результат SQL запроса в массив

Сообщение ger_kar » 04.10.2015 (Вс) 19:55

kuhtiov писал(а):Set rs = CNN.Execute("Select * From users")
Я бы бы этот метод не использовал, дело в том, что при таком запросе возвращается рекордсет с настройками по умолчанию, причем для разных провайдеров доступа к данным они разные. Т.е. на выходе будет получаться не то что нужно, а как получится.
Лучше создавать рекордсет с конкретными настройками и открывать запрос через него.
Бороться и искать, найти и перепрятать

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Re: Результат SQL запроса в массив

Сообщение kuhtiov » 04.10.2015 (Вс) 20:04

Немного не понял. Имеется ввиду сам запрос
Код: Выделить всё
"Select * From users"
или целеком VBCode
Код: Выделить всё
Set rs = CNN.Execute("Select * From users")

Приведите пример, пожалуйста.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Результат SQL запроса в массив

Сообщение ger_kar » 04.10.2015 (Вс) 20:09

Имеется ввиду этот кусок кода- Set rs = CNN.Execute.
При таком раскладе возвращается уже открытый рекордсет с настройками "как получится".
Изменить такие настройки уже нельзя, так как рекордсет уже открыт.
Лучше создавать рекордсет, устанавливать его свойства, необходимые для данного случая и потом уже отрывать запрос непосредственно методом самого рекордсета.
Бороться и искать, найти и перепрятать


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 45

    TopList