怎样把PC机上的*.MDB传到PDA上,PDA上的数据库传到PC机上,
用程序怎样做这个通讯问题,
用程序怎样做这个通讯问题,
解决方案 »
- Oracle数据库能否执行多条语句?
- 还是关于主从表新增记录的问题,需要朋友您详细指导!
- c/s可以作分页吗?
- 怎么做类似outlook的面板(在左侧,象导航栏,在上面新建快捷方式)!!!!!
- 关于远程*.cds文件的动态创建及及时更新?(在线等)
- 顶:[我与CSDN]一个非常重要的说明,请大家周知
- 请问怎样用adoquery实现在它的上一次查找结果中再查找?
- 如何用delphi实现图像网络传输与存储?请高手介绍方法,包括用什么库,通过TCP/IP怎么办?
- Delphi如何让另一个程序隐藏
- 问题一个:怎样通过DELPHI写程序将视频流通过转接卡发送到电视上?请大侠指教!
- 如何制作类似于QQ“个人设定中”-->"基本资料"-->"头像"自定义头像中的下拉筐!
- 文件读写问题,非常急~
我记得一般的PDA都自带了一根接口线,可能还有相应的软件支持吧.
现的PDA一般好象都用wince的操作系统,不知道和windows兼容不?
kingeast(泡泡糖):你有办法吗?
我等你的消息,我的EMAILL是[email protected]
把源代码发给我,
一、 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();
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows CE Services\Services\Synchronization\Objects\MicrosoftTable\CreateLatestJetDBVer
此表项=0时表示使用Jet 3.5 的数据库;
不过一般取非0值,表示使用Jet 4.0 数据库。
记得查看MSDN的说明,说得更详细哦。