eMbedded Visual Tools 3.0で
CE用データアクセスアプリケーションを作る(最終回)
CEでADOを使用したアプリを作る
マイクロソフト アジア リミテッド
プロフェッショナル サポート本部
井上裕章
2001/9/5
最終回となる今回は、ADOCE(Microsoft ActiveX Data Objects for Windows CE)を使用したアプリケーションの開発について見ていきます。ビジネスアプリケーションを作るうえでデータベース機能は必要不可欠といえますが、ADOCEを使用すると、アプリケーションに容易にデータベース機能を追加することができます。
ADOCEは、Windows CEデバイス上のデータベースをプログラムで作成したり、変更したりすることが可能なコントロールです。また、その仕様はデスクトップADOのサブセットとなっているので、デスクトップPC上のプログラミングと同じADO構文をほぼそのまま使用してアプリケーションを開発できます。このためADOCEでは、既存のADOベースのアプリケーションを簡単に移植することが可能です。さらに、デスクトップPC上のデータベースとCEデバイス上のデータベースは、ActiveSyncが提供するファイルフィルタにより同期を取ることができ、複雑な同期処理をアプリケーション側で用意する必要がありません。
今回は、一例として自転車の卸店で使用するPocket PCアプリケーションを想定しました。
卸店の販売員は、自分が担当する販売店を訪問し、どの自転車を何台補充する必要があるかを確認します。その情報をPocket PCで入力し、帰社したときにデスクトップPCのデータベースに追加するというアプリケーションです。具体的には、図1のような画面により、どの販売店にどの自転車(商品)を何台補充するかという情報を入力していきます。
|
図1 Pocket PCで販売店や商品名・数量の情報を入力する |
画面上の販売店や商品の情報は、Pocket PCにあるデータベースから取り出して表示します。さらに、作成された明細データもPocket
PC上のデータベースに追加されます。販売員が会社に戻ってデスクトップPCにPocket PCをつなげると、ActiveSyncによりデスクトップPCのデータベースと同期が取られます。その際には、補充すべき商品の明細はもちろん、新たに追加された新商品なども自動的に同期が取られます。
それでは、今回のアプリケーションを開発するための手順を見ていきましょう。
■データベースの作成
データベースを作成する方法はいくつか考えられます。最も簡単な方法は、デスクトップアプリケーションであるMicrosoft Accessを使用する方法です。
Accessによるデータベースの具体的な作成方法については、ここでは触れませんが、初めての方でも、容易に図2のようなテーブルを持ったデータベース(HelloADO.mdb)が作成できるはずです。販売店や商品名なども各マスターテーブルに追加しておいてください。
販売店マスター |
SHOP_ID |
SHOP_NAME |
|
注文明細 |
ORDER_ID |
SHOP_NAME |
BIKE_NAME |
NUM |
|
図2 今回使用する3つのテーブル
次に、作成したデータベースをPocket PCにダウンロードしなければいけませんが、これはActiveSyncの機能を使用することができます。
Pocket PCとデスクトップPCがパートナー関係を結んでいれば、以下の2つのコマンドがActiveSyncのツールメニューから使用できるはずです。
- データベーステーブルのインポート
- データベーステーブルのエクスポート
データベーステーブルのインポートを選択すると、図3の画面が表示されますので、Accessで作成したデータベース(HelloADO.mdb)を選択して「開く」ボタンを押します。
|
図3 データベーステーブルのインポート |
これだけの作業で、デスクトップPC上のデータベースはPocket PCにダウンロード(インポート)されます。さらに今後ActiveSyncで接続するごとに同期が取られ、常に最新のデータに保つことができます。
■アプリケーション画面の作成
eMbedded Visual Basic 3.0を起動し、新規のプロジェクトを作成します。今回はPocket PCを対象としているので、「windows
ce for the pocket pc project」を選択してください。
次に、図1を参考に画面を作成していきます。その際、「販売店」「商品」「数量」はそれぞれComboBox(Combo_Shop、Combo_Bike、Combo_Num)、明細はListView(ListView_Details)により作成します。ただし、ListViewは前回(CE用Visual
BasicとVisual C++でできること)説明したとおり、ActiveXコントロールであるため、プロジェクトのコンポーネントメニューによりチェックボックスにチェックを付けなければ使用できません(図4)。
|
図4 ActiveXを使用できるようにする |
■アプリケーションコードの記述
アプリケーションの動作に必要なコードを追加していきます。
・プロシージャ内で使用する定数の設定を行う
各定数の詳細はeMbedded Visual Basicのヘルプによりメソッドの説明を参照してください。
Option Explicit
Const adOpenKeyset = 1
Const adLockOptimistic = 3
Const adCmdText = 1
Const adCmdTable = 2
Const adCmdStoredProc = 4
Const adCmdUnknown = 8 |
・ListView_Detailsの初期化を行う
CreateObjectによりADOCEのレコードオブジェクトを作成し、注文明細テーブルを開きます。販売店名、商品名、数量を1レコードずつ取り出し、ListView_Detailsに追加します。
Private Sub SetDetails()
Dim rs As ADOCE.Recordset
Dim itmX As ListItem
'注文明細の設定
Set rs = CreateObject("ADOCE.Recordset.3.0")
ListView_Details.ListItems.Clear
rs.Open "注文明細", "\My Documents\HelloAdo.cdb",
_
adOpenKeyset, adLockOptimistic, adCmdTable
While Not rs.EOF
Set itmX = ListView_Details.ListItems.Add(, , rs.Fields("SHOP_NAME"))
itmX.SubItems(1) = rs.Fields("BIKE_NAME")
itmX.SubItems(2) = rs.Fields("NUM")
rs.MoveNext
Wend
rs.Close
Set rs = Nothing
End Sub |
・Combo_Shopの初期化を行う
CreateObjectによりADOCEのレコードオブジェクトを作成し、販売店マスターテーブルを開きます。販売店名を1レコードずつ取り出し、Combo_Shopに追加します。
Private Sub SetShop()
Dim rs As ADOCE.Recordset
'販売店の設定
Set rs = CreateObject("ADOCE.Recordset.3.0")
Combo_Shop.Clear
rs.Open "販売店マスター", "\My Documents\HelloAdo.cdb",
_
adOpenKeyset, adLockOptimistic, adCmdTable
While Not rs.EOF
Combo_Shop.AddItem (rs.Fields("SHOP_NAME"))
rs.MoveNext
Wend
rs.Close
Set rs = Nothing
End Sub |
・Combo_Bikeの初期化を行う
CreateObjectによりADOCEのレコードオブジェクトを作成し、商品マスターテーブルを開きます。商品名を1レコードずつ取り出し、Combo_Bikeに追加します。
Private Sub SetBike()
Dim rs As ADOCE.Recordset
'商品の設定
Set rs = CreateObject("ADOCE.Recordset.3.0")
Combo_Bike.Clear
rs.Open "商品マスター", "\My Documents\HelloAdo.cdb",
_
adOpenKeyset, adLockOptimistic, adCmdTable
While Not rs.EOF
Combo_Bike.AddItem (rs.Fields("BIKE_NAME"))
rs.MoveNext
Wend
rs.Close
Set rs = Nothing
End Sub |
・追加ボタンが押されたときに、注文明細テーブルに情報を書き込む
販売店名、商品名、数量が設定されていることを確認します。CreateObjectによりADOCEのレコードオブジェクトを作成し、注文明細テーブルを開きます。販売店名、商品名、数量の情報をテーブルに書き込み、SetDetails
を呼び出しListView_Detailsを再描画します。
Private Sub Command_Add_Click()
Dim rs
Dim shopName As String
Dim bikeName As String
Dim orderNum As String
shopName = Combo_Shop.Text
bikeName = Combo_Bike.Text
orderNum = Combo_Num.Text
If Len(shopName) = 0 Then
MsgBox "販売店を選択してください"
Exit Sub
End If
If Len(bikeName) = 0 Then
MsgBox "商品を選択してください"
Exit Sub
End If
If Len(orderNum) = 0 Then
MsgBox "数量を選択してください"
Exit Sub
End If
'注文の追加
Set rs = CreateObject("ADOCE.Recordset.3.0")
rs.Open "注文明細", "\My Documents\HelloAdo.cdb",
_
adOpenKeyset, adLockOptimistic, adCmdTable
rs.AddNew
rs.Fields("ORDER_ID") = rs.RecordCount + 1
rs.Fields("SHOP_NAME") = shopName
rs.Fields("BIKE_NAME") = bikeName
rs.Fields("NUM") = orderNum
rs.Update
rs.Close
Set rs = Nothing
'注文明細リストの再描画
SetDetails
End Sub |
・Formの初期化を行う
ListView_Detailsに列を追加します。SetDetails、SetShop、SetBikeを呼び出し各オブジェクトを初期化します。
Private Sub Form_Load()
Dim rs As ADOCERecordset
Dim num As Integer
Dim clmX As ColumnHeader
'注文明細リストビューの設定
ListView_Details.View = lvwReport
Set clmX = ListView_Details.ColumnHeaders.Add(, , "販売店",
_
ListView_Details.Width / 5 * 2)
Set clmX = ListView_Details.ColumnHeaders.Add(, , "商品",
_
ListView_Details.Width / 5 * 2)
Set clmX = ListView_Details.ColumnHeaders.Add(, , "数量",
_
ListView_Details.Width / 5 * 1)
'注文明細リストの描画
SetDetails
'販売店の設定
SetShop
'商品の設定
SetBike
'数量の設定
Combo_Num.Clear
For num = 1 To 10
Combo_Num.AddItem num
Next
End Sub |
・アプリケーションを終了する
Private Sub Form_OKClick()
App.End
End Sub |
今回のサンプルプログラムのmdbファイルを含めたプロジェクト一式を用意しました。必要に応じてダウンロードしてください。
■デバッグ・実行
デバッグの「開始」メニューによりデバッグを行います。すでに、データベースはPocket PCにダウンロードされているので、そのデータベースの内容に応じて、図1の画面が表示されるはずです。デバッグ作業の中では、ブレークポイントを設定して任意の場所で止めたり、リモートツールによりデバイスの状態を確認しながらデバッグを進めることができます。
もちろん、今回のアプリケーションはPocket PC単体で実行可能です。いくつかの注文明細を入力したら、ActiveSyncで同期処理を実行してください。これにより、デスクトップPC側のデータベースが自動的に更新されることが確認できるはずです。
今回は、エラー処理もない単純なアプリケーションでしたが、ADOCEの基本的な使用方法を示しており、これを基に多くのアプリケーションが作成されれば幸いです。また、ADOCEで実現できない場合には、さらに多くの機能を持ったSQL
Server CE(Microsoft SQL Server 2000 Windows CE Edition)も用意されていますので、高度なビジネスアプリケーションの構築も可能です。
|