2016-04-18 20 views
1

サブフォームの外部にあるボタンを使用して操作されるサブフォームにクエリ結果があります。フォームのMS Access、新しいレコードで2つのレコードが作成されることがあります

画像:かなりの

Image of the form

すべてのボタン「レコードの追加」は、INSERT文を実行し、フォーム/クエリをリフレッシュしているん。 INSERT文には、前の行のwhatsとほとんど同じ情報が含まれています。 DLA_HOLDER_ID、DLA_TYPE_IDなどの情報は変更されません。エントリのほとんどのフィールドは空白のまま残り、DLA_CREATION_DATERECORD_DATEにそれぞれDate()Time()を使用します。

行が追加されると、TEMP_STATUSを一旦キャンセルUPDATEステートメントはTEMP_STATUS'N'とクエリ結果を満たす行を削除実行されている場合、それは'S'なり、保存、'N'あります。これはすべて完全に機能します。

私の問題は、時には「Add Record」を押すと2つの行が挿入されます。それは、時間の5%〜10%しか起こらず、ランダムに発生します。 2つの行が追加されると、RECORD_TIMEが1秒離れていることを除いて全く同じです。つまり、row1 = 2:06:24 PM、row2 = 2:06:25 PMです。

これを修正する方法はありますか?私がこのようなことが起こったと考えることができる唯一の方法は、INSERTクエリを処理するのに偶然にかかった時間です。Time()の値は、2:06:24から2:06:25に変わり、両方を挿入するのではなく、 (はい、私はそれがいけない作業そのように理解し、それは私が考えることができるすべてです。)ここで

EDIT は「レコードを追加」ボタンのコードです。 「レコードの追加」ボタンを再び有効にするには、「レコードの保存」ボタンまたは「キャンセル」ボタンのいずれかを押す必要があるため、ボタンを2回押すことはできません。

Private Sub cmdNewRec_Click() 

insert_query = "INSERT INTO DLA_RELATIONSHIP (DLA_HOLDER_ID, DLA_TYPE_ID, DLA_LOCATION_ID, DLA_PARAMETER_ID, DLA_TITLE, DLA_CREATION_DATE, TEMP_STATUS) SELECT DLA_HOLDER_ID, DLA_TYPE_ID, DLA_LOCATION_ID, DLA_PARAMETER_ID, DLA_TITLE, DLA_CREATION_DATE, ('N') AS TEMP_STATUS FROM DLA_RELATIONSHIP WHERE (((DLA_HOLDER_ID)= txt1) And ((DLA_TYPE_ID)= txt2) And ((DLA_LOCATION_ID)=txt6) and ((DLA_PARAMETER_ID)= txt3) And ((DLA_TITLE)=txt4) And ((DLA_CREATION_DATE)=txt5))" 

DoCmd.SetWarnings False 
DoCmd.RunSQL insert_query 
DoCmd.SetWarnings True 

Me.Form.refresh 

lblNotice1.Caption = "New record present with unsaved changes" 

cmdNewRec.Enabled = False 
cmdSave.Enabled = True 
cmdCancel.Enabled = True 

End Sub 

繰り返しますが、それは(再びそれを考えることに私をリードすると、何らかの形でこれにで遊ぶ時間()関数で)完全にランダムで発生に注意してください。

+0

また、揺れやすいマウスボタンがあり、2回クリックする可能性があります。 – cha

+0

...はい、この場合ではありません。 – Dre24

+2

原因を見つけるには、あなたの投稿を編集し、 "レコードを追加"コードを追加する必要があります。しかし、 "N"レコードがすでに存在する場合は、その手続きの始めに簡単にチェックすることができます。 – Andre

答えて

1

あなたの挿入ステートメントに選択するようにTOP 1を追加してみてください:

INSERT INTO DLA_RELATIONSHIP (DLA_HOLDER_ID, DLA_TYPE_ID, DLA_LOCATION_ID, DLA_PARAMETER_ID, DLA_TITLE, DLA_CREATION_DATE, TEMP_STATUS) 
SELECT TOP 1 DLA_HOLDER_ID, DLA_TYPE_ID, DLA_LOCATION_ID, DLA_PARAMETER_ID, DLA_TITLE, DLA_CREATION_DATE, ('N') AS TEMP_STATUS 
FROM DLA_RELATIONSHIP 
WHERE (((DLA_HOLDER_ID)= txt1) And ((DLA_TYPE_ID)= txt2) And ((DLA_LOCATION_ID)=txt6) and ((DLA_PARAMETER_ID)= txt3) And ((DLA_TITLE)=txt4) And ((DLA_CREATION_DATE)=txt5)) 

これはあなたの問題を修正した場合、条件は2つの行が挿入されますと思われる、選択のための複数のレコードを返しているところ。

ただし、おそらくテーブルから選択するのではなく、テキストボックスの値から直接レコードを挿入する必要があります。その選択は不要になります。

+0

ありがとうKateract、とても簡単! 私は助けていただきありがとうございます。 – Dre24

関連する問題