フォームの読み込み時にデータシート サブフォームでこのコードを実行していますが、エラー メッセージやコード ブレークは表示されません。私の debug.print は、Recordset rs が本来あるべき 2131 レコードで満たされていることを示していますが、私のフォームには #Name? という 1 つの行が表示されています。あらゆる分野で。私のコントロールのコントロール ソース プロパティは、上に挙げたフィールド名とほぼ確実に一致します。RS はフォーム レベル変数であり、フォームが閉じるまで閉じたり、何も設定したりしません。
私は何が間違っているのですか?
Set rs = New ADODB.Recordset
rs.Fields.Append "TimesUsed", adInteger
rs.Fields.Append "strWorkType", adVarWChar, 150
rs.Fields.Append "DateLastUsed", adDate
rs.Fields.Append "SelectedYN", adBoolean
Set rs.ActiveConnection = Nothing
rs.CursorLocation = adUseClient
rs.LockType = adLockBatchOptimistic
rs.Open
Dim sSQL As String
sSQL = "MyComplicated SQL Statement Ommitted from this SO Question"
Dim r As DAO.Recordset
Set r = CurrentDb.OpenRecordset(sSQL, dbOpenDynaset, dbSeeChanges)
If Not (r.EOF And r.BOF) Then
r.MoveFirst
Dim fld
Do Until r.EOF = True
rs.AddNew
For Each fld In r.Fields
rs(fld.Name) = r(fld.Name).value
Next
rs.Update
r.MoveNext
Loop
End If
r.Close
Set r = Nothing
Debug.Print rs.RecordCount '2131 records
Set Me.Recordset = rs
わかりましたので、MSDN サイトでこれを読みました。
レコードセットには、テーブルの主キーなど、一意にインデックス付けされた 1 つ以上のフィールドが含まれている必要があります。
(注: この情報は、この文脈では誤りのようです。)