Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations Chris Miller on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Connecting to access database

Status
Not open for further replies.

thegame8311

Technical User
Jan 6, 2012
133
US
For some reason I have all these header file errors but not sure why, here's my code:

Code:
#include "stdafx.h"
#include <sqlext.h>
#include <iostream>
#include <string>

using namespace std;

char szDSN[256] = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};DSN='';DBQ=C:\\Users\\Sasuke\\Documents\\Database1.accdb;";

//LPCTSTR lpszConnect = _T("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DSN='';DBQ=C:\\Users\\Sasuke\\Documents\\Database1.accdb;");


//*****************************************************************************************

int main()
{
/* Data Access Method used in this sample */
const char* DAM = "Direct ODBC";

HENV    hEnv;
HDBC    hDbc;

/* ODBC API return status */
RETCODE rc;

int     iConnStrLength2Ptr;
char    szConnStrOut[256];

//unsigned char* query = "SELECT Customers.[Company], Customers.[First Name] FROM Customers;";

string query = "SELECT Customers.[Company], Customers.[First Name] FROM Customers;";

SQLCHAR         chval1[128], chval2[128], colName[128];
int             ret1;
int             ret2;

/* Number of rows and columns in result set */
SQLINTEGER      rowCount = 0;
SQLSMALLINT     fieldCount = 0, currentField = 0;
HSTMT           hStmt;

/* Allocate an environment handle */
rc = SQLAllocEnv(&hEnv);
/* Allocate a connection handle */
rc = SQLAllocConnect(hEnv, &hDbc);

/* Connect to the 'Northwind 2007.accdb' database */
rc = SQLDriverConnect(hDbc, NULL, (unsigned char*)szDSN, 
    SQL_NTS, (unsigned char*)szConnStrOut, 
    255, (SQLSMALLINT*)&iConnStrLength2Ptr, SQL_DRIVER_NOPROMPT);
if (SQL_SUCCEEDED(rc)) 
{
    printf("%s: Successfully connected to database. Data source name: \n  %s\n", 
       DAM, szConnStrOut);

    /* Prepare SQL query */
    printf("%s: SQL query:\n  %s\n", DAM, query);

    rc = SQLAllocStmt(hDbc,&hStmt);
    rc = SQLPrepare(hStmt, query, SQL_NTS);
   
    /* Bind result set columns to the local buffers */ 
    rc = SQLBindCol(hStmt, 1, SQL_C_CHAR, chval1, 128, (SQLINTEGER*)&ret1);
    rc = SQLBindCol(hStmt, 2, SQL_C_CHAR, chval2, 128, (SQLINTEGER*)&ret2);
   
    /* Excecute the query and create a record set */
    rc = SQLExecute(hStmt); 
    if (SQL_SUCCEEDED(rc)) 
    {
        printf("%s: Retrieve schema info for the given result set:\n", DAM);
        SQLNumResultCols(hStmt, &fieldCount);
        if (fieldCount > 0)
        {
            for (currentField=1; currentField <= fieldCount; currentField++)
            {
                SQLDescribeCol(hStmt, currentField, colName, sizeof(colName), 0, 0, 0, 0, 0);
                printf(" | %s", colName);    
            }
            printf("\n");
        }
        else
        {
            printf("%s: Error: Number of fields in the result set is 0.\n", DAM);
        }

        printf("%s: Fetch the actual data:\n", DAM);
        /* Loop through the rows in the result set */
        rc = SQLFetch(hStmt);
        while (SQL_SUCCEEDED(rc)) 
        {
            printf(" | %s | %s\n", chval1, chval2);
            rc = SQLFetch(hStmt);
            rowCount++;
        };

        printf("%s: Total Row Count: %d\n", DAM, rowCount);
        rc = SQLFreeStmt(hStmt, SQL_DROP);
    }
}
else
{
    printf("%s: Couldn't connect to %s.\n", DAM, szDSN);
}

/* Disconnect and free up allocated handles */
SQLDisconnect(hDbc);
SQLFreeHandle(SQL_HANDLE_DBC, hDbc);
SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

printf("%s: Cleanup. Done.\n", DAM);
}

