Solved

Function to import a query as a Table

Posted on 2008-06-11
4
742 Views
Last Modified: 2013-11-27
I have an Access Database that uses a snapshot query for ad hoc reports.  I do not want this user going into the Production Database to create new queries against this Query.  I know you can import a query as a Table.  How can I through a Function import a query as a Table from another database and replace the existing Table automatically.

Example the Table in my reporting database that comes from another database's query is named MainRecords_Snapshot.

The query in the database H:\Trucking\2007_SubmissionLog\Database\061008_Trucking_Submission_Log_NewChanges.mdb is named MainRecords_Snapshot

I run the function and it imports the query MainRecords_Snapshot from H:\Trucking\2007_SubmissionLog\Database\061008_Trucking_Submission_Log_NewChanges.mdb and replaces the Table MainRecords_Snapshot without prompts in my reporting database.

How can I do this?  Thanks
0
Comment
Question by:quizzer
  • 2
4 Comments
 
LVL 77

Expert Comment

by:peter57r
Comment Utility
Why not create a base query (also must be set as a snapshot query) in the 'reporting' database that uses the snapshot query in the other database.

SELECT * FROM thesnapshotquery In "c:\myfolder\OtherDB.mdb"

0
 
LVL 27

Expert Comment

by:MikeToole
Comment Utility
The attached routine should point the way.
If your table layout is going to stay constant then it would probably be better to delete all records and append the new ones rather than removing and recreating the table as the example shows.
Sub ImportQueryAsTable()

    Const cLocalTable As String = "SupplierLookUp"

    Const cSourceDB As String = "'C:\Users\Miket\Documents\Technical\Northwind 2007.accdb'"

    Const cSourceQuery As String = "qrySuppliers"

    Dim strSQL As String

    strSQL = "SELECT * INTO " & cLocalTable & " FROM " & cSourceQuery & " IN " & cSourceDB

    ' Ignore any error thrown if table doesn't already exist

    On Error Resume Next

    CurrentDb.TableDefs.Delete cLocalTable

    ' switch back to default error handling

    On Error GoTo 0

    DoCmd.SetWarnings False

    DoCmd.RunSQL strSQL

    DoCmd.SetWarnings True

End Sub

Open in new window

0
 
LVL 30

Accepted Solution

by:
hnasr earned 125 total points
Comment Utility
Here is a try:
Remote database: C:\ManageRemote\db2.mdb
in db2, create a table t
field1      field2      field3
A      10      X
B      20      Y
C      30      Z

and a query q based on t

Select * from t;

The code snipped will create table q1t in local database populated with the result of q
Button Click event to run the code Snippet that follows.




Private Sub ManageRemoteDB_Click()
 

    Dim dfws As Workspace

    Dim rdb As Database 'remote database

    Dim rrs As Recordset 'remote record set

    Dim fld As Integer

    

    Set dfws = DBEngine.Workspaces(0)

    Set rdb = dfws.OpenDatabase("C:\ManageRemote\db2.mdb", True)

   'DoCmd.OpenForm db.Containers(2)("f")

   Set rrs = rdb.OpenRecordset(rdb.QueryDefs("q").Name) ' this is the query in rdb

   'steps to create table is here - keep going

   Dim flds As String

   flds = ""

    For fld = 0 To rrs.Fields.Count - 1

        If fld = 0 Then flds = "'1' As [" + rrs.Fields(fld).Name + "],"

        If fld = rrs.Fields.Count - 1 Then flds = flds + "'1' As [" + rrs.Fields(fld).Name + "]": Exit For

        If fld > 0 Then flds = flds + "'1' As [" + rrs.Fields(fld).Name + "],"

    Next fld

    flds = "SELECT " + flds + " INTO q1t"

    

    DoCmd.SetWarnings False

    DoCmd.RunSQL flds

    DoCmd.RunSQL "Delete * from q1t"

    With rrs

        Do Until rrs.EOF

            For fld = 0 To rrs.Fields.Count - 1

                If fld = 0 Then flds = """" & Nz(rrs.Fields(fld), "0") & ""","

                If fld = rrs.Fields.Count - 1 Then flds = flds + """" & Nz(rrs.Fields(fld), "0") & """": Exit For

                If fld > 0 Then flds = flds + """" & Nz(rrs.Fields(fld), "0") & ""","

            Next fld

            DoCmd.RunSQL "INSERT INTO q1t  VALUES (" & flds & ")"

           rrs.MoveNext

        Loop

    End With

    DoCmd.SetWarnings True

    rrs.Close

    rdb.Close

    Set rrs = Nothing

    Set rdb = Nothing

End Sub

Open in new window

0
 
LVL 30

Expert Comment

by:hnasr
Comment Utility
<Function import a query as a Table from another database and replace the existing Table automatically.>

Yes: The comment above, does that!
0

Featured Post

Complete VMware vSphere® ESX(i) & Hyper-V Backup

Capture your entire system, including the host, with patented disk imaging integrated with VMware VADP / Microsoft VSS and RCT. RTOs is as low as 15 seconds with Acronis Active Restore™. You can enjoy unlimited P2V/V2V migrations from any source (even from a different hypervisor)

Join & Write a Comment

This article is a continuation or rather an extension from Cascading Combos (http://www.experts-exchange.com/A_5949.html) and builds on examples developed in detail there. It should be understandable alone, but I recommend reading the previous artic…
I see at least one EE question a week that pertains to using temporary tables in MS Access.  But surprisingly, I was unable to find a single article devoted solely to this topic. I don’t intend to describe all of the uses of temporary tables in t…
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). U…
In Microsoft Access, learn how to “cascade” or have the displayed data of one combo control depend upon what’s entered in another. Base the dependent combo on a query for its row source: Add a reference to the first combo on the form as criteria i…

744 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now