Page 77 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼Requeryで余計なレコードが作成される Bishop 02/10/22(火) 14:19 ┣Re:Requeryで余計なレコードが作成される イケガミ 02/10/22(火) 15:43 ┃ ┗この先の処理 Bishop 02/10/22(火) 16:11 ┗Re:レコード数の確認方法 イケガミ 02/10/22(火) 15:45 ┗Re:レコード数の確認方法 Bishop 02/10/22(火) 16:01 ┗Re:レコード数の確認方法 イケガミ 02/10/23(水) 8:38 ┗Re:レコード数の確認方法 Bishop 02/10/23(水) 8:59 ┗Re:レコード数の確認方法 イケガミ 02/10/23(水) 9:12 ┣連結フォームです Bishop 02/10/23(水) 18:15 ┗「レコードは削除されています」も出ます Bishop 02/10/23(水) 18:18 ┗解決いたしました Bishop 02/10/25(金) 18:14 ─────────────────────────────────────── ■題名 : Requeryで余計なレコードが作成される ■名前 : Bishop ■日付 : 02/10/22(火) 14:19 -------------------------------------------------------------------------
Access2000です。フォームはワークテーブルとの連結フォームです。コンボボックス(ID)を変更すると、ワークテーブルを削除し、IDに応じてワークテーブルのデータをセットし直し、その内容をフォームに表示させたいのですが。 Private Sub cmbID_AfterUpdate() (略) Call psDelWtbl 'ワークテーブルを削除 Call psSetWtbl 'ワークテーブルにデータセット bUpd = True Me.Requery 'ここでレコードが2つになってしまう bUpd = False (略) End Sub Private Sub Form_BeforeUpdate(Cancel As Integer) If bUpd = False Then Cancel = True End Sub Me.Requeryのところで余計なレコードがひとつ作成されてしまいます。ワークテーブルにデータセットの段階ではレコード数は1だったものが、2になってしまいます。ワークテーブルのレコード数は1でないと他の処理に不都合が出てきます。何か回避策はないでしょうか? |
> Call psDelWtbl 'ワークテーブルを削除 > Call psSetWtbl 'ワークテーブルにデータセット この先は、どうやって処理しているのでしょうか? |
イケガミさん、お世話になります。 >> Call psDelWtbl 'ワークテーブルを削除 >> Call psSetWtbl 'ワークテーブルにデータセット > >この先は、どうやって処理しているのでしょうか? psDelWtbl、psSetWtblの内容ということでしょうか? 違ってたらすみませんが、コードアップしときます。 Private Sub psDelWtbl() 'ワークテーブルを削除 'csWtbはワークテーブル名 Set cmdP = New ADODB.Command Set cmdP.ActiveConnection = CurrentProject.Connection cmdP.CommandText = "DELETE * FROM " & csWtb cmdP.Execute , , adCmdText Set cmdP = Nothing End Sub Private Sub psSetWtbl() 'データテーブルの内容をワークテーブルにセットする Set cmdP = New ADODB.Command Set cmdP.ActiveConnection = CurrentProject.Connection strSQL = "INSERT INTO " & csWtb & " ( EID, Nye, NMt, NSe, Dte, SID, Nsg, RID, Nrc, Sat, Xat, Tat, PID, DtI )" strSQL = strSQL & " SELECT EID, Nye, NMt, NSe, Dte, SID, Nsg, RID, Nrc, Sat, Xat, Tat, PID, DtI" strSQL = strSQL & " FROM " & csDtb 'csDtbデータテーブル strSQL = strSQL & " WHERE EID=" & lngID 'lngIDコンボで選択されたID cmdP.CommandText = strSQL cmdP.Execute , , adCmdText Set cmdP = Nothing ’以下略 End Sub |
> Call psDelWtbl 'ワークテーブルを削除 Debug.Print "削除後:" & DCount("*","[ワークテーブル名]") > Call psSetWtbl 'ワークテーブルにデータセット Debug.Print "追加後:" & DCount("*","[ワークテーブル名]") > bUpd = True > Me.Requery 'ここでレコードが2つになってしまう として、イミディエイトウィンドウで件数を確認してください。 |
イケガミさん、お世話になります。 >> Call psDelWtbl 'ワークテーブルを削除 >Debug.Print "削除後:" & DCount("*","[ワークテーブル名]") 削除後:0 >> Call psSetWtbl 'ワークテーブルにデータセット >Debug.Print "追加後:" & DCount("*","[ワークテーブル名]") 削除後:1 >> bUpd = True >> Me.Requery 'ここでレコードが2つになってしまう Me.Requeryの直後にレコード数2になります。 |
>Me.Requeryの直後にレコード数2になります。 何ででしょう。。。 その不明分のレコードの内容は? #追加したレコードと同じ?削除したレコード?それとも。。 |
イケガミさん、おはようございます。 >>Me.Requeryの直後にレコード数2になります。 > >何ででしょう。。。 >その不明分のレコードの内容は? >#追加したレコードと同じ?削除したレコード?それとも。。 意図せず追加されてしまうレコードの内容は、フォームに初期値で表示されている内容です。 何とか解決へのアドバイスお願いします。 |
>意図せず追加されてしまうレコードの内容は、フォームに初期値で表示されている内容です。 もしかして、連結フォームですか? 非連結にすればいいような。。 |
イケガミさん、たびたびすみません。 >>意図せず追加されてしまうレコードの内容は、フォームに初期値で表示されている内容です。 > >もしかして、連結フォームですか? >非連結にすればいいような。。 連結フォームです。フォーム上のコントロールの数が多いので、できれば連結フォームのままで、問題解決したいのですが。 |
実行するタイミングによって、同じくMe.Requeryのところで「レコードは削除されています」のエラーも表示されます。 |
イケガミさん、皆様ありがとうございました。解決いたしました。 コントロールのプロパティでイベントのコードがないのに、[イベントプロシージャ]となっている所が何ヶ所かあり、これを直したところ、現象出なくなりました。 |