Как назначить значения наборов записей двумерному массиву

В настоящее время я работаю с Excel VBA и SQL-запросами. Я пытаюсь взять то, что я вложил в свой набор записей, и выгрузить его в двумерный массив, поэтому я могу использовать информацию в более поздней части функции. Проблема в том, что я знаю только два метода извлечения информации из наборов записей: CopyFromRecordset и rs.Fields.

Вот код, который я пытаюсь сделать.

Dim ID_Array(150, 2) As String Set rs = New ADODB.Recordset Set oConn = New ADODB.Connection strSql = "select id, name from groups" rs.Open strSql, oConn Do While Not rs.EOF With ActiveSheet For Index = 0 To 171 ID_Array(Index, 0) = CStr(rs.Fields(0).Value) 'Safety check to make sure the value isn't null (was having problems before) If rs.Fields(1).Value <> Null Then ID_Array(Index, 1) = CStr(rs.Fields(1).Value) End If rs.MoveNext Next End With Loop rs.Close 

Я уверен, что я не назначаю эти значения правильно, так как, когда я иду, чтобы вытащить их из набора записей, многие либо ошибаются, либо не появляются (часть имени, в частности, даже не отображается как строка в команде MsgBox, поэтому Я предполагаю, что это неправильно назначается).

У кого-нибудь есть опыт? Как сделать, я назначаю id-часть rs для первого измерения ID_Array и часть имени rs для второго измерения ID_Array?

Если вы используете ADODB.Recordset вам больше не нужен внутренний цикл.

Попробуйте использовать этот код, он должен работать:

 Dim ID_Array() As String Set rs = New ADODB.Recordset Set oConn = New ADODB.Connection strSql = "select id, name from groups" rs.Open strSql, oConn Index = 0 Do While Not rs.EOF 'With ActiveSheet 'For Index = 0 To 171 you dont need for..next, Do While Not rs.EOF show you record one by one ReDim Preserve ID_Array(1, Index) ID_Array(0, Index) = CStr(rs.Fields(0).Value) 'Safety check to make sure the value isn't null (was having problems before) If rs.Fields(1).Value <> vbNullString Then ID_Array(1, Index) = CStr(rs.Fields(1).Value) End If Index = Index + 1 rs.MoveNext 'Next 'End With Loop rs.Close End Sub 

Чтобы избежать ошибки NULL, обновите свой запрос, чтобы включить функцию NVL и заменить ее пробелом. Обрежьте свой .Value, и вы должны быть настроены. Обратите внимание, что замена пустой строкой [''] не работает. Также обратите внимание на требуемые форматированные поля db, такие как даты. Вы замените значение будет ошибкой, если не в соответствующих форматах.

NVL(SQL_FieldName,' ') как New_SQL_FieldName

  • Объединение таблицы Excel в базу данных SQL
  • OpenCsv | SQL | Записывает только заголовок, а не содержимое таблицы
  • Ошибка при совместном суммировании двух столбцов
  • Как экспортировать таблицу из Microsoft SQL Server в Excel?
  • VBA: Loop не работает так, как должно
  • Каковы некоторые решения для нормализации данных, которые имеют несколько значений, хранящихся в 1 ячейке?
  • Использование SQL для выбора пар записей из Access Database
  • Использование SQL Server для имитации логики EXCEL INT для DATE
  • Ошибка VBA to SQL
  • Как отслеживать изменения в MS SQL Server 2008
  • Конвертировать извлеченную дату из Excel в SQL-дату
  • Давайте будем гением компьютера.