1

だから、私はMSAccessデータベースアプリケーションを持っています。このアプリケーションには、いくつかのサブフォームを含むメインフォームがあります。特に1つのフォームには、データベースクエリからの日付を入力するドロップダウンボックスがあります。これらの日付の1つを選択すると、サブフォームのレコードセットを履歴情報で更新することになっているサブルーチンを実行します。以下は編集されたコードです(クエリから多数のフィールドを削除しただけです)

Private Sub pickdate_AfterUpdate()
'''''''''''''''''''''''''''''''''''''''''
'   Add review history by selected date
'''''''''''''''''''''''''''''''''''''''''
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("SELECT model, entered_date FROM history WHERE entered_date=#" & Me.pickdate.value & "# ORDER BY model DESC", dbOpenDynaset, dbSeeChanges)

If rs.BOF = False Then rs.MoveFirst
While rs.EOF = False

    Forms!main!histories.Form.Recordset.AddNew
    Forms!main!histories.Form.Recordset![model] = rs![model]
    Forms!main!histories.Form.Recordset![entered_date] = rs![entered_date]
    Forms!main!histories.Form.Recordset.Update

    rs.MoveNext
Wend
End Sub

行にエラーが表示されますForms!main!histories.Form.Recordset.AddNew

私はその行の次のバージョンを試しました:

Forms!main!histories.Form.Recordset.AddNew
main!histories.Form.Recordset.AddNew
histories.Form.Recordset.AddNew
Me.Form.Recordset.AddNew
Me.Recordset.AddNew
Me.AddNew
Me.main!histories.Form.Recordset.AddNew
Me!histories.Form.Recordset.Addnew
Me!main!histories.Form.Recordset.AddNew

私は文字通り、問題がどこにあるのかを理解しようとしています。サブフォームには、情報を格納するための適切なボックスがすべて含まれています。それらに入るデータベース列に一致するラベルをそれらに与えました。コントロールソースをデータベースの列名に設定し、何も設定しないようにしました。私は100の異なる「解決策」を調べましたが、どれも問題に適合しないか、機能していないようです。

本当に簡単なことを見落としているような気がします。

4

1 に答える 1

2

名前に問題があると思います。それらすべてを確認してください。サブフォームは、サブフォームコントロールと含まれるフォームの2つの部分で構成されていることを忘れないでください。これらは同じ名前であることがよくありますが、常にそうとは限りません。使用しているコードでは、含まれているフォームではなく、サブフォームコントロールの名前を指定する必要があります。サブフォームへのデータの手動入力が正しく機能しない場合、コントロールはバインドされていません。

これは、サンプルテーブルで機能します。

Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("SELECT atext from table1 WHERE akey=21")

If rs.BOF = False Then rs.MoveFirst
While Not rs.EOF '= False
    Me.Table1_subform1.Form.Recordset.AddNew
    Me.Table1_subform1.Form.Recordset!AText = rs!AText
    Me.Table1_subform1.Form.Recordset.Update

    rs.MoveNext
Wend

クエリを実行するには、次のように言うことができます。

sSQL="INSERT INTO NameOfTable (model, entered_date) " _
& "SELECT model, entered_date FROM history WHERE entered_date=#" _
& Me.pickdate.value & "#"

CurrentDB.execute, dbfailOnError

クエリデザインウィンドウでSQLが機能することを確認できます。

于 2012-08-30T21:26:12.100 に答える