I tried to use the debugger but still could not manage to fix them. Here are some of the errors

Code:
c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sqltypes.h(137): error C2146: syntax error : missing ';' before identifier 'SQLHWND'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sqltypes.h(137): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sqltypes.h(137): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sqltypes.h(275): error C2146: syntax error : missing ';' before identifier 'Data1'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sqltypes.h(275): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sqltypes.h(275): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sqltypes.h(276): error C2146: syntax error : missing ';' before identifier 'Data2'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sqltypes.h(276): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sqltypes.h(276): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sqltypes.h(277): error C2146: syntax error : missing ';' before identifier 'Data3'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sqltypes.h(277): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sqltypes.h(277): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sqltypes.h(278): error C2146: syntax error : missing ';' before identifier 'Data4'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sqltypes.h(278): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sqltypes.h(278): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(606): error C2061: syntax error : identifier '__inout_xcount_opt'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(607): error C2059: syntax error : ')'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(607): error C2143: syntax error : missing ')' before ';'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(711): error C2061: syntax error : identifier '__out_xcount_opt'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(712): error C2059: syntax error : ')'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(712): error C2143: syntax error : missing ')' before ';'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(729): error C2061: syntax error : identifier '__out_xcount_opt'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(730): error C2059: syntax error : ')'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(730): error C2143: syntax error : missing ')' before ';'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(735): error C2061: syntax error : identifier '__out_xcount_opt'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(736): error C2059: syntax error : ')'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(736): error C2143: syntax error : missing ')' before ';'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(747): error C2061: syntax error : identifier '__out_xcount_opt'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(748): error C2059: syntax error : ')'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(748): error C2143: syntax error : missing ')' before ';'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(764): error C2061: syntax error : identifier '__out_xcount'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(765): error C2059: syntax error : ')'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(765): error C2143: syntax error : missing ')' before ';'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(770): error C2061: syntax error : identifier '__out_xcount_opt'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(771): error C2059: syntax error : ')'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(771): error C2143: syntax error : missing ')' before ';'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(780): error C2061: syntax error : identifier '__out_xcount_opt'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(781): error C2059: syntax error : ')'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(781): error C2143: syntax error : missing ')' before ';'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(804): error C2061: syntax error : identifier '__in_xcount'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(804): error C2059: syntax error : ')'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(804): error C2143: syntax error : missing ')' before ';'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(828): error C2061: syntax error : identifier '__in_xcount'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(828): error C2059: syntax error : ')'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(828): error C2143: syntax error : missing ')' before ';'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(845): error C2061: syntax error : identifier '__in_xcount'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(846): error C2059: syntax error : ')'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(846): error C2143: syntax error : missing ')' before ';'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sql.h(850): error C2061: syntax error : identifier '__in_xcount'
 
Include <windows.h> before <sqlext.h> (better place this include in stdafx.h if you compile with pre-compiled headers).

The <stdext.h> header uses lots of symbols from <windows.h> (see error messages list;)...
 
well now I have a problem connecting to the database, is there something in this line that is doing it:

Code:
char szDSN[256] = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};DSN='';DBQ=C:\\Users\\Sasuke\\Documents

or something in the reset of my code that sends to to the bottom else?
 
Luckily (for me), I don't deal with Access now but I venture a remark:

The true problem is: nobody (except you) knows what (and where) is your problem (OS, ODBC configuration and installed drivers, failed statement, return code(s) etc).

Ask good question == have a good chance of a good answer...
 
well I will try to answer the questions to the best of my ability.

OS: Windows 7
ODBC config: not sure where to look for that, access or Visual C++
installed drivers: not sure where to look
failed statement: not sure but the following line(which I indicated with arrows returns -1

Code:
#include "stdafx.h"
#include <sqlext.h>
#include <iostream>
#include <string>

using namespace std;

char szDSN[256] = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};DSN='';DBQ=C:\\Users\\Sasuke\\Documents\\Database1.accdb;";

//LPCTSTR lpszConnect = _T("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DSN='';DBQ=C:\\Users\\Sasuke\\Documents\\Database1.accdb;");


//*****************************************************************************************

