1

テーブルにデータを追加するボタンを作成しようとしています。私は1つのフィールドだけで作業したいのですが。

私はこのatmを使用します:

rec.AddNew
rec("WorkOrder") = Me.ProjectAddWorkOrderTxt
rec.Update

そのフィールドの他の 3 つの列を変更する 3 つの異なるボタンを使用します。ボタンを押してテーブルに情報を追加するたびに、正しい列の下にデータを含む新しいフィールドが作成されます。rec.AddNew. 新しいフィールドを作成します。

まだテーブルにフィールドがあるかどうかを確認する方法はありますか?もしそうなら、その1つのフィールドを編集するだけで、そうでなければ新しいフィールドを作成しますか?

5 つのボタンがあるメイン フォームがあります。5つの異なるフォームをポップアップします。これらのフォームには、1 つのテキスト ボックスと 1 つのボタンがあります。どのフォームもレコード ソースにバインドされていません。

私が欲しいのは、テキスト ボックスにデータを入力できるようにすることです。その 1 つのボタンを押すと、そのデータが一時フォームに追加されます。同時に、フォームを閉じてメインのフォームを再び表示します。

次に、メイン フォームの別のボタンを押すと、現在 temptable にあるすべての情報が取得され、maintable に配置されます。次に、temptable のすべてのデータを削除します。

--

これは、回答の下に追加されたボタンの完全なコードです

Private Sub ProjectWorkOrderBackBtn_Click()

Dim db As Database
Dim rec As DAO.Recordset

Set db = CurrentDb
Set rec = db.OpenRecordset("Select * from ProjectsTempT")

rec.FindFirst "WorkOrder='" & Me.ProjectAddWorkOrderTxt.Value & "'"

If (rec.NoMatch) Then
  rec.AddNew
Else
  rec.Edit
End If

rec("WorkOrder").Value = Me.ProjectAddWorkOrderTxt.Value
rec.Update

Set rec = Nothing
Set db = Nothing
Me.ProjectAddWorkOrderTxt = Null
DoCmd.Close
End Sub
4

2 に答える 2

1

また、コードを少し簡素化することもできます。これにより、応答時間が長くなります。

Private Sub ProjectWorkOrderBackBtn_Click()

Dim db As Database
Dim rec As DAO.Recordset

Set db = CurrentDb
Set rec = db.OpenRecordset("Select * from ProjectsTempT WHERE WorkOrder='" & Me.ProjectAddWorkOrderTxt.Value & "'")

If rec.EOF = "True" Then
  rec.AddNew
Else
  rec.Edit
End If

rec("WorkOrder").Value = Me.ProjectAddWorkOrderTxt.Value
rec.Update

Set rec = Nothing
Set db = Nothing
Me.ProjectAddWorkOrderTxt = Null
DoCmd.Close
End Sub

Access はクライアント側であることに注意してください。つまり、機能を実行する前にデータセット全体をローカル マシンにプルします。そのデータセットのサイズを小さくするとプロセスが高速化されるため、テーブル全体を取得して FindFirst を実行する代わりに、必要なレコードを取り込むだけです。

于 2013-11-12T17:03:29.693 に答える
1

これが機能するかどうかをテストしてください。

Private Sub ProjectWorkOrderBackBtn_Click()

  Dim db As Database
  Dim rec As DAO.Recordset

  Set db = CurrentDb
  Set rec = db.OpenRecordset("ProjectsTempT", dbOpenDynaset, dbSeeChanges)

  'On Error Resume Next

  '
  'rec.FindFirst "WorkOrder='" & Me.ProjectAddWorkOrderTxt.Value & "'"
  '

  If (rec.EOF) Then
    rec.AddNew
  Else
    rec.Edit
  End If

  rec("WorkOrder").Value = Me.ProjectAddWorkOrderTxt.Value
  rec.Update

  Set rec = Nothing
  Set db = Nothing

  'On Error Goto 0

  '
  'Me.ProjectAddWorkOrderTxt = Null
  'DoCmd.Close
  '
End Sub

テーブル ProjectsTempT が存在する必要があります。

于 2013-11-12T16:04:38.233 に答える