本月
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 數據庫包含四個表
Customers
Customers 表專門用於填充設備應用程序中的組合框
該表在設備上是只讀的
Products
Products 表用於填充設備應用程序中的組合框
也是每個產品的定價信息源
該表在設備上是只讀的
Route
Route 表包含司機每天預定要訪問的客戶列表
根據這種情況
每天要用一組新客戶來生成該表
該表在設備上是只讀的
Orders
Orders 表用於存儲在字段中輸入的訂單信息
它在設計上非常簡單
表中的每個記錄代表客戶訂購的一個項目
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\adofiltr
dll
_
(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(App
Path &
\Mobile Sales
mdb
_
!Customers
!Products
!Route
Orders
False
True
_
\tonked\Mobile Sales\Mobile Sales
cdb
)
注意
該代碼位於示例的 mnuFunctionsDownload 單擊事件中
在此處
正在將 Customers
Products
Route 和 Orders 表復制到設備
其中 Customers
Products 和 Route 這三個表是只讀的
其名稱前標有
!
在這一過程中將覆蓋任何現有的表
上載訂單數據
使用 DEVICETODESKTOP 函數之前
也必須在
Mobile Sales – 桌面
窗體模塊的
一般聲明
部分聲明此函數
Private Declare Function DEVICETODESKTOP Lib _
c:\program files\Microsoft ActiveSync\adofiltr
dll
_
(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(App
Path &
\Mobile Sales
mdb
_
Orders
False
True
\tonked\Mobile Sales\Mobile Sales
cdb
)
注意
該代碼位於示例的 mnuFunctionsUpload 單擊事件中
桌面組件概述
該組件展示了將數據移到設備或從設備移回數據實現起來很簡單
利用 ADOCE API
您可以輕松地傳輸 Microsoft Access 表
注意
您可以使用示例附帶的 Microsoft Access 數據庫中的 Today
s Orders 報表來生成訂單報表
如下圖所示
圖
訂單報表
運行報表之前
您應該執行以下步驟
使用
Mobile Sales – 桌面
組件
將數據庫下載到您的設備
運行
Mobile Sales – 設備
組件
處理一些客戶訂單
使用
From:http://tw.wingwit.com/Article/os/xtgl/201311/8681.html