热情软件屋

 

如何在一个程序操作多个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回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio