ADOCEの使い方
ADOCEはマイクロソフト製のデータベースエンジンみたいなもののWindowsCE用?らしいです
PocketAccessというWindowsCE用のデータベースソフトのファイルを読み書きすることができます。PocketPCにはPocketAccessは入っていませんが、WindowsのAccessで作ったデータをデバイスに転送すると自動的にPocketAccess用のデータに変換されるので、Windowsで作ったデータを流用できそうです。
当初の目的がデータベースの製作だったので半年近くかかってやっとたどり着いたというところです。
マニュアルなど見ながらコーディングしたのですがなかなか思うように行かないです
以下は自分なりにまとめたものです。本当はもっと複雑なのですが、現在理解している範囲でまとめたものです。
==================================================================================
【1】 データベースからの読み込み
1:レコードセットオブジェクトの作成
Dim rs As ADOCE.Recordset
Set rs = CreateObject("ADOCE.Recordset.3.0")
2:レコードセットを開く
rs.Open st, App.Path & "\test.cdb"
st:SQL文字列
App.Path & "\test.cdb":プログラムと同じフォルダーにtest.cdbというファイルがある場合のパス
3:必要なら何個あるか調べる
rs.RecordCount
4:フィールドのデータを得る1
rs.Fields("FieldName").Value
()の中はフィールド名 読み込むフィールドの数だけ必要
全てのレコードを得たい場合はループで回す
Do While Not rs.EOF
name(i) = rs.Fields("患者名").Value)
sex(i) = rs.Fields("性別").Value
rs.MoveNext 'レコードを1個進める
i=i+1
Loop
'あらかじめ rs.RecordCount で数を得ておいて For Next でもいい
'Acscessのデータを転送した場合、データが無い場合、***.value でNullデータタイプが返ってくることがある、そのまま代入しようとするとTypeMismatchエラーが出て止まるので、TypeName()で型を調べて"Null"の時はそのまま代入しないようにする
5:フィールドのデータを得る2
レコードセット内のX番目のレコードのデータを得たい場合
rs.Open st, App.Path & "\test.cdb" 'OPENしてから
rs.Move RecordNo 'レコードのNoを進める レコードNoは0から始まるが、ListViweControlのIndexは1から始まるので代入する場合は1引く、ListBoxのIndexは0から始まるので1引く必要はない
name = rs.Fields("患者名").Value) 'データを読み込む
sex = rs.Fields("性別").Value
6:レコードセットを閉じる
rs.Close
Set rs = Nothing
7:SQL文の書き方
'テーブルに含まれる全てのレコードを得たい場合
'TableName:テーブル名の変数 テーブル名は''で囲んでおいたほうがよさそう
"SELECT * from '" & TableName & "'"
'FieldNameフィールドにTextテキストが含まれるレコードを得たい場合
'FieldName:フィールド名の変数
'Text:検索テキストの変数
"SELECT * from '" & TableName & "' WHERE " & FieldName & " LIKE '%" & Text & "%'"
'条件が沢山あるときはANDでつなぐ
"SELECT * from '" & TableName & "' WHERE " & FieldName & " LIKE '%" & Text & "%' AND " & FieldName2 & " LIKE '%" & Text2 & "%'"
'LIKEは文字列にしか使えないので注意
'FieldNameフィールドがTextテキストと一致するレコードを得たい場合
"SELECT * from '" & TableName & "' WHERE " & FieldName & " = '" & Text & "'"
'浮動小数点には=は使えないので注意
'FieldNameでソートしたい場合は ORDER BY を追加する
"SELECT * from '" & TableName & "' WHERE " & FieldName & " LIKE '%" & Text & "%'" & " ORDER BY " & FieldName
---------------------------------------------------------------------
【2】 データの書き込み
1:レコードセットオブジェクトの作成
Dim rs As ADOCE.Recordset
Set rs = CreateObject("ADOCE.Recordset.3.0")
2:レコードセットを開く
rs.Open st, App.Path & "\test.cdb" , adOpenKeyset, adLockOptimistic
' st:SQL文字列
' App.Path & "\test.cdb":プログラムと同じフォルダーにtest.cdbというファイルがある場合のパス , adOpenKeyset, adLockOptimistic が必要
3:レコードを選択する
'新規レコードを作製する場合
rs.AddNew
'既存のレコードを変更する場合
rs.Move RecordNo 'レコードのNoを進める、開いたばかりの時は最初のレコードが選択されている
4:データをセットする
rs.Fields("患者名") = PtName
rs.Fields("性別") = PtSex
rs.Update 'これが無いと更新されない
5:レコードセットを閉じる
rs.Close
Set rs = Nothing
--------------------------------------------------------------------------
【3】 データーベースの作成
1:レコードセットオブジェクトの作成
Dim rs As ADOCE.Recordset
Set rs = CreateObject("ADOCE.Recordset.3.0")
2:データベースの作成、なお作成前に同名ファイルの存在チェックはしたほうが良い
' App.Path & "\test.cdb":プログラムと同じフォルダーにtest.cdbというファイルを作成
rs.Open "CREATE DATABASE '" & App.Path & "test.cbd'"
3:閉じる、一度閉じないとうまくいかない
Set rs = Nothing
4:レコードセットオブジェクトの作成
Set rs = CreateObject("ADOCE.Recordset.3.0")
5:データベースを開いてテーブルを作成
rs.Open "CREATE TABLE '" & TableName & "' (患者名 varchar(30), 性別 varchar(8), 記事 Text)", App.Path & "test.cbd"
'変数TableNameのテーブルを作成し、フィールドは患者名, 性別, 記事 の3つ、各データ形は文字列,文字列,長い文字列、文字列の最大長は255文字で()をつけて文字数を指定する
6:閉じる
Set rs = Nothing
--------------------------------------------------------------------------------
【4】 レコードの削除
1:レコードセットオブジェクトの作成
Dim rs As ADOCE.Recordset
Set rs = CreateObject("ADOCE.Recordset.3.0")
2:レコードセットを開く
rs.Open st, App.Path & "\test.cdb" , adOpenKeyset, adLockOptimistic
' st:SQL文字列
' App.Path & "\test.cdb":プログラムと同じフォルダーにtest.cdbというファイルがある場合のパス , adOpenKeyset, adLockOptimistic が必要
3:レコードを選択する
rs.Move RecordNo 'レコードのNoを進める、開いたばかりの時は最初のレコードが選択されている
4:レコードを削除する
rs.Delete
5:レコードセットを閉じる
rs.Close
Set rs = Nothing
--------------------------------------------------------------------------------
【5】 Tableの構造を変える ALTER TABLE
[1]テーブルにフィールドを追加する
ALTER TABLE tablename ADD fieldname を使う
1:レコードセットオブジェクトの作成
Dim rs As ADOCE.Recordset
Set rs = CreateObject("ADOCE.Recordset.3.0")
2:ALTER TABLE 命令
'変数TableNameのテーブルに文字列型の「年齢」フィールドを追加する
rs.Open "ALTER TABLE '" & TableName & "' ADD 年齢 varchar", App.Path & "\test.cdb"
3:レコードセットを閉じる
Set rs = Nothing
[2]テーブルの名前を変える
ALTER TABLE tablename TO tablename2
[3]テーブル内のフィールドを削除する
ALTER TABLE tablename DROP fieldname
[4]フィールド名を変える
ALTER TABLE tablename RENAME fieldname TO fieldname2
[5]フィールドを動かす?
ALTER TABLE tablename MOVE fieldname [BEFORE fieldname2]
--------------------------------------------------------------------------------
【6】 その他
[1] データベースを削除する
DROP DATABASE 'database_name.cdb' [,…n]
[2] Indexを削除する
DROP INDEX tablename,indexname
[3] テーブルを削除する
DROP TABLE tablename
==================================================================================
VBTOPに戻る