INTELLIGENT WORK FORUMS FOR COMPUTER PROFESSIONALS
Come Join Us!
Are you a Computer / IT professional? Join Tek-Tips now!
- Talk With Other Members
- Be Notified Of Responses
To Your Posts
- Keyword Search
- One-Click Access To Your
Favorite Forums
- Automated Signatures
On Your Posts
- Best Of All, It's Free!
*Tek-Tips's functionality depends on members receiving e-mail. By joining you are opting in to receive e-mail.
Partner With Us!
"Best Of Breed" Forums Add Stickiness To Your Site

(Download This Button Today!)
Feedback
"Because of this forum, I continue to WOW! my clients!"
Geography
Where in the world do Tek-Tips members come from?
|
Microsoft: Visual C++ FAQ
|
DataBase Access
|
shortly DAO, ADO, ODBC, just do it
Posted: 5 Sep 05 (Edited 5 Sep 05)
|
The DAO and ADO codes are described with using ATL, because using OLE2 api directly is more routines than understandable code.
using ODBC:
CODE#include<windows.h> #include<iostream> #include<string> #include<sql.h> #include<sqlext.h> using namespace std; int main() { HENV hEnv; HDBC hDbc; RETCODE rc; int iOut; char strOut[256]; char szDSN[256] = "driver={Microsoft Access Driver (*.mdb)};dbq=[c:\\db1.mdb];"; //dsn samples: //"driver={Microsoft Access Driver (*.mdb)};dbq=[f:\\db1.mdb];" //"driver={SQL Server};pwd={password there};Server={server name};Database={dbname there}" //driver names for different databases: //{SQL Server} //{Microsoft ODBC for Oracle} //{Oracle in oracle9} //{Microsoft Access Driver (*.mdb)} //{MySQL ODBC 3.51 Driver}
char* szSql = "select * from table1"; rc = SQLAllocEnv(&hEnv); rc = SQLAllocConnect(hEnv, &hDbc);
rc = SQLDriverConnect(hDbc, NULL, (unsigned char*)szDSN, SQL_NTS, (unsigned char*)strOut, 255, (SQLSMALLINT*)&iOut, SQL_DRIVER_NOPROMPT); { int ival; char chval[128]; int ret1; int ret2; HSTMT hStmt; rc = SQLAllocStmt(hDbc,&hStmt); rc = SQLPrepare(hStmt,(unsigned char*)szSql, SQL_NTS);//1 //rc = SQLBindCol(hStmt, tab_column, tr_type, tr_value, tr_len, len_or_ind); rc = SQLBindCol(hStmt, 1, SQL_C_ULONG, &ival, 4, (SQLINTEGER*)& ret1); rc = SQLBindCol(hStmt, 2, SQL_C_CHAR, chval, 128, (SQLINTEGER*)&ret2); rc = SQLExecute(hStmt); //2 //if you have queries like drop/create/many update... //instead of //1 //2 and //3 you could use //rc=SQLExecDirectA(hStmt,(unsigned char*)szSql,SQL_NTS); cout<< ">table:"<< endl; while(1) //3 { rc = SQLFetch(hStmt); if(rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO)break; cout<< "{"<< ival<<"}{"<< chval<< "}"<< endl; } rc=SQLFreeStmt(hStmt, SQL_DROP); } rc = SQLDisconnect(hDbc); rc = SQLFreeEnv(hEnv); return 0; } //using ADO
CODE#import "G:\Program Files\Common Files\System\ADO\msado15.dll" #include "Debug\msado15.tlh" #include<atlbase.h> #include<iostream>
using namespace std;
int main() { CoInitialize(0); { HRESULT hr = -1; CComPtr<IUnknown> cnnobj; CComPtr<IUnknown> rdsnobj; CComPtr<IUnknown> errobj; hr = cnnobj.CoCreateInstance(L"ADODB.Connection.2.7"); ADODB::_Connection* cnn; ADODB::_Recordset* rds; ADODB::Error* err; BSTR berr; ADODB::Fields* fds; ADODB::Field* fd1; ADODB::Field* fd2;
hr = cnnobj->QueryInterface(&cnn); hr = cnn->Open(L"driver={Microsoft Access Driver (*.mdb)};dbq=[c:\\db1.mdb];", L"", L"", -1); hr = rdsnobj.CoCreateInstance(L"ADODB.Recordset.2.7"); hr = rdsnobj->QueryInterface(&rds);
hr = errobj.CoCreateInstance(L"ADODB.Error.2.7"); hr = errobj->QueryInterface(&err);
hr = rds->put_ActiveConnection(_variant_t(cnn)); hr = rds->Open(_variant_t("select * from Table1"), _variant_t(cnn), ADODB::adOpenUnspecified, ADODB::adLockUnspecified, -1);
VARIANT_BOOL eof; VARIANT_BOOL bof; hr = rds->MoveFirst(); hr = rds->get_Fields(&fds); hr = fds->get_Item(_variant_t(L"X"), &fd1); hr = fds->get_Item(_variant_t(L"Y"), &fd2); BSTR namex; BSTR namey; hr = fd1->get_Name(&namex); hr = fd2->get_Name(&namey);
cout<< "filends count: "<< fds->GetCount()<< endl; wcout<< L"<"<< namex<< L"><"<< namey<< L">"<< endl; VARIANT valx, valy; while(true) { hr = rds->get_EOF(&eof); hr = rds->get_BOF(&bof); if(eof)break; if(bof)break; fd1->get_Value(&valx); fd2->get_Value(&valy); wcout<< L"{"<< (wchar_t*)_bstr_t(_variant_t(valx))<< L"}{"; wcout<< (wchar_t*)_bstr_t(_variant_t(valy))<< L"}"<< endl;
hr = rds->MoveNext(); } hr = rds->Close(); hr = cnn->Close();
} CoUninitialize(); return 0; } using DAO
CODE#import "G:\Program Files\Common Files\Microsoft Shared\DAO\dao360.dll" #include "Debug\dao360.tlh" #include<atlbase.h> #include<iostream>
using namespace std;
int main() { CoInitialize(0); { HRESULT hr = -1; CComPtr<IUnknown> app; DAO::_DBEngine* eng; DAO::Workspace* wr; DAO::Database* db; DAO::Recordset* rs; VARIANT_BOOL eof; VARIANT_BOOL bof; DAO::Fields* fs; DAO::_Field* f1; DAO::_Field* f2; hr = app.CoCreateInstance(L"DAO.DBEngine.36"); hr = app->QueryInterface(&eng); hr = eng->raw_CreateWorkspace(L"TestWorkSpace1", L"Admin", L"", _variant_t(DAO::dbUseJet), &wr); //open dbname, ifexclusive, ifreadonly, connect, retdb hr = wr->raw_OpenDatabase(_bstr_t(L"c:\\db1.mdb"), _variant_t(0), _variant_t(0), _variant_t(L""), &db); hr = db->raw_OpenRecordset(_bstr_t(L"select * from Table1"), _variant_t(DAO::dbOpenDynaset), _variant_t(0), _variant_t(2), &rs); hr = rs->get_Fields(&fs); hr = fs->get_Item(_variant_t(0), &f1); hr = fs->get_Item(_variant_t(1), &f2); wcout<< L"<"<< (BSTR)f1->Name<< L"><" << f2->Name<< L">"<< endl; VARIANT valx, valy; while(true) { hr = rs->get_EOF(&eof); hr = rs->get_BOF(&bof); if(eof)break; if(bof)break; f1->get_Value(&valx); f2->get_Value(&valy); wcout<< L"{"<< (wchar_t*)_bstr_t(_variant_t(valx))<< L"}{"; wcout<< (wchar_t*)_bstr_t(_variant_t(valy))<< L"}"<< endl; hr = rs->MoveNext(); }
hr = hr; } CoUninitialize(); return 0; } |
Back to Microsoft: Visual C++ FAQ Index
Back to Microsoft: Visual C++ Forum |
|
 |
|