I've included a program below that will:

1) Open the MDB
2) Create a cursor containing the table names
3) Create a cursor containing all the field names
4) Select all the records from the Access table(s)
    and copy them to a dbf

Have fun!

*-- GetAccess.prg
*--
*-- Extract list of tables, table structures
*--    and data (if any) from Access database.
*--
*-- If tlInit = .t. - It will Create new Structure table
*--                      named MDB_Structures.dbf in a database
*--                      container named AccessAccess
*--
*-- Otherwise, it will create one if one doesn't exist or
*-- use the existing one and add a new set of tables to it.
*--
*-- If you choose the same Access mdb it will delete previous
*-- structures for that mdb and add the new ones.
*--
*-- Chet Gardiner, 3/14/06 -- Feel free to use this code as you see fit...

PARAMETERS tlInit

SET DELETED ON
SET SAFETY OFF
SET EXCLUSIVE ON

*-- Create or Open AccessAccess Database
IF ! FILE('AccessAccess.dbc')
    CREATE DATABASE AccessAccess
ELSE
    OPEN DATABASE AccessAccess
ENDIF

*-- Start with new MDB_Structures table if Init = .t.
USE IN SELECT('MDB_Structures')
IF FILE('MDB_Structures.dbf') AND tlInit
    REMOVE TABLE MDB_Structures DELETE
ENDIF

*-- Connect to Access
lcMDB = GETFILE('mdb')
lnHandle = SQLStringConnect("Driver={Microsoft Access Driver 
(*.mdb)};Dbq=" + lcMDB)

*-- Get a list of all the Tables in the mdb file
*--          into cursor curTables
SQLTables(lnHandle, 'TABLE', 'curTables')

*-- Scan for Each table
SCAN
    *-- Must trim the table_name
    lcTableName = ALLTRIM(table_name)
    WAIT WINDOW "Get Structure for " + lcTableName NOWAIT

    *-- The structure will be placed in curColumns
    IF SQLColumns(lnHandle, lcTableName, 'native', 'curColumns') < 0
        *-- Shouldn't happen but if it does
        *--    the error information will be in
        *--    laErrorArray in debugger
        AERROR(laErrorArray)
        SET STEP ON
    ENDIF
   
    *-- Save in table's cursor named MDB_Structures
    IF ! USED('MDB_Structures')
        *-- Not used, either create or use it
        IF tlInit OR ! FILE('MDB_Structures.dbf')
            *-- Create new table
            SELECT curColumns
            =AFIELDS(latemp)
            CREATE TABLE MDB_Structures FROM ARRAY latemp
        ELSE
            *-- Use existing Table
            SELECT 0
            USE MDB_Structures
            *-- Delete any previous structure for this database
            DELETE FOR ALLTRIM(table_cat) == LEFT(lcmdb, AT('.', lcmdb)-1)
        ENDIF
    ENDIF

    *-- Add this tables' structure to result table
    SELECT MDB_Structures
    APPEND FROM DBF("curColumns")

    *-- Delete Access table from database if exists
    IF FILE(lcTableName + '.dbf')
        REMOVE TABLE &lcTableName. DELETE
    ENDIF
   
    *-- Select all records from Access Table
    WAIT WINDOW "Get records for " + lcTableName NOWAIT
    USE IN SELECT("ac_table")
    SQLEXEC(lnHandle, "select * from " + lcTableName, "ac_table")
    IF USED('ac_table')
        SELECT ac_table
        IF RECCOUNT() > 0
            *-- Write table if got some
            COPY TO &lcTableName. DATABASE AccessAccess
        ENDIF
    ENDIF
   
    *-- Back to tables' cursor (I just like to be sure)
    SELECT curTables
EndScan

*-- Kill Handle
lnHandle = .NULL.

RETURN


[EMAIL PROTECTED] wrote:
> I am trying to analyze an undocumented Oracle data model. The DB has been 
> dumped into an Access mdb for me.
>
> Using VFP (of course), I'm trying to read in the names of all the tables 
> (100+) in the mdb so I can programmatically create remote views. My ultimate 
> goal is to scan all fields in all tables in search of data values. 
>
> I have created a DB and made a connection to the MDB. What I'm missing is a 
> way to populate an array with the names of the tables in the mdb. Then I can 
> cycle and programmatically create my remote views. The actual search is NOT a 
> problem. I am just struggling with getting the list of tables from the mdb.
>
> I want to avoid the mind-numbing prospect of 500+ clicks.
>
> Thanks,
>
> Henry
>
>
[excessive quoting removed by server]

_______________________________________________
Post Messages to: [email protected]
Subscription Maintenance: http://leafe.com/mailman/listinfo/profox
OT-free version of this list: http://leafe.com/mailman/listinfo/profoxtech
** All postings, unless explicitly stated otherwise, are the opinions of the 
author, and do not constitute legal or medical advice. This statement is added 
to the messages for those lawyers who are too stupid to see the obvious.

Reply via email to