テクニカルノート10: ADOCE

July 17, 2003

© NSB Corporation. All rights reserved.

Go to English page.
マイクロソフト社のドキュメントも参考にして下さい。

ADOCEはMicrodoftの"Active Data Object for Windows CE"です。SQLのようなデータベースActiveXオブジェクトであり、デスクトップ上でMicrosoft Accessデータベースとのやりとりを可能にします。

これの使用は比較的単純ですが、ここでは全ての内容をカバーすることは出来ません。ドキュメントはMicrosoft(または他)から入手可能です。

全てのHPC 2000、Pocket PC、Pocket PC 2002デバイスはADOCEが予めインストールされています。他のデバイスには、当社のダウンロードページからインストーラを入手して下さい。HPCデバイスはこれらのファイルをダウンロードする必要がありますが、HPC/Proデバイスは基本的に必要ありません。

MicrosoftからADOCE for Windows CE 2.11 Palm-size PCが現在入手可能です。本ドキュメントの最後に、Greg Kelly による、Palm-size デバイス上でのADOCEの使用に関する記述を追加してあります。

ドキュメント

  1. このサイトに有用な資料があります。eVB用に書かれていますが、NS Basic/CEにも適用する内容です:http://www.devbuzz.com(英語)
  2. マイクロソフトに"Developing Data Access Applications for Microsoft Windows CE with ADOCE"とタイトルされた記事があります。(英語)
  3. Tony Scarpelli 氏が"ADOCE 102: An Introduction"を寄稿してくれています。
  4. マイクロソフトは"ADOCE for ADO Programmers"

注記およびプログラムの癖

  1. 正しい操作を行わない場合、良くないことが起こりますので気を付けて下さい。実行時にハングしたり、システム自体がメモリ不足を起こしたりします。ここに挙げるものは、行ってはいけないことです:
    a. MoveNextやMoveBackでファイルの限界を越えないで下さい。
       b. 開いていないオブジェクトに対し、Closeコールを発しないで下さい。
    c. BOFまたはEOFがtrueになっているレコードセットのField配列に触れないで下さい。
  2. ADOオブジェクトを得るにはCreateObjectメソッドを使用し、AddObjectを使用してはいけません。
  3. サンプルを試すには、mSysTablesやmSysFieldsコマンドを使用出来ますが、これらの上で、AddやDeleteボタンを試さないで下さい。これらはシステムデータベースです。
  4. Windows CE Services 2.xを一度もインストールしたことはないが、 ActiveSync 3.0はインストールされている場合、ADOCEはWindows CE Serviceがない為にインストール出来ないと警告を出し、インストール中に止まります。これを回避するには、ADOCE.STFファイルを開き、以下のラインを書き換えて下さい。

    2 Windows CE Services 2.0 CustomAction "adosetup.dll, AddAppSrch,""Required,C:\,ceappmgr.exe,2.0,3 4"""

    を以下のように

    2 Windows CE Services 2.0 CustomAction "adosetup.dll, AddAppSrch,""Required,C:\,ceappmgr.exe,3.0,3 4"""
        
  5. RS.Openの最初の引数を空白のままにしないで、テーブル名を入れて下さい。
    例: RS.Open "MyTable",DBName,2,3
  6. レコードを読む時は、その前のレコードが完全に読込まれたことを確認して下さい。これをしないと、"\Windows\msdaer.dll" is not installed on this device." のようなメッセージ現れます。
  7. Windows Mobile 2003 (Pocket PC 2003) では、マイクロソフトはPocket Databaseファイル(.cdb)の内部フォーマットを変更しています。Windows CE 3.0 またはPocket PC 2002環境で作られたPocket Databaseファイルを使う場合、マイクロソフトから提供されている、データベース変換プログラムを使って変換しなくてはなりません。 http://www.microsoft.com/downloads/details.aspx?familyid=636008aa-a011-4188-a1aa-4dd723e315bf&displaylang=enを参照して下さい。

オブジェクトの作成

ADOCEレコードセットオブジェクトを開くには、次の事をして下さい。
Set RS = CreateObject("adoce.recordset")

Pocket PCおよびPocket PC 2002には、次の使用して下さい。
Set RS = CreateObject("adoce.recordset.3.0")


メソッド

RS.addNew

引数は無。フィールド追加のシークエンスを開始。新しいレコードを開始。

RS.close

現在のデータベースを閉じる。

RS.delete

現レコードを削除。他へと移動することを注意。

RS.fields

