iCAx开思工具箱

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 26069|回复: 0
打印 上一主题 下一主题

求助:有关DLL中调用ODBC的问题

[复制链接]
跳转到指定楼层
楼主
发表于 2006-5-5 08:24:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册登录,享用更多网站功能!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
我在UG二次开发时,用调用DLL的方式打开一个应用程序,DLL里包含有调用ODBC建立和操作".xls"的程序,运行后什么也得不到,而相同的程序用EXE方式却能生成“.xls”文件并能操作。如下例程:
1.EXE
void CTDlg::OnOK()
{
        // TODO: Add extra validation here
        WE();
//        CDialog::OnOK();
}

void CTDlg::WE()
{
        CDatabase database;
        CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // Excel°²×°Çý¶¯
        CString sExcelFile,sPath;
        CString sSql;
   
        //»ñÈ¡Ö÷³ÌÐòËùÔÚ·¾¶,´æÔÚsPathÖÐ
        GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);
        sPath.ReleaseBuffer ();
        int nPos;
        nPos=sPath.ReverseFind ('\\');
        sPath=sPath.Left (nPos);
       
        sExcelFile ="c:\\x.xls";// sPath + "\\Demo.xls";                         // Òª½¨Á¢µÄExcelÎļþ
       
        TRY
        {
                // ´´½¨½øÐдæÈ¡µÄ×Ö·û´®
                sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",sDriver, sExcelFile, sExcelFile);
               
                // ´´½¨Êý¾Ý¿â (¼ÈExcel±í¸ñÎļþ)
                if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
                {
                        // ´´½¨±í½á¹¹(ÐÕÃû¡¢ÄêÁä)
                        sSql = "CREATE TABLE Exceldemo (Name TEXT,Age NUMBER)";
                        database.ExecuteSQL(sSql);
                       
                        // ²åÈëÊýÖµ
                        sSql = "INSERT INTO Exceldemo (Name,Age) VALUES ('Ðì¾°ÖÜ',26)";
                        database.ExecuteSQL(sSql);
                       
                        sSql = "INSERT INTO Exceldemo (Name,Age) VALUES ('ÐìÖ¾»Û',22)";
                        database.ExecuteSQL(sSql);
                       
                        sSql = "INSERT INTO Exceldemo (Name,Age) VALUES ('¹ù»Õ',27)";
                        database.ExecuteSQL(sSql);
                }      
               
                // ¹Ø±ÕÊý¾Ý¿â
                database.Close();
               
                AfxMessageBox("ExcelÎļþдÈë³É¹¦£¡");
        }
        CATCH_ALL(e)
        {
                TRACE1("ExcelÇý¶¯Ã»Óа²×°: %s",sDriver);
        }
        END_CATCH_ALL;
}

CString CTDlg::GetExcelDriver()
{
    char szBuf[2001];
    WORD cbBufMax = 2000;
    WORD cbBufOut;
    char *pszBuf = szBuf;
    CString sDriver;
       
    // »ñÈ¡ÒÑ°²×°Çý¶¯µÄÃû³Æ(º­ÊýÔÚodbcinst.hÀï)
    if (!SQLGetInstalledDrivers(szBuf, cbBufMax, &cbBufOut))
        return "";
   
    // ¼ìË÷ÒÑ°²×°µÄÇý¶¯ÊÇ·ñÓÐExcel...
    do
    {
        if (strstr(pszBuf, "Excel") != 0)
        {
            //·¢ÏÖ !
            sDriver = CString(pszBuf);
            break;
        }
        pszBuf = strchr(pszBuf, '\0') + 1;
    }
    while (pszBuf[1] != '\0');
       
    return sDriver;
}

2.DLL
void CClutchData::WriteExcel()
{
        CDatabase database;
        CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // Excel°²×°Çý¶¯
        CString sExcelFile,sPath;
        CString sSql;
   
        //»ñÈ¡Ö÷³ÌÐòËùÔÚ·¾¶,´æÔÚsPathÖÐ
        GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);
        sPath.ReleaseBuffer ();
        int nPos;
        nPos=sPath.ReverseFind ('\\');
        sPath=sPath.Left (nPos);
       
        sExcelFile = "C:\\xx.xls";//sPath + "\\Demo.xls";                         // Òª½¨Á¢µÄExcelÎļþ
       
        TRY
        {
                // ´´½¨½øÐдæÈ¡µÄ×Ö·û´®
                sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",sDriver, sExcelFile, sExcelFile);
               
                // ´´½¨Êý¾Ý¿â (¼ÈExcel±í¸ñÎļþ)
                if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
                {
                        // ´´½¨±í½á¹¹(ÐÕÃû¡¢ÄêÁä)
                        sSql = "CREATE TABLE Exceldemo (Name TEXT,Age NUMBER)";
                        database.ExecuteSQL(sSql);
                       
                        // ²åÈëÊýÖµ
                        sSql = "INSERT INTO Exceldemo (Name,Age) VALUES ('Ðì¾°ÖÜ',26)";
                        database.ExecuteSQL(sSql);
                       
                        sSql = "INSERT INTO Exceldemo (Name,Age) VALUES ('ÐìÖ¾»Û',22)";
                        database.ExecuteSQL(sSql);
                       
                        sSql = "INSERT INTO Exceldemo (Name,Age) VALUES ('¹ù»Õ',27)";
                        database.ExecuteSQL(sSql);
                }      
               
                // ¹Ø±ÕÊý¾Ý¿â
                database.Close();
               
                AfxMessageBox("ExcelÎļþдÈë³É¹¦£¡");
        }
        CATCH_ALL(e)
        {
                TRACE1("ExcelÇý¶¯Ã»Óа²×°: %s",sDriver);
        }
        END_CATCH_ALL;
}
CString CCData::GetExcelDriver()
{
    char szBuf[2001];
    WORD cbBufMax = 2000;
    WORD cbBufOut;
    char *pszBuf = szBuf;
    CString sDriver;
       
    // »ñÈ¡ÒÑ°²×°Çý¶¯µÄÃû³Æ(º­ÊýÔÚodbcinst.hÀï)
    if (!SQLGetInstalledDrivers(szBuf, cbBufMax, &cbBufOut))
        return "";
   
    // ¼ìË÷ÒÑ°²×°µÄÇý¶¯ÊÇ·ñÓÐExcel...
    do
    {
        if (strstr(pszBuf, "Excel") != 0)
        {
            //·¢ÏÖ !
            sDriver = CString(pszBuf);
            break;
        }
        pszBuf = strchr(pszBuf, '\0') + 1;
    }
    while (pszBuf[1] != '\0');
       
    return sDriver;
}
void CCDlg::OnClutchSave()
{
        // TODO: Add your control notification handler code here
        //Disable the CutchSave Button
        m_sCData.WriteExcel();
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 支持支持
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手板模型制作,在线3D打印服务

QQ|小黑屋|手机版|开思工具箱 CAD工具箱_CAM工具箱  

GMT+8, 2024-11-16 18:40 , Processed in 0.014328 second(s), 8 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

快速回复 返回顶部 返回列表