小弟现在遇到如下情况,做了一个采集数据库数据的程序,在SERVER2003(32位)下面编译通过,也可以运行(运行的是DEBUG模式生成的EXE文件)。用ODBC方式去连接的。
问题是把EXE文件放到server2008(64位)下就无法运行。运行库也已经X86和X64都安装过了。报RUNTIME error的错误。
把程序分段测试,屏蔽了OPEN函数运行正常,一旦恢复就会出错。
最后发现调试到open函数的时候出错,内存溢出。
想请教下,出现这样的情况,是ODBC配置的问题还是函数的问题?
PS。用的是VS2008跪求答案啊

解决方案 »

  1.   


    但是超时的话应该是报TNS问题吧,不会是RUNTIME问题啊,而且2008上面PL/SQL连接正常
      

  2.   

    看看能不能在win2008 64bit环境下编译你的程序试试
      

  3.   


    调试过了,但是预编译头出现问题:错误 1 fatal error C1083: 无法打开编译器中间文件:“C:\Users\ADMINI~1\AppData\Local\Temp\2\_CL_7c282027sy”: No such file or directory c1xx GetData
      

  4.   

    运行c:\windows\SysWOW64\odbcad32.exe 配置你的odbc试试
      

  5.   

    数据库编程
    MFC连接sql server 2000并且查询:
    首先建立对话框程序,摆放一个列表框和一个按钮,修改后者属性,将ID改为IDC_BTN_QUERY,标题设为查询。
    在stdafx.h中加入:
    #import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","rsEOF")
    在void CAdoDlg::OnBtnQuery()添加下面代码:(三种方式)
    首先在AdoDlg.cpp中添加:
    HCURSOR CAdoDlg::OnQueryDragIcon()
    {
    return (HCURSOR) m_hIcon;
    }
    第一种:
    CoInitialize(NULL);//初始化COM库
    _ConnectionPtr pConn(__uuidof(Connection));//实例化一个connection对象pConn
    _RecordsetPtr pRst(__uuidof(Recordset)); //实例化一个Recordset对象pRst
    //连接字符串说明:Provider表示驱动引擎;User ID表示用户名;Password表示口令;Initial Catalog表示数据库名
    pConn->ConnectionString="Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=xx;Password=;";
    try 
    {
    pConn->Open("","","",adConnectUnspecified); 
    }
    catch(_com_error e) 
    {
    MessageBox(e.Description());//输出异常原因。
    return;
    }
    pRst=pConn->Execute("select * from ..",NULL,adCmdText);
    while(!pRst->rsEOF)
    {
    ((CListBox*)GetDlgItem(IDC_LIST1))->AddString(
    (_bstr_t)pRst->GetCollect(".."));
    pRst->MoveNext();
    }
    pRst->Close();
    pConn->Close();
    pRst.Release();
    pConn.Release();
    CoUninitialize();//释放COM库
    第二种:
    将上面红色语句删除,添加:
    pRst->Open("select * from sysservers ",_variant_t((IDispatch*)pConn),
    adOpenDynamic,adLockOptimistic,adCmdText);
    第三种:
    在上面蓝色语句后添加:
    _CommandPtr pCmd(__uuidof(Command));//实例化一个Command对象pCmd
    在将第二种添加的语句删除,添加:
    pCmd->put_ActiveConnection(_variant_t((IDispatch*)pConn));
    pCmd->CommandText="select * from sysservers ";
    pRst=pCmd->Execute(NULL,NULL,adCmdText);
    在上面绿色语句后添加:
    pCmd.Release();
    多表查询有重名的列名用别名解决:
    select A.name as a1,B.name a2..
    (_bstr_t)pRst->GetCollect("a1")
    (_bstr_t)pRst->GetCollect("a2")
    sql server 2000插入,删除,修改:
    在上面蓝色语句后添加:
    _variant_t RecordsAffected; 
    在上面粉色语句后修改:
    pConn->Open("","",&RecordsAffected,adConnectUnspecified);
    将上面橙色语句删除。