("myFieldName")=value. 現レコードのフィールドの値を変更。

RS.move

NumRecords, StartNumRecordsは移動するレコード数で、正数および、負数、0も可。Startは0の場合、現レコードから始める(デフォルト)、1の場合は最初のレコードから、2の場合は最後のレコードから始める。

RS.moveFirst

最初のレコードへ移動。

RS.moveLast

最後のレコードへ移動。

RS.moveNext

次のレコードへ移動。

RS.movePrevious

前のレコードへ移動。

RS.open

Source, active connection, cursor type, lock type, options

データベースを開くか、SQLコマンドをデータベースへ送る。

Source: 必須、文字列型

オプションのフラグにより、名前またはSQLコマンド。SQLの詳細は以下を参照。

active connection: オプション、常に""、またはデータベースの名前でも可。

cursor type: オプション、整数型

adOpenForwardOnly: 0. データを通して前へのみ移動出来る。

adOpenKeySet: 1. どの方向へも移動出来る。

Lock type: オプション、整数型

AdLockReadOnly: 1. Read only

AdLockOptimistic: 3. Read, write, modify, delete OK.

Options: オプション、整数型

AdCmdText: 1. SourceはSQLステートメント

AdCmdTable: 2. Sourceは表の名前

AdCmdStoredProc: 4. Sourceは保管されているプロシージャ(実行されてはいない)

AdCmdUnknown: 8. Sourceのタイプは不明

(例)データベースを開き選択をする
rs.open "select * from 3752j","\my documents\db1.cdb"

RS.update

引数無し。現レコードを表に書く。

 

プロパティ

RS.BOF

ファイルの始り。 True/False

RS.EOF

ファイルの終り。 True/False

RS.Fields("myFieldName").value

現レコード内のフィールドの値を返す。

 

SQLコマンド

SQL (Standard Query Language) コマンドを処理する能力が、ADOをパワフルにしています。SQLに関する本やリソースはたくさん出ています。ADOCEはそれらの全てをサポートしていませんが、以下のアイテムに関しては問題なく動作するはずです。

CREATE INDEX PRIMARYKEY ON

myTableName myFieldName
primary indexを作成。同期の為に必要。

CREATE TABLE

myTableName (FieldList)
新しい表を作成。FieldListの名前をどう選ぶかは注意が必要:DESC等はキーワード。FieldListはフィールド名とタイプのリスト。例えば (company int, name varchar(9))。有効なタイプは INT, FLOAT, BIT, VARCHAR, DATETIME, TEXT等。

DELETE

myTableName WHERE myFieldName='Kenny'
相当するレコードを削除。WHERE節がない場合は全てを削除。

DROP TABLE

MyTableName.
表を削除。

INSERT INTO

myTableName (fieldList) (valueList)
AddNew/field/updateメソッドを使っても同じことが出来る。

SELECT

* FROM myTableName WHERE myFieldName LIKE 'Ken' ORDER BY myFieldName1 myFieldName2 myFieldName3
レコードのリストを使用する為に、選択およびソート。

 

ADO and Pocket Access

ADOとPocket Accessの使用を試みている人の為に、どのように行うかの簡単な例を示します。 彼等のヘルプに感謝してMicrosoftの Matt Woodward氏、及び John Riekena氏に脱帽。 このサンプルはEmployeesの表から、"My Documents"内にあるNorthwindへ名前を読み込みます。

Private Sub cmbTest_Click()
  Dim EmployeeRS

' Setup an error handler.
  On Error Then Resume Next

' Retrieve data from the Employee table.
  Set EmployeeRS = CreateObject("adoce.recordset")
  EmployeeRS.Open "SELECT * FROM Employees", "\My Documents\Northwind.cdb",
adOpenDynamic, adLockOptimistic

' Loop through the recordset loading names into a combo box.
  Do While Not EmployeeRS.EOF
    cmbEmployees.AddItem EmployeeRS.Fields("LastName") & ", " &
EmployeeRS.Fields("FirstName")
    cmbEmployees.MoveNext
  Loop

' Select the first employee in the list.
  cmbEmployees.ListIndex = 0

End Sub

 

ADO and External Databases

H/PC ProのADOCEは外部データベースをサポートします。それらを利用する為には、外部データベースのファイル名を文字列として、接続パラメータに入れて渡します。Larry 氏がこれに関する事を掲示してくれましたが、再現では問題はありません。

