数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

移动数据


发布日期:2023年01月02日
 
移动数据

本月Two for the Road 专栏将我带到了阳光明媚的加利福尼亚南部海滩在这里我试图在沖浪和 Pocket PC 开发之间保持平衡做到劳逸结合开始本打算在这两者之间保持完全的平衡但是我很快惊异地发现 iPaq 在沖浪板上根本无法使用因此我只能进行单调的沖浪运动了谁曾想会是这样呢?您或许会想Compaq 可能已在用户手册中对此问题提出了某种警告

对于此问题你们不必多虑如果我能编写一个移动应用程序就好了这样就可以打消那些开发同仁们的疑虑Roof 这家伙将 iPaq 带到沖浪板上去到底想干什么?好吧我承认我需要帮助一身古铜色的皮肤和一方滴着盐水的引人注目的镇纸石这就是我此次旅行的唯一收获

好了有关我遇到的技术问题这一话题就到此为止吧现在让我们开始讨论移动数据的问题与我上个月教您构建的移动字幕应用程序有所不同那个程序的实用性和简单程度简直令人难以置信您将要构建的大多数 Pocket PC 应用程序最终或多或少都要涉及到数据问题

移动数据选项

开发移动应用程序的关键在于如何处理选项及其相关的权衡问题这同样适用于将数据集成到移动应用程序这一主题对于数据存储您可以有以下选项

顺序存取随机存取和二进制文件这些久经验证的方法使得将数据合并到应用程序变得非常简单其优点在于根据您的需要它们可以变得非常简单也可以相当复杂如果使用得当它们能够提供最好的性能不足之处在于它们往往成为专用的解决方案不易合并到企业环境

Pocket Access 数据库不要被 Pocket Access 这个名字所误导这种移动数据方案与功能强大的桌面产品 Microsoft Access 差别很大Pocket Access 缺乏窗体报表存储查询以及表之间的关系简而言之它只提供对一组表的存储和访问另外它还与 Microsoft Access 兼容支持数据同步提供一些简单的工具用于将表在设备间移动而且可以使用 ADOCE(即 ActiveX® 数据对象的移动版本)对它进行操作(这一点以后再讨论)

注意 Pocket Access 表的扩展名为 cdf

SQL Server Windows CE 版目前功能最全面性能最稳定的移动数据库非 SQL Server CE 莫属它提供的关系数据库所占空间很小但包含了一个查询处理器和一些合并复制功能和 Pocket Access 一样您可以使用 ADOCE 对 SQL Server CE 数据库进行操作事实上要将移动应用程序从用于 Pocket Access 转变为用于 SQL Server CE通常需要对代码进行小小的改动

注意 SQL Server CE 数据库的扩展名为 sdf

SQL Server CE 最适合于那些专门用来与基于企业的 SQL Server 数据库交互的应用程序不过尽管其性能卓越它却不能和 Pocket Access 一样支持简单的 ActiveSync® 和 ADOCE API

什么是 ADOCE?

使用 ADOCE就可以从移动应用程序访问 Pocket Access 和 SQL Server CE 数据库ADOCE 提供 ADO 功能的子集它包含自己的内部数据库提供程序通过该程序您可以对存储在 Pocket PC 本地的数据库进行操作使用 ADOCE还可以通过 OLEDB 提供程序来访问数据源

ADOCE 的主要优点在于您可以使用自己的桌面 ADO 编码技术来开发移动应用程序有关 ADOCE 支持哪些功能的详细信息请查阅 eMbedded Visual Basic® (eVB) 中附带的帮助

本月的应用程序Mobile Sales

我在撰写本文时意识到上个月的应用程序 Hello World 字幕具有明显的适销性以后的应用程序要想达到这一境界恐怕很难于是我决定在本月的应用程序 Mobile Sales 中加点新鲜内容尽管它可能不如 Hello World 字幕那样有吸引力却说明了如何利用 ADOCE 将存储在 Pocket Access 数据库中的数据合并到移动解决方案

Mobile Sales 展示了使用 Pocket PC 很容易就能使交货过程自动化使用 Mobile Sales交货人员能够快速填写每一地点订购的订单这样当他们进货时只需要选择要添加到订单的每个项目的类型和数量该数据存储在 Pocket PC 上的表中可以从它下次连接的设备处检索该表

Mobile Sales 由以下两个组件组成

桌面交货应用程序

移动条目应用程序

我将带您一步步浏览这两个应用程序以便在浏览之后您对分发使用和收集移动应用程序生成的数据这整个过程能有一个全面的了解

Mobile Sales 数据库

