我现在要建立一个上位机,上位机要实现串口通信和添加数据库,串口通信已经实现了,现在需要添加数据库ADO,希望通过串口获取的数据能够保存到ADO数据库中,还要求能够从ADO数据库中读取相关的数据,显示到MFC创建的基于对话框的编辑框中,对ADO的了解比较少,在网上查了一些相关的ADO操作,只有一些基本的操作,而且只有修改ADO的数据,比如说添加数据,删除数据等,而且只是基于对话框的上的按钮来实现的,要想读取相关的数据,并能够将读取的数据以曲线的形式表示出来,该怎么做,如何将串口的数据写入创建的ADO数据库中,还请高手指导,是不是需要在通信协议里添加什么东西??

解决方案 »

  1.   

    你应该去找ADO的封装类。另外ADO本身并不是数据库阿。
      

  2.   

    ADO来操作数据库,而你的串口数据自己先组织好,然后用sql语句等写入数据库就可以了曲线又是另一个模块,专门用来画图,然后把你组织好的数据交给它来画
      

  3.   

    LZ:
       串口通讯是设备数据采集部分
       读取的数据以曲线的形式表示出来,这是界面显示部分
       将串口的数据写入创建的ADO数据库中,这是数据库读写部分
       以上部分是相对独立的,共享的是存储数据的内存,即数组    数据库读写部分需要以下操作:1.通过SQLSERVER或者其他建立数据库的表等
    2.使用ADO建立与数据库连接
    3.通过ADO操作SQL语句来读写数据表的记录或者字段   具体参考VC6操作ADO方面的资料
      

  4.   

     数据库读写部分需要以下操作:1.通过SQLSERVER或者其他建立数据库的表等
    我建立的数据库是Access的,穿件数据库的同时穿件了数据表
    2.使用ADO建立与数据库连接
    ADO数据库的链接按照相关的步骤已经连接上了
    3.通过ADO操作SQL语句来读写数据表的记录或者字段
    主要是这步不会做,我该怎样写相关的代码来读取数据库的内容?并将内容显示到我的编辑框中呢?再次我自己创建的数据库现在没有数据,自己写入一些数据是不是可以,然后该怎么做才能把自己写的数据显示到编辑框中,至于 “读取的数据以曲线的形式表示出来,这是界面显示部分”显示部分该怎么做?是要添加teechar这个控件吗??还请高手指导啊!!我的qq442931431,有时间晚上能交流一下吗??
      

  5.   

    作业贴?
    网上例子大把,http://www.codeproject.com 上面有个ado封装类,很不错,应该也带简单的例子。 自己找,别什么都指望别人。
      

  6.   

    给段示例:
    STDMETHODIMP CUserManager::AddMeter(IMeter *pMeter)
    {
    AFX_MANAGE_STATE(AfxGetStaticModuleState()) // TODO: Add your implementation code here
    HRESULT hr;
    CString sql;
    _ConnectionPtr adoConn;
    _RecordsetPtr adoRs1;
    DataCmn::IMeterPtr pTempMeter;
    _variant_t v; if (pMeter == NULL)
    return E_POINTER;
    if (FAILED(hr = pMeter->QueryInterface(__uuidof(IMeter), (void**)&pTempMeter)))
    return E_POINTER;
    try
    {
    hr = adoConn.CreateInstance(__uuidof(Connection));
    hr = adoRs1.CreateInstance(__uuidof(Recordset));
    hr=adoConn->put_ConnectionTimeout(30);
    hr = adoConn->Open((BSTR)m_ConnectionString, L"", L"", adCmdUnspecified);

     
    sql= L" Meter ";
    hr = adoRs1->Open((LPCTSTR)sql, (IDispatch *)adoConn, adOpenStatic,adLockOptimistic,adCmdTable);
    hr = adoRs1->AddNew(); v = pTempMeter->MeterNo;
    if (v.vt != VT_EMPTY)
    adoRs1->PutCollect(L"MeterNo", v);
    v = pTempMeter->Name;
    if (v.vt != VT_EMPTY)
    adoRs1->PutCollect(L"Name", v);
    v = pTempMeter->UserID;
    if (v.vt != VT_EMPTY)
    adoRs1->PutCollect(L"UserID", v);
    v = pTempMeter->Phase;
    if (v.vt != VT_EMPTY)
    adoRs1->PutCollect(L"Phase", v);
    v = pTempMeter->Ratio;
    if (v.vt != VT_EMPTY)
    adoRs1->PutCollect(L"Ratio", v);
    v = pTempMeter->CapID;
    if (v.vt != VT_EMPTY)
    adoRs1->PutCollect(L"CapID", v);
    v = pTempMeter->Charge;
    if (v.vt != VT_EMPTY)
    adoRs1->PutCollect(L"Charge", v);
    hr = adoRs1->Update();
    hr = adoRs1->Close();adoRs1.Release();
    pTempMeter.Release();
    }
    catch(_com_error e)
    {
    if(e.Description().length()>0)
    return AtlReportError(__uuidof(UserManager), (BSTR)e.Description(), IID_IUserManager, e.Error());
    else
    return AtlReportError(__uuidof(UserManager), e.ErrorMessage(), IID_IUserManager, e.Error());
    } return S_OK;
    }