ADOCEはcreate databaseシンタックス、"create database '\database.cdb'"と"drop database '\database.cdb'"、もサポートサポートしています。以下は、t1の名前の表を持つデータベースを常に再生する、サンプルコードです。

    ' include constants from Appendix A below as needed

    On Error Resume Next

    rs.Open "drop database '\ado.cdb'"
    On Error GoTo 0

    rs.Open "create database '\ado.cdb'"
    rs.Open "create table t1 (c1 integer, c2 varchar(200))", "\ado.cdb"

    rs.Open "select c1, c2 from t1", "\ado.cdb", adOpenDynamic, adLockOptimistic

    rs.AddNew
    rs.Fields("c1") = 1
    rs.Fields(1) = "t1 -- One"
    rs.Update

    rs.AddNew
    rs.Fields("c1") = 2
    rs.Fields(1) = "Xt1 -- Two"
    rs.Update

    rs.AddNew
    rs.Fields("c1") = 3
    rs.Fields(1) = "t1 -- Three"
    rs.Update

    rs.AddNew
    rs.Fields("c1") = 4
    rs.Fields(1) = "Xt1 -- Four"
    rs.Update

    rs.AddNew
    rs.Fields("c1") = 5
    rs.Fields(1) = "t1 -- Five"
    rs.Update

    rs.AddNew
    rs.Fields("c1") = 6
    rs.Fields(1) = "t1 -- Six"
    rs.Update

    rs.Close

 

サンプルコード

このプログラムはSQLコマンド(Create table、Select等)の入力を許容します。

'In the case of a command that produces a recordset (ie select) then the first three fields
'of the recordset are displayed. The user may Add new records, modify existing data or
'delete existing records.

Option Explicit
'-----------------------------------------------------------
' ADO Cursor Types
'-----------------------------------------------------------
Const adOpenForwardOnly = 0
Const adOpenKeyset = 1
'-----------------------------------------------------------
' ADO Lock Types
'-----------------------------------------------------------
Const adLockReadOnly = 1
Const adLockOptimistic = 3

dim cmdAddNew_enabled, cmdDelete_enabled, sqlCommand, rs_opened, num_fields, RS
rs_opened = 0
sqlCommand=""
form_load
on error resume next
set RS=createObject("adoce.recordset")
if err then
  err.clear
  set RS=createObject("adoce.recordset.3.0") 'for Pocket PC
end if  
if err then
  msgBox "Active Data Objects (ADOCE) must be installed for this sample to work. Please check the Tech Notes for more information."
  err.clear
  bye
end if
on error goto 0

Sub Execute_Click()
  On Error Resume Next
  Dim fcol
  cmdaddnew_Enabled = False
  cmdDelete_Enabled = False

  If rs_opened = 1 Then ' previous command has used the Recordset object. Close the old one
    RS.Close
    If Err Then ChkErr
    rs_opened = 0
  End If
'
'Open the ADOCE Recordset using the SQL statement that the user has typed in.
'Using adOpenKeyset to allow backward scrolling and adLockOptimistic to allow
'entry of data into the database
'
  RS.Open txtsql.text, , adOpenKeyset, adLockOptimistic
  txtResult.cls
  txtResult.drawText Hex(Err) & " -" & Err.Description
  if err then exit sub
  Set fcol = RS.fields
  Num_fields = fcol.Count
  
  If Num_fields Then
    '
    'If the Recordset returned has fields then assume that the sql statement was a Select
    'and has returned a recordset to browse. If Num_fields has no value then the SQL will
    'still have been executed eg a create table command.
 
    'Disable / Enable the Addnew button if the Addnew method is supported for this recordset
    cmdaddnew_Enabled = RS.supports(adAddNew)
 
    'Disable / Enable the Delete button if the delete method is supported for this recordset
    cmdDelete_Enabled = RS.supports(adDelete)
    rs_opened = 1
    RefreshForm
  End If
End Sub

Sub RefreshForm() 'This routine transfers the data to the form
  dim s
  'On Error Resume Next
  Dim NumFieldstoDisplay
  Dim fcol    ' FIELDS COLLECTION
  Dim fld     ' FIELD
  Dim lp      ' Loop value

'Display Status bar information
  txtcrecs.cls
  txtcrecs.drawtext "Record #" & RS.absoluteposition & " of " & RS.recordcount & " records."

'Create field object for fastest access
  Set fcol = RS.fields
