首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

怎么通过mfc用ado方式连接DBF

2013-11-06 
如何通过mfc用ado方式连接DBF我试了几次都不成功,网上也搜不到现成的,问下大家是不是连接字符串错了,如果

如何通过mfc用ado方式连接DBF
我试了几次都不成功,网上也搜不到现成的,问下大家是不是连接字符串错了,如果错了应该怎么修改呢?

下面是我的代码


AfxOleInit();
_ConnectionPtr m_pConnection;
_CommandPtr m_pCommand;
_variant_t var;
HRESULT hr;
try
{
    hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
    if(SUCCEEDED(hr))
    {
        hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=szss2013.dbf;Extended Properties=dBase 5.0;Persist Security Info=False", "", "", adModeUnknown);
            //"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=app.mdb", "", "", adModeUnknown);
        m_pCommand.CreateInstance(__uuidof(Command));
        m_pCommand->ActiveConnection = m_pConnection;
            _RecordsetPtr m_pRecordset;
        m_pRecordset.CreateInstance(__uuidof(Recordset)); 
        try
        {
            m_pRecordset->Open("SELECT Szss FROM Szss2013",
            m_pConnection.GetInterfacePtr(),
            // 获取库接库的IDispatch指针
            adOpenDynamic,
            adLockOptimistic,
            adCmdText);
        }
        catch(_com_error *e)
        {
            AfxMessageBox(e->ErrorMessage());
        }
        CString str;
        while(!m_pRecordset->adoEOF)
        {
            var= m_pRecordset->GetCollect("City");
            if(var.vt != VT_NULL)
                m_cb_rpo.AddString((LPCSTR)_bstr_t(var));
            m_pRecordset->MoveNext();
        }
        m_pRecordset->Close();
        }
}
catch(_com_error e)///捕捉异常
{
    CString errormessage;
    errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
    AfxMessageBox(errormessage);///显示错误信息
}

[解决办法]
连接dbf没试过,给你我连接sql server的代码。

// 连接数据库
if ( m_blIsConnectionDB )
{
return TRUE;
}

if ( NULL != m_pConnectionDB )
{
if ( m_pConnectionDB->GetState() == 1 )
{
m_pConnectionDB->Close();
}

m_pConnectionDB.Release();
}

if ( FAILED(m_pConnectionDB.CreateInstance("ADODB.Connection")) )
{
return FALSE;
}

CString str;
str.Format("Driver=SQL Server;Server=%s;Database=%s;", m_strDBIp, m_strDBName);
try
{
m_pConnectionDB->put_CommandTimeout(60);
if ( m_blReConnectionDB )
{
Sleep(100);
}

m_pConnectionDB->Open(_bstr_t(str), _bstr_t(m_strDBUserName), _bstr_t(m_strDBUserPwd), adModeUnknown);
m_blReConnectionDB = TRUE;
m_blIsConnectionDB = TRUE;
}
catch ( _com_error e )
{
return FALSE;
}

//读数据库

_RecordsetPtr pRecordset;
_variant_t Record;
FieldsPtr pFlds ;

FieldPtr pFld_Open;
FieldPtr pFld_High;
FieldPtr pFld_Low;
FieldPtr pFld_Close;
FieldPtr pFld_Volume;
FieldPtr pFld_Amount;
FieldPtr pFld_UpdateTime;
try
{
_variant_t var;
pRecordset = pConn->Execute(_bstr_t(strSql),&Record,adCmdText);

while(!pRecordset->ADOEOF)
{
}
catch(_com_error e)///捕捉异常
{
}

[解决办法]
void Test() 


{

AfxOleInit();//这个放在app类的构造函数里

_ConnectionPtr m_pConnection;
_CommandPtr m_pCommand;
_variant_t var;
HRESULT hr;
try
{
hr = m_pConnection.CreateInstance(__uuidof(Connection));///创建Connection对象
if(SUCCEEDED(hr))
{
hr = m_pConnection->Open(_bstr_t("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=szss2013.dbf;Extended Properties=dBase 5.0;Persist Security Info=False"),_bstr_t( ""), _bstr_t(""), adModeUnknown);
//com对象不接受char类型的数据
//连接串是否正确,我没有驱动,也没有数据,没办法帮你测试,你可以使用VBA生成一下,就确保正确

m_pCommand.CreateInstance(__uuidof(Command));
m_pCommand->ActiveConnection = m_pConnection;
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance(__uuidof(Recordset)); 
try
{
m_pRecordset->Open(_bstr_t("SELECT Szss FROM Szss2013"),
m_pConnection.GetInterfacePtr(),
// 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error &e)//我都是使用&e,能捕捉到错误,很多人使用*e,不知道有没有捕捉到错误?
{
AfxMessageBox(e->ErrorMessage());
}
CString str;
while(!m_pRecordset->adoEOF)
{
var= m_pRecordset->GetCollect(_bstr_t("City"));
if(var.vt != VT_NULL)
m_cb_rpo.AddString((LPCSTR)_bstr_t(var));
m_pRecordset->MoveNext();
}
m_pRecordset->Close();
}
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
};


[解决办法]
Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=c:\myvfpdbfolder;
Exclusive=No;Collate=Machine;NULL=NO;DELETED=NO;BACKGROUNDFETCH=NO;

用这个连接字符串

给分哦,实测通过了

热点排行