Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Как програмно сделать источник ODBC


Автор: Edik 20.9.2007, 13:57
Как програмно мне например создать источник данных в ODBC с названием Student Registration? Что бы не заходить в панель управления Виндовс. Нужно использовать видимо SQLConnect() но там навороченные параметры, я не знаю как это сделать. Опишите кто нибудь, если можете.

Автор: HappyLife 20.9.2007, 15:47
Код
int main(int argc, char* argv[])

{

        char * FileName = "OLDGTKBase";

        SQLHENV henv = 0;

        const wchar_t * CError= L"ERROR";

        const wchar_t * CErrorConnect = L"ERROR Connecting ODBC";

        if (SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv) == SQL_ERROR)

        {

                MessageBoxW(NULL,CErrorConnect, CError,MB_OK | MB_ICONERROR);

                return false;

        }

        SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*) SQL_OV_ODBC3, SQL_IS_INTEGER);

        SQLHDBC hdbc = 0;

        if (SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc) == SQL_ERROR)

        {

                MessageBoxW(NULL,CErrorConnect,CError,MB_OK | MB_ICONERROR);

                return false;

        }

        char * User = "";

        char * Password = "";

        if (SQLConnect(hdbc, (SQLTCHAR*)FileName, SQL_NTS,

        (SQLTCHAR*)User, sizeof(User), (SQLTCHAR*)Password,

         sizeof(Password) ) == SQL_ERROR )

        {

                char* driver = "Microsoft Access Driver (*.mdb)";

                char* params = "DSN=OLDGTKBase" "\0"

                               "DefaultDir=\\gtkserver\\Base" "\0"

                               "DBQ=\\\\gtkserver\\Base\\n_data_2005.mdb"

                               "\0";

                SQLConfigDataSource(NULL, ODBC_ADD_DSN, driver, params);

        }

        return true;

}

Вот так делал я. Думаю найдешь что надо изменить для своих целей. Удачи.

Автор: Edik 21.9.2007, 11:17
Ой, если бы сразу под винду!!! А то я запутаюсь.

Автор: CLIPSA 22.9.2007, 23:46
Зачем тебе нужно создавать источник данных? Можно и без него обойтись. 
Например для АССESS: 
Код

#include "afxdb.h"
CDatabase MyDatabase;MyDatabase.OpenEx("DRIVER={Microsoft Access Driver (*.mdb)};DBQ=C:\\Mydb.mdb",CDatabase::noOdbcDialog);
CRecordset MyRecordset(&MyDatabase);
MyRecordset.Open(CRecordset::forwardOnly, "SELECT *  FROM MyTable");//Теперь делаем запрос


Ну если уж сильно тебе хочется создать источник данных  Student Registration, то код такой (для  АССESS ):
Код

#include "afxdb.h"
SQLConfigDataSource(NULL, ODBC_ADD_DSN, "Microsoft Access Driver (*.mdb)", "DSN=Student Registration\0DBQ=c:\\Mydb.mdb");

Автор: Slawutich 23.9.2007, 02:21
На этом сайте выбираеш свою базу данных
http://connectionstrings.com/
копируеш стороку подключения и вставляеш в метод Open, Класса  CDatabase

вот пример открытия Firebird-а

Код

CDatabase m_Database;
CString conectionstring=_T("Driver=Firebird/InterBase(r) driver;Uid=SYSDBA;Pwd=masterkey;DbName=127.0.0.1:C:\\MyDatabase\\DataBase.fdb;");
m_Database.Open(NULL,FALSE,FALSE,conectionstring);


И не надо привязываться к системе создавая источники данных(DSN)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)