'
'loop thru the field collection and display each field

  NumFieldstoDisplay = min(12, Num_fields)
  s=""
  For lp = 1 To NumFieldstoDisplay
    'create field object from the fields collection
    Set fld = fcol(lp - 1)
    If Err Then ChkErr

    s=s & fld.name
    s=s & ":" & fld.value
    s=s & vbCrLf
  Next
  txtField1.cls
  txtField1.fontname="arial"
  txtField1.fontsize=8
  txtField1.drawtext s
End Sub

Sub addnew_Click()
  if cmdAddNew_enabled=false then exit sub
  On Error Resume Next
  Dim NumFieldstoDisplay, lp, f(3)

  NumFieldstoDisplay = min(2, Num_fields)
  If NumFieldstoDisplay  0 Then
 
    'swap the data from the form into an Array
    f(1) = txtField1
    If NumFieldstoDisplay = 1 Then f(2) = txtField2
    If NumFieldstoDisplay = 2 Then f(3) = txtField3
 
    'Transfer the data to the field value property prior to the update. 
    'Remember that the Fields collection is Zero based.
    RS.addnew
    For lp = 1 To NumFieldstoDisplay
      RS.fields(lp - 1).Value = f(lp)
      If Err.Number Then ChkErr
    Next
 
    RS.Update
    If Err.Number Then ChkErr
  End If
End Sub

Sub Delete_Click()
  if cmdDelete_enabled=false then exit sub
  On Error Resume Next
  RS.Delete
  If Err <> 0 Then ChkErr
  cmdDelete_Enabled = False
  RefreshForm
End Sub

Sub ChkErr()
  On Error Resume Next
  If Err.Number <> 0 Then
    MsgBox "Error: " & Hex(Err) & " -" & Err.Description
  End If
End Sub

Sub cmdMoveFirst_Click()
  if rs_opened=0 then exit sub
  On Error Resume Next
  RS.MoveFirst
  If Err <> 0 Then ChkErr
  RefreshForm
End Sub

Sub cmdMoveLast_Click()
  if rs_opened=0 then exit sub
  On Error Resume Next
  RS.MoveLast
  If Err <> 0 Then ChkErr
  RefreshForm
End Sub

Sub cmdMoveNext_Click()
  if rs.absolutePosition=rs.recordCount then exit sub
  On Error Resume Next
  RS.MoveNext
  If RS.EOF Then RS.MoveLast
  If Err <> 0 Then ChkErr
  RefreshForm
End Sub

Sub cmdMovePrev_Click()
  if rs.absolutePosition<=1 then exit sub
  On Error Resume Next
  RS.moveprevious
  If RS.BOF Then RS.MoveFirst
  If Err <> 0 Then ChkErr
  RefreshForm
End Sub

Sub Form_Load() 'set up screen objects

  addObject "textbox","txtsql",10,10,300,18
  txtsql.text= ""

  addObject "picturebox","txtField1",10,30,300,98
  txtField1.borderstyle=1
  
  addObject "commandButton","Execute",320,10,60,18
  addObject "commandButton","AddNew",320,30,60,18
  addObject "commandButton","Delete",320,50,60,18

  addObject "picturebox","txtResult",10,132,300,18
  txtResult.borderStyle=1

  addObject "commandButton","cmdMoveFirst",320,112,30,18
  cmdMoveFirst.text= "<<"
  addObject "commandButton","cmdMovePrev",350,112,15,18
  cmdMovePrev.text="<"
  addObject "picturebox","txtcrecs",320,132,120,18
  txtcrecs.borderstyle=1
  addObject "commandButton","cmdMoveNext",395,112,15,18
  cmdMoveNext.text= ""
  addObject "commandButton","cmdMoveLast",410,112,30,18
  cmdMoveLast.text= ""

End Sub

Function min(a, b)
  min = a
  If b < a then min=b
End function

 

これは外部変数にのみ基づいて"browse file"を実行するプロシージャです。これはGilbert Vuilleumier氏, gilbert.vuilleumier© span.chに寄稿して頂きました。

パラメータ:
Filename Database File name
F_ID Array that will receive the recordset
Filter Database filter
Gridx Grid object name
Lines Number of apparent lines of the grid
Cols Columns descriptor bi-dimensionnal array, one line for each column of the grid, Each line contains 3 elements: title (not used), width,column number
PS is a 4-element array that contains X-pos, y-pos, width, height of the grid object

Sub BrowsePanel(FileName, F_Id, R_Set, Filter, Gridx, Lines, Cols, PS )
'**********************************************************************
  VBCEutil.WaitCursor True
  dim Ix,Jx,SQLC,S,X,Y,L,H                                              '
