Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 615
  • Last Modified:

Performing Access query with Parameters from inside Excel

I need some help performing an access query in excel.
The access data is all in one table (and its about 3 million records) and I have the query with the right parameters set up and it works fine but I want to be able to run the query and get the data from excel because I have to perform several calculations on the data (so I don't want to build a form). I need the query to be dynamic - i.e. it chooses parameters from user entries in the worksheet.

I have tried using the get data "from other sources" through MS query, and it sort of works including looking up the parameters from the cells i tell it to, but it is painfully, painfully slow and sometimes the connections break.

Is there any other way, perhaps with some vba code or is the MS Query the only way?
0
mstringfield
Asked:
mstringfield
1 Solution
 
yuk99Commented:
This is how to do Access query in Excel by VBA:
http://support.microsoft.com/kb/q147739/
0
 
NatchiketCommented:
hi mstringfield, one option would be to use a recordset, however with over 3m records the results won't be blisteringly fast, however the excel range's copyfromrecordset method makes it fairly straightforward.  Here's some air code to give you an idea as to how it could be done.



Sub GetData()
Dim db as DAO.Database
Dim rst as DAO.Recordset
Dim strSQL as String
Dim wksD as Excel.WorkSheet   'Destination worksheet
Dim wksS as Excel.Worksheet   'Worksheet with parameters
Dim rng as Excel.Range
 
Set wksD = ActiveWorkbook.Worksheets("Data")
Set wksS = ActiveWorkbook.Worksheets("Source")
 
'Grab the database you want to get the data from
Set db = DAO.DBEngine.OpenDatabase("<full path of the db you want use>")
 
'Create the SQL to capture the data, you could modify this bit to dynamically alter the WHERE clause depending which parameters were specified.
strSQL = "SELECT <field1,field2,fieldn etc> FROM <the table you want to use> "
strSQL = strSQL & " WHERE field1=" & wksS.Cells(1,1)    'Pretending there is a parameter in A1 in the 'Source' sheet
 
'Open the recordset to capture the data
Set rst = db.Openrecordset(strSQL,dbOpenSnapshot)
 
'Plonk the data into Excel
Set rng = wksD.Cells(1,1)
rng.CopyFromRecordset rst
 
End Sub

Open in new window

0
 
mstringfieldAuthor Commented:
I found MS Query to be the best solution. I just needed to structure my query better. Another thing I was doing wrong was not saving the MS query inside the folder of the workbook and data set.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

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