用于 Mobile Sales 的 Microsoft Access 数据库包含四个表

CustomersCustomers 表专门用于填充设备应用程序中的组合框该表在设备上是只读的

ProductsProducts 表用于填充设备应用程序中的组合框也是每个产品的定价信息源该表在设备上是只读的

RouteRoute 表包含司机每天预定要访问的客户列表根据这种情况每天要用一组新客户来生成该表该表在设备上是只读的

OrdersOrders 表用于存储在字段中输入的订单信息它在设计上非常简单表中的每个记录代表客户订购的一个项目

Mobile Sales 桌面组件

Mobile Sales 桌面组件负责将数据库传输到设备然后从设备检索回单个 Orders 表其界面非常简单如下图所示

Mobile Sales 桌面界面

Mobile Sales – 桌面使用 ADOCE API 来执行这些传输ADOCE 提供了程序方法用于将表传输到设备或从设备传输表ADOCE API 简单得令人难以置信它只包含两个函数DESKTOPTODEVICE 和 DEVICETODESKTOP

DESKTOPTODEVICE 用于将表从 Microsoft Access 桌面数据库复制到 Pocket Access 设备数据库该函数的语法为

DESKTOPTODEVICE(DesktopLocn TableList Sync Overwrite DeviceLocn)

其中

DesktopLocn 是包含要传输的表的 Access 数据库的路径和文件名您还可以将 DSN 用作该值

TableList 是要复制的表和字段的列表

该参数的格式为

[!]表名字段名

前导 ! 用于指定表是只读的

Sync 定义 ActiveSync 是否应维护桌面和设备数据库之间的同步

Overwrite 指定是否应覆盖任何现有的表

DeviceLocn 是指设备上的 Pocket Access 数据库的路径和文件名

DEVICETODESKTOP该函数用于将表从 Pocket Access 设备数据库复制到 Microsoft Access 桌面数据库该函数的语法为

DEVICETODESKTOP(DesktopLocn TableList Sync Overwrite DeviceLocn)

DEVICETODESKTOP 函数的参数与 DESKTOPTODEVICE 函数中所用参数完全相同

下载 Mobile Sales 数据

使用 DESKTOPTODEVICE 函数之前必须在Mobile Sales – 桌面窗体模块的一般声明部分声明此函数如下所示

Private Declare Function DESKTOPTODEVICE Lib _

c:\Program Files\Microsoft ActiveSync\adofiltrdll _

(ByVal desktoplocn As String _

ByVal tablelist As String _

ByVal sync As Boolean _

ByVal overwrite As Integer _

ByVal devicelocn As String) As Long

然后使用以下代码将这四个表从桌面 Microsoft Access 数据库复制到设备 Pocket Access 数据库

lResult = DESKTOPTODEVICE(AppPath & \Mobile Salesmdb _

!Customers!Products!RouteOrders False True _

\tonked\Mobile Sales\Mobile Salescdb)

注意该代码位于示例的 mnuFunctionsDownload 单击事件中

在此处正在将 CustomersProductsRoute 和 Orders 表复制到设备其中 CustomersProducts 和 Route 这三个表是只读的其名称前标有! 在这一过程中将覆盖任何现有的表

上载订单数据

使用 DEVICETODESKTOP 函数之前也必须在Mobile Sales – 桌面窗体模块的一般声明部分声明此函数

Private Declare Function DEVICETODESKTOP Lib _

c:\program files\Microsoft ActiveSync\adofiltrdll _

(ByVal desktoplocn As String _

ByVal tablelist As String _

ByVal sync As Boolean _

ByVal overwrite As Integer _

ByVal devicelocn As String) As Long

然后使用以下代码将 Orders 表从设备 Pocket Access 数据库复制到桌面 Microsoft Access 数据库

lResult = DEVICETODESKTOP(AppPath & \Mobile Salesmdb _

Orders False True \tonked\Mobile Sales\Mobile Salescdb)

注意该代码位于示例的 mnuFunctionsUpload 单击事件中

桌面组件概述

该组件展示了将数据移到设备或从设备移回数据实现起来很简单利用 ADOCE API您可以轻松地传输 Microsoft Access 表

注意您可以使用示例附带的 Microsoft Access 数据库中的 Todays Orders 报表来生成订单报表如下图所示

订单报表

运行报表之前您应该执行以下步骤

使用Mobile Sales – 桌面组件将数据库下载到您的设备

运行Mobile Sales – 设备组件处理一些客户订单

使用               

上一篇:数据仓库元数据管理

下一篇:windows事件日志写入sqlserver