int main()
{
/* Data Access Method used in this sample */
const char* DAM = "Direct ODBC";

HENV    hEnv;
HDBC    hDbc;

/* ODBC API return status */
RETCODE rc;

int     iConnStrLength2Ptr;
char    szConnStrOut[256];

//unsigned char* query = "SELECT Customers.[Company], Customers.[First Name] FROM Customers;";

string query = "SELECT Customers.[Company], Customers.[First Name] FROM Customers;";

SQLCHAR         chval1[128], chval2[128], colName[128];
int             ret1;
int             ret2;

/* Number of rows and columns in result set */
SQLINTEGER      rowCount = 0;
SQLSMALLINT     fieldCount = 0, currentField = 0;
HSTMT           hStmt;

/* Allocate an environment handle */
rc = SQLAllocEnv(&hEnv);
/* Allocate a connection handle */
rc = SQLAllocConnect(hEnv, &hDbc);

/* Connect to the 'Northwind 2007.accdb' database */
rc = SQLDriverConnect(hDbc, NULL, (unsigned char*)szDSN,
    SQL_NTS, (unsigned char*)szConnStrOut,
    255, (SQLSMALLINT*)&iConnStrLength2Ptr, SQL_DRIVER_NOPROMPT);
->->if (SQL_SUCCEEDED(rc))
{
    printf("%s: Successfully connected to database. Data source name: \n  %s\n",
       DAM, szConnStrOut);

    /* Prepare SQL query */
    printf("%s: SQL query:\n  %s\n", DAM, query);

    rc = SQLAllocStmt(hDbc,&hStmt);
    rc = SQLPrepare(hStmt, query, SQL_NTS);
   
    /* Bind result set columns to the local buffers */
    rc = SQLBindCol(hStmt, 1, SQL_C_CHAR, chval1, 128, (SQLINTEGER*)&ret1);
    rc = SQLBindCol(hStmt, 2, SQL_C_CHAR, chval2, 128, (SQLINTEGER*)&ret2);
   
    /* Excecute the query and create a record set */
    rc = SQLExecute(hStmt);
    if (SQL_SUCCEEDED(rc))
    {
        printf("%s: Retrieve schema info for the given result set:\n", DAM);
        SQLNumResultCols(hStmt, &fieldCount);
        if (fieldCount > 0)
        {
            for (currentField=1; currentField <= fieldCount; currentField++)
            {
                SQLDescribeCol(hStmt, currentField, colName, sizeof(colName), 0, 0, 0, 0, 0);
                printf(" | %s", colName);    
            }
            printf("\n");
        }
        else
        {
            printf("%s: Error: Number of fields in the result set is 0.\n", DAM);
        }

        printf("%s: Fetch the actual data:\n", DAM);
        /* Loop through the rows in the result set */
        rc = SQLFetch(hStmt);
        while (SQL_SUCCEEDED(rc))
        {
            printf(" | %s | %s\n", chval1, chval2);
            rc = SQLFetch(hStmt);
            rowCount++;
        };

        printf("%s: Total Row Count: %d\n", DAM, rowCount);
        rc = SQLFreeStmt(hStmt, SQL_DROP);
    }
}
else
{
    printf("%s: Couldn't connect to %s.\n", DAM, szDSN);
}

/* Disconnect and free up allocated handles */
SQLDisconnect(hDbc);
SQLFreeHandle(SQL_HANDLE_DBC, hDbc);
SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

printf("%s: Cleanup. Done.\n", DAM);

if you need anymore if please let me know

 
oh yeah and the error is:
Code:
Direct ODBC: Couldn't connect to Driver={Microsoft Access Driver (*.mdb, *.accdb)}; DSN='';DBQ=C:\Users\User\Documents\Database1.accdb;.
 
Now you have problems with ODBC Access driver (possibly this driver is not installed on your system).

Regrettably, I can't help you with ODBC driver problems on Windows 7 (I'm working on old good XP till now). I know that you are not alone in this wild area. See, for example: ...and lots of other links on this topic from Google...

Ask question on specialized forums or wait ODBC gurus here...

Good luck!
 
thanks, I will try the link for answers, but the ODBC forums here have not had any questions answered since almost a year ago, not sure what that means but I am also looking on microsoft forums for answers
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top