Create a drop list from a structured data file
  Set R_Set = CreateObject("adoce.recordset")
  if Filter ="" then
    SQLC = "SELECT * from " & FileName
  else
    SQLC = "SELECT * from " & FileName & " WHERE " & Filter
  end if
  R_Set.open SQLC ,vbNullString,1, 1
  If R_Set.RecordCount>0 Then
    R_Set.MoveFirst
    F_Id = R_Set.GetRows()
  Else
   F_Id = array("")
  End If
  Execute "NewGrid  = not IsObject(" & Gridx & ")"
  if NewGrid  then
    AddObject "GridCtrl.GridCtrl.1",Gridx,PS(0),PS(1),PS(2),PS(3)
  Else
    X = PS(0) * 15
    Y = PS(1) * 15
    L = PS(2) * 15
    H = PS(3) * 15
    Execute Gridx & ".Move " & X & "," & Y & "," & L & "," & H
'    GR_ID.Move 0,30
    Execute Gridx & ".CellBackColor = vbWhite"
  end if
  Execute Gridx & ".Rows = " & R_Set.RecordCount
  Execute Gridx & ".Cols = " &  1+ Ubound(Cols(0))
  For Ix=0 to Ubound(Cols)
    Jx = Cols(Ix)(1) * 13.5
    Execute Gridx & ".ColWidth(" & Ix & ") = " & Jx         ' twips->pixels conversion
  Next 'Ix
  For Jx=0 To R_Set.RecordCount-1
    For Ix=0 to Ubound(Cols(0))
      S = F_Id(Ix,Jx)
      Execute Gridx & ".TextMatrix(" & Jx & "," & Ix & ") = " & chr(34) & S & chr(34)
    Next 'Ix
  Next 'Jx
  R_Set.close
  set R_Set = nothing
  Dim code
  code = "sub " & Gridx & "_EnterCell" & vbCrLf & Gridx & ".CellBackColor =vbRed" &_
vbCrLf & "N_Categ.Text = GR_ID.TextMatrix(GR_ID.RowSel,1)" & vbCrLf & "End Sub" & vbCrLf
'  Execute code
  code = "sub " & Gridx & "_LeaveCell" & vbCrLf & Gridx & ".CellBackColor = vbWhite" &_
vbCrLf & "End Sub" & vbCrLf
  Execute code
  VBCEutil.WaitCursor False
End Sub

Appendix A: List of ADO Constants

'-----------------------------------------------------------
' Declarations For VBA Errors
'-----------------------------------------------------------
  Const vbErrInvalidArg = 5
  Const vbErrOverflow = 6
  Const vbErrOutOfMemory = 7
  Const vbErrOutOfRange = 9
  Const vbErrTypeMismatch = 13
  Const vbErrOutOfStringSpace = 14
  Const vbErrObjectNotSet = 91
  Const vbErrUnInitForLoop = 92
  Const vbErrBadUseOfNull = 94
  Const vbErrObjectRequired = 424
  Const vbErrCantCreate = 429
  Const vbErrNotSupported = 438
  Const vbErrInvalidAssignment = 450
  Const vbErrNotCollection = 451
'-----------------------------------------------------------
' Declarations For ADO Errors
'-----------------------------------------------------------
  Const adErrInvalidArgument = &HBB9
  Const adErrNoCurrentRecord = &HBCD
  Const adErrIllegalOperation = &HC93
  Const adErrFeatureNotAvailable = &HCB3
  Const adErrItemNotFound = &HCC1
  Const adErrObjectNotSet = &HD5C
  Const adErrDataConversion = &HD5D
  Const adErrObjectClosed = &HE78
  Const adErrObjectOpen = &HE79
  Const adErrProviderNotFound = &HE7A
  Const adErrInvalidParamInfo = &HE7C
  Const adErrInvalidConnection = &HE7D
'-----------------------------------------------------------
' ADO Cursor Types
'-----------------------------------------------------------
  Const adOpenUnspecified = -1
  Const adOpenForwardOnly = 0
  Const adOpenKeyset = 1
  Const adOpenDynamic = 2
  Const adOpenStatic = 3
  Const DEFCursor = 0
'-----------------------------------------------------------
' ADO Lock Types
'-----------------------------------------------------------
  Const adLockUnspecified = -1
  Const adLockReadOnly = 1
  Const adLockPessimistic = 2
  Const adLockOptimistic = 3
  Const adLockBatchOptimistic = 4
  Const DEFLock = 1  ' check what should be the default lock type
  Const DEFOption = " "
