• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 857
  • Last Modified:

How to fetch the data from SQLSERVER in an array in VBA EXCEL instead to display it in worksheet

Hi,



My question is simple for EE used to EXCEL VBA
I want to get the data from SQLSERVER in an array instead to display
it in the worksheet
My code works to select the data and display it in the EXCEL worksheet
it is done via this command

 ThisWorkbook.Sheets("my_sheet").Range("D7").CopyFromRecordset rst

Open in new window



Can Someone tell me how to fetch the rst in an array inside the macro VBA please?

Thanks Dave
 Sub load_users()


    Dim cnn As ADODB.Connection

    Dim connectionString As String   Dim rst1 As ADODB.Recordset
    Dim rst2 As ADODB.Recordset
 
   Dim strSQL As String
     
    Dim User_ID As String
    Dim User_PWD As String
    Dim Initial_Catalog As String 'Nom de la base de données
    Dim Workstation_ID As String
    Dim Data_Source As String
    
    Application.ScreenUpdating = False
    
    On Error GoTo Verif_Connexion
    User_ID = "my login " '"SYGES"   
    User_PWD = "my password" ' "SYGES2014"  
    Initial_Catalog = "DATABASE"  
    Data_Source = "url"  
    Workstation_ID = "url"  '
      
    Set cnn = New ADODB.Connection
    connectionString = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=" & User_ID & ";PWD=" & User_PWD & ";Initial Catalog=" & Initial_Catalog & ";Data Source=" & Data_Source & ";Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=" & Workstation_ID & ";Use Encryption for Data=False;Tag with column collation when possible=False;"
    
    ThisWorkbook.Sheets("my_sheet").Range("A2:AZ65536").Value = ""
    
    strSQL = "select login, password from MYTABLE  "
   
    cnn.Open connectionString

    Set rst = cnn.Execute(strSQL)
    

    ThisWorkbook.Sheets("my_sheet").Activate


    ' HERE IS MY QUESTION
    'This put the result in the worksheet
    'I would like to have it in an array inside the code instead to displa it in the worksheet

    ThisWorkbook.Sheets("my_sheet").Range("D7").CopyFromRecordset rst
    

     
    rst.Close
    cnn.Close
    Set rst = Nothing
    Set cnn = Nothing
     
end sub

Open in new window

0
DavidInLove
Asked:
DavidInLove
  • 3
  • 2
3 Solutions
 
Rgonzo1971Commented:
Hi,

pls try

arrRecordArray = rst.GetRows

Open in new window

Regards
0
 
DavidInLoveAuthor Commented:
Hi,


I've tried to code something but it doesn't work.


' I declare the array as Variant
  Dim arrRecordArray As Variant


    Set rst = cnn.Execute(strSQL)
    
 arrRecordArray = rst.GetRows

MsgBox (arrRecordArray(0))

Open in new window



I just would like to do the same as the following working in PHP


    $res_query  = mssql_query ($req);			
		$row_donTot=mssql_num_rows($res_query);	
  	  while($tab=mssql_fetch_array($res_query)){		
  	   $niveau1[$cpt++]=$tab['niveau1']; 		
  	  }		

Open in new window


So if SO could give me the code to fetch

Thanks Dave
0
 
Rory ArchibaldCommented:
The returned array will be two dimensional with fields as 'rows' and records as 'columns' so you have to supply both indices.
0
Prepare for your VMware VCP6-DCV exam.

Josh Coen and Jason Langer have prepared the latest edition of VCP study guide. Both authors have been working in the IT field for more than a decade, and both hold VMware certifications. This 163-page guide covers all 10 of the exam blueprint sections.

 
DavidInLoveAuthor Commented:
Still doesn't work:

Since I am not good at VBA maybe the way to fetch the data in array I did is wrong:




 Dim arrRecordArray As Variant
    Set rst = cnn.Execute(strSQL)
 arrRecordArray = rst.GetRows

MsgBox (arrRecordArray(1)(1))

Open in new window

0
 
Rory ArchibaldCommented:
MsgBox arrRecordArray(1, 1)

Open in new window

is how you specify both indices.
0
 
DavidInLoveAuthor Commented:
Ok Thanks to you.
0

Featured Post

Fill in the form and get your FREE NFR key NOW!

Veeam is happy to provide a FREE NFR server license to certified engineers, trainers, and bloggers.  It allows for the non‑production use of Veeam Agent for Microsoft Windows. This license is valid for five workstations and two servers.

  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now