2016-04-05 5 views
0

Я не могу понять это, я запускаю инструкцию в управлении SQL Server и возвращает все наборы записей, но когда я запускаю то же самое заявление через код, он всегда возвращает только первый набор данных.Запрос SQL Server возвращает только 1 строку

Я пробовал такой же простой оператор SELECT в SQL Fiddle, и он работает так, как должен, что может быть причиной этого?

Вот SQL Fiddle, чтобы продемонстрировать, что я пытаюсь сделать

SELECT column1, column2 
FROM Table1 
WHERE column2 = '1234'; 

Путь данные должны выглядеть,

|column1(nvarchar(50)) | column2(nvarchar(50))| 
----------------------------------------------- 
|Section1    | 1234     | 
|Section2    | 1234     | 
|Section3    | 1234     | 
|Section3    | 1234     | 
----------------------------------------------- 

Путь заканчивается после выполнения кода.

|column1(nvarchar(50)) | column2(nvarchar(50))| 
----------------------------------------------- 
|Section1    | 1234     |  
----------------------------------------------- 

Код, который я использую.

Dim conn As ADODB.Connection 
    Dim rs As ADODB.Recordset 
    Dim sConnString As String 
    sConnString = "PROVIDER=SQLOLEDB;" & _ 
            "Data Source=190.190.10.XXX,1433;" & _ 
            "Initial Catalog=my_DB;" & _ 
            "User Id=sa;" & _ 
            "Password=my_Password;" 

       Set conn = New ADODB.Connection 
       Set rs = New ADODB.Recordset    
       conn.Open sConnString 
     strSQL = "SELECT Section_Data, Words_Data FROM Words_TBL WHERE Words_Data = '1234'"      
          rs.Open strSQL 
          If rs.EOF = False Then 
           x = rs.GetRows 
          Else 

          For i = LBound(x) To UBound(x) 
            Debug.Print x(i, 0) 
          Next i 
+2

Вы можете показать нам свой код? – Squirrel

+0

Вы попросили нас рассказать вам, почему ваш код не работает, без включения вашего кода. Как вы думаете, что мы можем помочь? –

+0

Мое плохое, я должен был положить его. Будет делать. –

ответ

1

Используйте метод GetRows для копирования записей из Recordset в двумерного массива. В первом индексе идентифицируется поле и второй идентифицирует номер записи. Переменная массива равна , автоматически определяемая до нужного размера, когда метод GetRows возвращает данные.

For i = LBound(x) To UBound(x) 
    Debug.Print x(i, 0) 
Next i 

должен быть

For i = LBound(x, 2) To UBound(x, 2) 
    Debug.Print x(0, i) 
Next i 
+0

Я не могу поверить в это, я не должен надуть голову , Я использовал цикл для массива рабочих таблиц, а не массив Get-rows.У меня есть сотни этих утверждений, используя массив GetRows, и я был настолько сосредоточен на SQL-заявлении, что забыл о цикле. Спасибо, что исправил это. Реп для тебя Тим. –

0

Я хотел бы использовать метод CopyFromRecordset для копирования всех данных в диапазоне. Гораздо быстрее, но сначала нужно создать все заголовки полей для создания заголовков.

Смежные вопросы