DAOを使ってレコードを一括修正するには、Recordsetオブジェクトを作成して
EditメソッドとUpdateメソッドでレコードの更新処理をします。
サンプルプロシージャ「Sample1」では、テーブル「住所録」のフィールド「氏名」
の全データから前後の空白を取り除いてレコードを更新する処理を行っています。
例えば、「 笹野 ますみ 」が「笹野 ますみ」となります。
データ入力はある程度制限することができますが、前後に空白を付けてしまったり、
全角と半角を混在してしまったりといったことは起こり得ることです。
サンプルプロシージャ「Sample2」では、テーブル「住所録」のフィールド
「メールアドレス」の全データを半角の小文字にしてレコードを更新する処理を
行っています。
例えば、「SUM@PROJECTA.CO.JP」が「sum@projecta.co.jp」
となります。
● サンプル1 ●
【前後の空白を取り除く】
Sub Sample1()
Dim db As Database
Dim rs As Recordset
Dim fld As Field
Set db = CurrentDb
Set rs = db.OpenRecordset("住所録")
Set fld = rs.Fields("氏名")
If rs.EOF = False Then
Do Until rs.EOF
rs.Edit
fld = Trim(fld)
rs.Update
rs.MoveNext
Loop
End If
db.Close
End Sub
● サンプル2 ●
【半角の小文字にする】
Sub Sample2()
Dim db As Database
Dim rs As Recordset
Dim fld As Field
Set db = CurrentDb
Set rs = db.OpenRecordset("住所録")
Set fld = rs.Fields("メールアドレス")
If rs.EOF = False Then
Do Until rs.EOF
rs.Edit
fld = StrConv(fld, vbNarrow + vbLowerCase)
rs.Update
rs.MoveNext
Loop
End If
db.Close
End Sub
● 補足説明 ●
(1)レコードを編集するには、Editメソッドを使用して、カレントレコードの内容をコピー
バッファにコピーします。Editメソッドを使用せずに、Updateメソッドを使用したり、
フィールドの値を変更したりしようとすると、エラーが発生します。
(2)1件1件処理するので、データ内容によって修正処理を複雑に分岐する事も可能です。
(3)Trim関数は、指定した文字列から先頭と末尾の両方のスペースを削除した文字列を表す
バリアント型(内部処理形式StringのVariant)の値を返します。
(4)StrConv関数は、文字列を指定した方法で変換した値を返します。構文は次のとおりです。
<構文> StrConv(string, conversion, LCID)
string :必ず指定します。変換する文字列式を指定します。
conversion:必ず指定します。実行する変換の種類を定数で指定します。
通常、定数は互いに矛盾しない限り、組み合わせて指定できます。
定数 値 内容
vbUpperCase 1 文字列を大文字に変換します。
vbLowerCase 2 文字列を小文字に変換します。
vbProperCase 3 文字列の各単語の先頭の文字を大文字に変換します。
vbWide* 4* 文字列内の半角文字(1バイト)を全角文字(2バイト)に
変換します。
vbNarrow* 8* 文字列内の全角文字(2バイト)を半角文字(1バイト)に
変換します。
vbKatakana** 16** 文字列内のひらがなをカタカナに変換します。
vbHiragana** 32 文字列内のカタカナをひらがなに変換します。
vbUnicode 64 システムの既定のコードページを使って文字列をUnicodeに
変換します。
vbFromUnicode 128 文字列をUnicodeからシステムの既定のコードページに
変換します。
* 国別情報の設定が中国、韓国、および日本の場合に適用されます。
** 国別情報の設定が日本の場合のみ有効です。
LCID :省略可能です。システムとは異なる国別情報識別子(LCID)を指定できます。
既定値はシステムが使用するLCIDです。
|