Another small function that can speed up the text required to be written for large union queries.
Typically this can be used with
MS Access Function : Scan through a directory and write list of files to a table.
There are a number of data providers that provide data files broken down into different geographical areas. In previous posts I have outlined how we can get these all into Postgis. But once they are in postgis (or any other database) you may wish to get these separate tables into one single global table. Clearly a union query will do this, however it can be time consuming to write the union query out as it simply has so many tables in it.
I used the code in the link to scan a directory and get all the filenames (in this case shape files of the UK road network) into a table that I called UKRoadLinks which had two fields PKID (primary long integer autonumber) and Filen text field where Filen were the filenames.
I then wrote the following function to write a text file that on completion will contain an sql union of all the tables listed in your recordset – I then copied and pasted this into Postgis database within which I had already imported all the sub tables to union the tables into a single copy. Alter the recordset source if for instance if you wish to use only a subset. The nice thing about this is if you have hundreds of tables to amalgamate there should be less likelyhood of you accidentally missing or misspelling table names.
Public Function createunionsqllinks() Dim rst As DAO.Recordset Set rst = CurrentDb.OpenRecordset("UKRoadLinks") Dim fs, TextFile Set fs = CreateObject("Scripting.FileSystemObject") Set TextFile = fs.CreateTextFile("c:\data\sqlmerge.txt", True) TextFile.WriteLine ("CREATE TABLE sqltomergetables AS ") Do Until rst.EOF = True TextFile.WriteLine (Chr$(40) & "select * from " & rst!Filen & Chr$(41) & " UNION ") rst.MoveNext Loop rst.Close TextFile.WriteLine (";") TextFile.Close MsgBox "Created" End Function