フィールドのデータの読み取りまたは書き込みを行うとき、実際には Field オブジェクトの DAO " Value /値" プロパティの読み取りまたは設定を行っていることになります。 DAO " Value /値" プロパティは Field オブジェクトの既定のプロパティです。 そのため、次のいずれかの方法で、rstEmployes Recordset の LastName フィールドの DAO 値プロパティを設定できます。
rstEmployees!LastName.Value = strName
rstEmployees!LastName = strName
rstEmployees![LastName] = strName
Recordsetオブジェクトの基になっているテーブルでは、通常は更新可能であるダイナセット タイプまたはテーブル タイプの Recordset に対しても、データの変更が許可されない場合があります。 Recordset の Updatable プロパティを確認して、そのデータを変更できるかどうかを判断します。 プロパティの値が True の場合、その Recordset オブジェクトは更新可能です。
Recordset オブジェクトが更新可能であっても、その内部の個別のフィールドは更新可能でない場合があり、そのようなフィールドに書き込もうとすると実行時エラーが発生します。 特定のフィールドが更新可能かどうかを判断するには、Recordset の Fields コレクション内の対応する Field オブジェクトの DataUpdatable プロパティを確認します。 次の例は、strQuery によって作成されたダイナセット内のすべてのフィールドが更新可能な場合は True を返し、そうでない場合は False を返します。
Function RecordsetUpdatable(strSQL As String) As Boolean
Dim dbsNorthwind As DAO.Database
Dim rstDynaset As DAO.Recordset
Dim intPosition As Integer
On Error GoTo ErrorHandler
' Initialize the function's return value to True.
RecordsetUpdatable = True
Set dbsNorthwind = CurrentDb
Set rstDynaset = dbsNorthwind.OpenRecordset(strSQL, dbOpenDynaset)
' If the entire dynaset isn't updatable, return False.
If rstDynaset.Updatable = False Then
RecordsetUpdatable = False
Else
' If the dynaset is updatable, check if all fields in the
' dynaset are updatable. If one of the fields isn't updatable,
' return False.
For intPosition = 0 To rstDynaset.Fields.Count - 1
If rstDynaset.Fields(intPosition).DataUpdatable = False Then
RecordsetUpdatable = False
Exit For
End If
Next intPosition
End If
rstDynaset.Close
dbsNorthwind.Close
Set rstDynaset = Nothing
Set dbsNorthwind = Nothing
Exit Sub
ErrorHandler:
MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description
End Function
レコードが追加または更新されるときに、任意の 1 つのフィールドで、そのフィールド内のデータに多数の条件を適用できます。 これらの条件は、いくつかのプロパティによって定義されます。 Text フィールドまたは Memo フィールドの DAO AllowZeroLength プロパティは、フィールドが長さ 0 の文字列 ("") を受け入れるかどうかを示します。 DAO Required プロパティは、フィールドに値を入力する必要があるかどうか、または Null 値を 受け取ることができるかどうかを示します。 Recordset の Field オブジェクトの場合、これらのプロパティは読み取り専用です。状態は基になるテーブルによって決定されます。
入力規則検証は、フィールドの DAO "Value/値" プロパティに入力されたデータが許容可能な範囲内に収まっているかどうかを判定するプロセスです。 Recordset の Field オブジェクトには、DAO ValidationRule プロパティと ValidationText プロパティが設定されている場合があります。 DAO の "ValidationRule/入力規則" プロパティは単なる抽出条件式であり、SQL の WHERE 句の抽出条件に似ていますが、WHERE キーワードはありません。 DAO の "ValidationText/エラーメッセージ" プロパティは、DAO の "ValidationRule/入力規則" プロパティの制限を超えたデータをフィールドに入力しようとした場合に Access がエラー メッセージ内で表示する文字列です。 コードで DAO を使用している場合、ユーザーに向けて表示するメッセージ用に DAO の "ValidationText/エラーメッセージ" を使用できます。
注:
DAO の "ValidationRule/入力規則" および "ValidationText/エラーメッセージ" プロパティは Recordset レベルでも存在します。 これらは読み取り専用のプロパティであり、カレント レコードの取得元であるテーブル上で確立されるテーブル レベルの入力規則検証方式を反映しています。
Recordset の Field オブジェクトには、 ValidateOnSet プロパティもあります。 ValidateOnSet プロパティを True に設定すると、フィールドで DAO の " Value /値" プロパティが設定されると同時に入力規則のチェックが行われます。 False (既定) に設定すると、入力規則のチェックは入力が完了したレコードが更新される時点で行われます。
たとえば、サイズの大きいメモ型 (Memo) または OLE オブジェクト型 (OLE Object) のフィールドが含まれており、DAO の "ValidationRule/入力規則" プロパティ セットがあるレコードにデータを追加している場合は、データの書き込みを試みる前に、新しいデータが入力規則に違反していないかどうかを確認することが推奨されます。 そのためには、ValidateOnSet プロパティを True に設定します。 レコード全体がディスクに書き込まれる時点で入力規則検証を行う設定では、無効なレコードをディスクに書き込もうとする処理が時間の浪費になる場合があります。
サポートとフィードバック
Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。