次の方法で共有


DAO レコードセットのフィールドに読み取り/書き込みを行う

フィールドのデータの読み取りまたは書き込みを行うとき、実際には Field オブジェクトの DAO " Value /値" プロパティの読み取りまたは設定を行っていることになります。 DAO " Value /値" プロパティは Field オブジェクトの既定のプロパティです。 そのため、次のいずれかの方法で、rstEmployes Recordset の LastName フィールドの DAO プロパティを設定できます。

rstEmployees!LastName.Value = strName 
rstEmployees!LastName = strName 
rstEmployees![LastName] = strName 

Recordsetオブジェクトの基になっているテーブルでは、通常は更新可能であるダイナセット タイプまたはテーブル タイプの Recordset に対しても、データの変更が許可されない場合があります。 RecordsetUpdatable プロパティを確認して、そのデータを変更できるかどうかを判断します。 プロパティの値が True の場合、その Recordset オブジェクトは更新可能です。

Recordset オブジェクトが更新可能であっても、その内部の個別のフィールドは更新可能でない場合があり、そのようなフィールドに書き込もうとすると実行時エラーが発生します。 特定のフィールドが更新可能かどうかを判断するには、RecordsetFields コレクション内の対応する 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 値を 受け取ることができるかどうかを示します。 RecordsetField オブジェクトの場合、これらのプロパティは読み取り専用です。状態は基になるテーブルによって決定されます。

入力規則検証は、フィールドの DAO "Value/値" プロパティに入力されたデータが許容可能な範囲内に収まっているかどうかを判定するプロセスです。 RecordsetField オブジェクトには、DAO ValidationRule プロパティと ValidationText プロパティが設定されている場合があります。 DAO の "ValidationRule/入力規則" プロパティは単なる抽出条件式であり、SQL の WHERE 句の抽出条件に似ていますが、WHERE キーワードはありません。 DAO の "ValidationText/エラーメッセージ" プロパティは、DAO の "ValidationRule/入力規則" プロパティの制限を超えたデータをフィールドに入力しようとした場合に Access がエラー メッセージ内で表示する文字列です。 コードで DAO を使用している場合、ユーザーに向けて表示するメッセージ用に DAO の "ValidationText/エラーメッセージ" を使用できます。

注:

DAO の "ValidationRule/入力規則" および "ValidationText/エラーメッセージ" プロパティは Recordset レベルでも存在します。 これらは読み取り専用のプロパティであり、カレント レコードの取得元であるテーブル上で確立されるテーブル レベルの入力規則検証方式を反映しています。

RecordsetField オブジェクトには、 ValidateOnSet プロパティもあります。 ValidateOnSet プロパティを True に設定すると、フィールドで DAO の " Value /値" プロパティが設定されると同時に入力規則のチェックが行われます。 False (既定) に設定すると、入力規則のチェックは入力が完了したレコードが更新される時点で行われます。

たとえば、サイズの大きいメモ型 (Memo) または OLE オブジェクト型 (OLE Object) のフィールドが含まれており、DAO の "ValidationRule/入力規則" プロパティ セットがあるレコードにデータを追加している場合は、データの書き込みを試みる前に、新しいデータが入力規則に違反していないかどうかを確認することが推奨されます。 そのためには、ValidateOnSet プロパティを True に設定します。 レコード全体がディスクに書き込まれる時点で入力規則検証を行う設定では、無効なレコードをディスクに書き込もうとする処理が時間の浪費になる場合があります。

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。