怎样把PC机上的*.MDB传到PDA上,PDA上的数据库传到PC机上,
  用程序怎样做这个通讯问题,

解决方案 »

  1.   

    要有接口的.
    我记得一般的PDA都自带了一根接口线,可能还有相应的软件支持吧.
    现的PDA一般好象都用wince的操作系统,不知道和windows兼容不?
      

  2.   

    如果你的PDA是WINCE操作系统,他能够识别一些WINDOWS的文本文件,不数据库我没有试过,但你可以试一下,应该要在高版本的WINCE操作系统上,好像是3.0吧,传输是利用一个同步软件,该软件可以在网上下载得到。我传输过WORD、EXCEL都是可以的但ACCESS我没有试过,不过也应该可以。
      

  3.   

    有同步软件Microsoft ActiveSync但我需要用程序实现。
     kingeast(泡泡糖):你有办法吗?
      

  4.   

    WINCE中是*.cdb文件,通过ActiveSync中的一些函数调用,可以上传、下载ACCESS的*.mdb数据库到CE,可选中若干表的全部或部分字段,在CE中会生成*.cdb文件,一个文件对应一个表。我记得是这样,如果需要源代码,要等一两天,我需要时间整理出来。
      

  5.   

    taozc(陶) :
      我等你的消息,我的EMAILL是[email protected]
      把源代码发给我,
      

  6.   


    一、 PDA数据库操作说明:
    1、 Windows CE系统的数据库被定位在对象存储(Object Store)中。对象存储是掌上计算机内存的一部分,是操作系统分配来存储永久档、注册表、Windows CE 数据库的。Windows CE数据库的名称是“cedb”,类似于大型数据库的表空间名,每个数据表在其中就是一个*.cdb文件。这种数据库支持数据压缩、搜索、排序以及通过 Microsoft ActiveSync(或通过编程调用ActiveSync提供的函数) 来与桌面 PC 进行数据同步。2、 Microsoft ActiveSync安装后,在其安装目录下有两个DLL文件:adofiltr.dll、ceutil.dll。adofiltr.dll中有两个函数可供使用:
    A、 void DesktopToDevice(LPCSTR DesktopLocn,LPCSTR TableList,BOOL Sync,BOOL Overwrite,LPCSTR DeviceLocn);
    B、 void DeviceToDesktop (LPCSTR DesktopLocn,LPCSTR TableList,BOOL Sync,BOOL Overwrite,LPCSTR DeviceLocn);
    C、 这两个函数的参数是一样的,简单说明如下:
    LPCSTR DesktopLocn  PC上的*.mdb文件名
    LPCSTR TableList   数据表及字段列表,参见MSDN中的详细说明
    BOOL Sync        =TRUE时允许ActiveSync功能
    BOOL Overwrite    =TRUE时覆盖PDA中同名的数据表
    LPCSTR DeviceLocn   可指定PDA中的表名,一般是个空串,使用源表名。
    这两个函数一次上传/下载一个表。

        ceutil.dll中有一个函数可供使用:
           DWORD ceGetDeviceId(void);
           此函数返回0,表示PDA还未与PC联接好;
                 返回非0数值,表示PDA已经与PC联接好了。二、开发工具与环境说明:
    本程序采用Microsoft eMbedded Visual C++ 3.0 集成环境开发,PDA仿真系统及SDK为Microsoft Windows Platform SDK for Pocket PC,数据库访问部份使用ADOCE 3.0 。
    PC端使用C++ Builder开发。三、VOADOConnection类与VADORecordset类使用说明:
    VOADOConnection与VOADORecordset是Virtual Office系统公司发布的基于ADOCE3.0的免费数据库连接及记录集封装类,可在eVC程序中使用这两个类来操作对象存储区内的数据库。
    1、从数据库中获取记录
       以下程序说明如何从LOT表中获取记录内容,并存放到字符串数组SS中。
    extern CString SLotID,ST_ID;  //用户选择的LOTID和WORKCTR
    CVOConnection m_Conn;  //定义数据库连接,自动联接到WinCE的“cedb”表空间
    CVORecordset rs(m_Conn);    //定义记录集
    CString sTmp,ss[30]; sTmp=_T("select * from LOT where LOTID=\""+SLotID+"\" and WORKCTR=\""+ST_ID+"\"");
    rs.Open(sTmp);
    if (!rs.IsOpen())
    {
    AfxMessageBox(_T("Cannot open LOT !"));
    this->EndDialog(1);
    return; //close form & exit
    }
    if (!rs.IsEOF())
    {
    iCount=rs.GetFieldCount();
    for(i=0;i<iCount;i++)
    ss[i]=rs.GetFieldValueString(i);
    }
    rs.Close();2、更新数据库内容
       以下例程说明如何向LOT表中更新记录内容。
    extern CString SLotID,ST_ID;
    CVOConnection m_Conn;
    CVORecordset rs(m_Conn);
    CString sTmp;
    VARIANT uVal; //update LOT.
    sTmp=_T("select status from LOT where LOTID=\""+SLotID+"\" and WORKCTR=\""+ST_ID+"\"");
    rs.Open(sTmp,adOpenDynamic,adLockOptimistic);
    if (!rs.IsOpen())
    {
    AfxMessageBox(_T("Cannot open LOT to update!"));
    this->EndDialog(1);
    return; //close form & exit
    }
    VariantClear(&uVal);
    uVal.vt=VT_BSTR;
    uVal.bstrVal=_T("3");
    if (!rs.SetFieldValue(0,uVal)) //update LOT.STATUS
    AfxMessageBox(_T("update LOT Error!"));
    rs.Close();
      

  7.   

    使用前需在PC注册表中设置如下表项:
       HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows CE Services\Services\Synchronization\Objects\MicrosoftTable\CreateLatestJetDBVer
       此表项=0时表示使用Jet 3.5 的数据库;
       不过一般取非0值,表示使用Jet 4.0 数据库。
      

  8.   

    PC端上传/下载只是用到那三个函数,比较简单,而且我的源程序是C++ BUILDER写的,懒得转到DELPHI了,你自己写吧。
    记得查看MSDN的说明,说得更详细哦。