[Last Call] Learn how to a build a cloud-first strategyRegister Now

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

MFC CDaoDatabase ODBC connection to .MDB file

I am using the CDaoDatabase class to create and open an empty .MDB file.  I then create a CDaoTableDef object and try to create a connection to another .MDB file using ODBC.  I get errors in the create and append.  Any ideas? Here's my code :

CSPSDataAccess TestData; // derived from CObject
TestData.OpenMDB("d:\\recipes\\test.mdb"); // has a member variable m_DatabaseFile pointing to the CDaoDatabase object

CDaoTableDef* pODBCTable = new CDaoTableDef(&TestData.m_DatabaseFile);
pODBCTable->Create("TEST", FALSE, FALSE, "ODBC;DSN=TEST32;");
pODBCTable->Append();
CDaoRecordset Records(&TestData.m_DatabaseFile);
0
blevine
Asked:
blevine
1 Solution
 
blevineAuthor Commented:
The error message is "No field defined - cannot append tabledef"
0
 
mmachieCommented:
i know this sounds daft but, did you try creating a field?  
CDaoTableDef::CreateField().

mikem
0
 
jkrCommented:
mmachie is right. In order to append a tabledef, you have to create fields first, e.g.

        CDaoTableDef*  ptd;

        // ...

        CDaoFieldInfo* pdfi = new CDaoFieldInfo();

                pdfi->m_nOrdinalPosition    =   0;
                pdfi->m_strSourceField      =   _T  (   "");
                pdfi->m_strSourceTable      =   _T  (   "");

                ptd->CreateField    (   *pdfi);

        // ...

        ptd->Append ();

0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
blevineAuthor Commented:
No, what I am trying to do is open an empty .MDB file and connect to an existing .MDB file which may be on my machine or on a network drive.  I then want to determine what the table info is in .MDB file I connected to.  I do not know what the format is in that file.  I then want to extract the table information from the connected file and created table defs in the empty original .MDB file.  The documentation says that I should be able to connect through ODBC to the existing MDB file and use it as part of my tables.
0
 
MaDdUCKCommented:
what's the DAO error code (obtain it from the dbDaoErrors object)...
0
 
NullTerminatorCommented:
You can't use CDao anything to talk to an access database through ODBC because the ODBC driver uses DAO to talk to the mdb.  Use CDatabase and CRecordset if you need to use ODBC,  otherwise, open it directly with DAO.  Create a seperate workspace if you need to.

Sorry
'\0'
0
 
blevineAuthor Commented:
Ok that sounds good.  I really need to attach to the table without opening it directly because I will be dealing with a huge amount of data.  Any samples on attaching and accessing record sets would be appreciated.  Also, how do I attach to SQL Server files using CDatabase?????
0
 
NullTerminatorCommented:
this is the form of an odbc connect string
"ODBC;DSN=SALESDB;UID=Administrator;PWD=HighWire"

CDatabase myDB;
myDB.Open( LPCTSTR lpszDSN, BOOL bExclusive = FALSE, BOOL bReadOnly = FALSE,  PUT_YOUR_ODBC_CONNECT_HERE, BOOL bUseCursorLib = TRUE );
 
// sample i Have use to connect to SQL 6.x

if(m_bUseODBC) {
            CString strConnect;
            strConnect.Format("ODBC;DSN=%s;UID=%s;PWD=%s",
                m_strConnect, m_strUser, m_strPwd);
           if(_debug)  MessageBox("Prepare for odbc " + strConnect);
            m_pDB->Open("", FALSE, FALSE, strConnect);                
            }

If you want to work through an attached file via Access, create a sytem DSN ODBC datasource pointing to your SQL database.  Open an existing or new db.
Go to File | Get External Data | Link Tables.  Select ODBC datasources from file types,  pick your Datasource,  pick the tables you want to link,  rename them after they are linked if you like, they will stay linked.

This works for all sorts of data,  AS 400,  DB2, etc.

'\0'
0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

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