如何在一个程序操作多个Foxpro 2.5数据库
编号:QA000382
建立日期: 1999年1月21日 最后修改日期:1999年1月21日
所属类别:
谢峰:
工具:visual c++ 5.0
操作系统: win95,WinNt 4.0
如何在一个程序操作多个Foxpro 2.5数据库(包括查询,改写记录。)
回答:
多打开几个ODBC数据源就行了,同一个轮着用也可以。或者多从CDatabase、CRecordset派生几个子类。
我一般用ODBC API,可参看odbc.hlp。实际上vc的sample很详细。
SQLHENV hOdbcEnv;
SQLHDBC hDbConn;
SQLHSTMT hstmt;
SQLRETURN sr;
char szDSN [] = "test";
char szUID [] = "";
char szAuthStr [] = "";
SQLCHAR MySqlText [200] = "SELECT Table1.* from Table1 ORDER BY Table1.id";
//Column Data Variables
...
//Allocate Environment
sr = SQLAllocHandle (SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hOdbcEnv);
if (sr != SQL_SUCCESS)
TRACE ("Error in Allocating Environment Handle\n");
//Set the ODBC's Version
sr = SQLSetEnvAttr (hOdbcEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)
SQL_OV_ODBC3, SQL_IS_INTEGER);
if (sr != SQL_SUCCESS)
TRACE ("Error in Set ODBC Version\n");
//Allocate Connection
sr = SQLAllocHandle (SQL_HANDLE_DBC, hOdbcEnv, &hDbConn);
if (sr != SQL_SUCCESS)
TRACE ("Error in Allocating Connection Handle\n");
//Set Connection Timeout
sr = SQLSetConnectAttr (hDbConn, SQL_ATTR_LOGIN_TIMEOUT, (void*) 5, 0);
if (sr != SQL_SUCCESS)
TRACE ("Error in Set Connection Timeout\n");
//Connect to Data Source
sr = SQLConnect (hDbConn, (UCHAR *) szDSN, SQL_NTS, (UCHAR *) szUID,
SQL_NTS, (UCHAR *) szAuthStr, SQL_NTS);
//Get Error Info or warnings for SQL_SUCCESS_WITH_INFO
if (sr != SQL_SUCCESS)
{
if (sr == SQL_SUCCESS_WITH_INFO)
{
SQLCHAR SqlState [6];
SQLINTEGER NativeError;
SQLCHAR ErrMsg [SQL_MAX_MESSAGE_LENGTH];
int i = 1;
TRACE ("Error in SQLConnect():%d.\n", sr);
while (SQLGetDiagRec (SQL_HANDLE_DBC, hDbConn, i, SqlState, &NativeError,
ErrMsg, sizeof (ErrMsg), NULL) != SQL_NO_DATA)
TRACE ("Diag:%d, SQLSTATE:%s NativeError:%d ErrMsg:%s\n", i++, SqlState,
NativeError, ErrMsg);
}
else
TRACE ("Error in Connecting to Databse\n");
}
//Working with the Database...
//Disconnect
sr = SQLDisconnect (hDbConn);
//Free Handles
if (hDbConn != SQL_NULL_HANDLE)
SQLFreeHandle (SQL_HANDLE_DBC, hDbConn);
if (hOdbcEnv != SQL_NULL_HANDLE)
SQLFreeHandle (SQL_HANDLE_ENV, hOdbcEnv);
此问题由Mao rui回答。
| |
|
|
| |
|
|