'-----------------------------------------------------------
' ADO Field Attributes
'-----------------------------------------------------------
  Const adFldMayDefer = 2
  Const adFldUpdatable = 4
  Const adFldUnknownUpdatable = 8
  Const adFldFixed = 16
  Const adFldIsNullable = 32
  Const adFldMayBeNull = 64
  Const adFldLong = 128
  Const adFldRodID = 256
'-----------------------------------------------------------
' ADO Field Types
'-----------------------------------------------------------
  Const adWChar = 130
  Const adBinary = 128
  Const adInteger = 3
  Const adSmallInt = 2
  Const adDouble = 5
  Const adDate = 7
  Const adUnsignedSmallInt = 18
  Const adUnsignedInt = 19
  Const adUnknown = -1
'-----------------------------------------------------------
' ADO Supports() Types
'-----------------------------------------------------------
  Const adAddNew = 16778240
  Const adApproxPosition = 16384
  Const adBookMark = 8192
  Const adDelete = 16779264
  Const adHoldRecords = 256
  Const adMovePrevious = 512
  Const adResync = 131072
  Const adUpdate = 16809984
  Const adUpdateBatch = 65536
'-----------------------------------------------------------
' ADO Absolute Page/Absolute Position Special Constants
'-----------------------------------------------------------
  Const adPosUnknown = -1
  Const adPosBOF = -2
  Const adPosEOF = -3
'-----------------------------------------------------------
' ADO Edit Modes
'-----------------------------------------------------------
  Const adEditNone = 0
  Const adEditInProgress = 1
  Const adEditAdd = 2



Greg Kelly氏からPalm-size PCのADOCEに関する注記:

PPC用のADOに関するレポート:

昨日MSからPalm-PC SDK v1.2をダウンロードして、ADOCEファイルだけをカスタムインストールしま した。\Program Files\WINCE SDK\wce211\ms palm size pc\adoce\の中にMSCEADODT.DLL ファイルが、mips41フォルダの中にさらに5つのファイルがあります:

adoce.dll
adocedb.dll
adocereg.dll
adoceres.dll
adosync.dll

これら6つの全てのファイルをPPCにコピーして、adoce.dllを登録しました。

NS Basicの"View Controls.vb" アプリケーションは、実行すると、リストの上部にADOを見せるようになりました。

developerone.comからのFlashBackDBと呼ばれる、データベース マネージャー アプリケーションを使うと、 それはさらに4つのファイルを見せます(adoce.dllを登録した時に作られたのでしょうか?):

MSysFields
MSysIndexes
MSysProcs
MSysTables

NS Basicのサンプルコードを(SQL文字列を入力して、表を処理する為に)変更して、PPC用にそれを再フォー マットしました。これで、MSysTablesで選択出来るようになり、その中に4つのレコードが見えるようになりました。

ADO Controlを使っていくつかの小さいNS Basicアプリケーションを作成してみました:

表の作成(表のFlashBackdbリストの中に現れる)
表の削除(データベースリストから取除く)
表の中のレコードの入力、アップデート、削除

外部データベースファイル(Pocket Access format .cdb)の作成および処理も可能になりました。

INTERACTION OF WIN-CE SERVICES 2.2:

ファイル転送の4つの可能なシナリオから3つが出来ます。

  1. Access.mdbファイルを作成し、Import with Win-CE Svcs Mobile Devicesをすると、PPC上でこのファイルをPocket Access.cdbファイルに変換します。
  2. デスクトップからPPCへ一つの.mdbファイルをコピーすると、それは自動的に.cdbへ変換されます。
  3. Export with Win-CE Svcs Mobile Devicesを行うと、CE Data Storeに、ADOCEと共にしか作成されない 表をリストし(Msys* tablesは除く)、デスクトップ上に.mdbファイルを作成します。

.mdbファイルをCE Data Storeの表にInport/Export/Copyする方法は見つけられませんでした。ですから、あ なたがデータの表を使用したアプリKションを作成する時、 外部の.cdbファイルを使用するか、 CE Data Store 内にそれが必要な場合は、ソースコードから表を作成しなければなりません。

外部データベースとData Stroe Tablesの賛否をもう少し調べて見ます。 Accessでデータベースの表を先に作 成して、あなたのアプリケーションの配付を用いて送る用に、.cdbファイルを作成する方のが簡単ですが、 FlashBackDBのようなアプリケーションでは、個々の表を選びながらbackup/restore/exportが出来ます。