Solved

MFC CDaoDatabase ODBC connection to .MDB file

Posted on 1998-10-06
8
1,502 Views
Last Modified: 2012-06-21
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
Comment
Question by:blevine
8 Comments
 

Author Comment

by:blevine
ID: 1174578
The error message is "No field defined - cannot append tabledef"
0
 

Expert Comment

by:mmachie
ID: 1174579
i know this sounds daft but, did you try creating a field?  
CDaoTableDef::CreateField().

mikem
0
 
LVL 86

Expert Comment

by:jkr
ID: 1174580
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
NAS Cloud Backup Strategies

This article explains backup scenarios when using network storage. We review the so-called “3-2-1 strategy” and summarize the methods you can use to send NAS data to the cloud

 

Author Comment

by:blevine
ID: 1174581
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
 
LVL 8

Expert Comment

by:MaDdUCK
ID: 1174582
what's the DAO error code (obtain it from the dbDaoErrors object)...
0
 
LVL 3

Expert Comment

by:NullTerminator
ID: 1174583
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
 

Author Comment

by:blevine
ID: 1174584
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
 
LVL 3

Accepted Solution

by:
NullTerminator earned 100 total points
ID: 1174585
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

Problems using Powershell and Active Directory?

Managing Active Directory does not always have to be complicated.  If you are spending more time trying instead of doing, then it's time to look at something else. For nearly 20 years, AD admins around the world have used one tool for day-to-day AD management: Hyena. Discover why

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Templates For Beginners Or How To Encourage The Compiler To Work For You Introduction This tutorial is targeted at the reader who is, perhaps, familiar with the basics of C++ but would prefer a little slower introduction to the more ad…
Go is an acronym of golang, is a programming language developed Google in 2007. Go is a new language that is mostly in the C family, with significant input from Pascal/Modula/Oberon family. Hence Go arisen as low-level language with fast compilation…
The goal of the video will be to teach the user the concept of local variables and scope. An example of a locally defined variable will be given as well as an explanation of what scope is in C++. The local variable and concept of scope will be relat…
The viewer will learn how to user default arguments when defining functions. This method of defining functions will be contrasted with the non-default-argument of defining functions.

810 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