Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1638 / 2272 ツリー ←次へ | 前へ→

【6153】実行時エラー2108 ジュン 05/9/3(土) 13:05 質問[未読]
【6156】Re:実行時エラー2108 たん 05/9/5(月) 8:30 回答[未読]
【6157】Re:実行時エラー2108 小僧 05/9/5(月) 9:01 発言[未読]
【6158】Re:実行時エラー2108 ジュン 05/9/5(月) 9:26 お礼[未読]
【6159】Re:実行時エラー2108 たん 05/9/5(月) 10:39 回答[未読]
【6163】Re:実行時エラー2108 ジュン 05/9/5(月) 18:47 お礼[未読]

【6153】実行時エラー2108
質問  ジュン  - 05/9/3(土) 13:05 -

引用なし
パスワード
   得意先CDの入力チェックするフォームをテスト中にエラーコード2108が表示されました。 『”Gotocontrol”アクション ”GOTOCControlメソッド”またはSetFocusメソッドを実行する前にフィールドを保存する必要があります』。このエラーの意味と対処方法を教えてください。以下にコードを表示します。

エラーになった箇所は←印で表示しています。

If IsNull(Me!得意先CD) Or IsEmpty(Me!得意先CD) Or Val(Me!得意先CD) = 0 Then
  MsgRet = MsgBox("得意先CDを入力して下さい。", vbOKCancel, "入庫データ入力")
    Select Case MsgRet
        Case vbOK
          Cancel = True
        Case vbCancel
          Me!区分.SetFocus
        Case Else
    End Select
  Else
   If Len(Me!得意先CD) > 6 Then
     MsgRet = MsgBox("得意先CDは6桁以内で入力して下さい。",vbOKCancel, "入庫データ入力")
      Select Case MsgRet
          Case vbOK
            Cancel = True
          Case vbCancel
            Me!区分.SetFocus  ←ここでエラーが発生
          Case Else
      End Select
      Exit Sub
    End If
    
    Set DB = CurrentDb
    
    Sql = "Select * From T_得意先マスタ Where 得意先CD = '" & Me!得意先CD & "'"
    
    Set Rst = DB.OpenRecordset(Sql)
    If Rst.RecordCount = 0 Then
      MsgRet = MsgBox("得意先が未登録です。", vbOKCancel, "入庫データ入力")
      Select Case MsgRet
          Case vbOK
            Cancel = True
          Case vbCancel
            Me!区分.SetFocus ←ここでもエラーが発生
          Case Else
      End Select
    Else
      Me!得意先名 = Rst!得意先名
    End If
    
  End If

【6156】Re:実行時エラー2108
回答  たん  - 05/9/5(月) 8:30 -

引用なし
パスワード
   > 『”Gotocontrol”アクション ”GOTOCControlメソッド”またはSetFocusメソッド
> を実行する前にフィールドを保存する必要があります』。
> このエラーの意味と対処方法を教えてください。以下にコードを表示します。

上記のコードの実行場所がBeforeUpdateであれば無理です。
コード全体をAfterUpdateで行なうか、AfterUpdateでSetfocusを行なうように
変更して下さい。

(ちなみに全体のコードは見ていません。また、AfterUpdateに全体を写して良いか
 どうかについては、このイベントからだけでは、回答側は判断できません。)

【6157】Re:実行時エラー2108
発言  小僧  - 05/9/5(月) 9:01 -

引用なし
パスワード
   ▼ジュン さん、たん さん:
おはようございます。

エラーの理由は たん さんが記載されている通りなのですが、

>If IsNull(Me!得意先CD) Or IsEmpty(Me!得意先CD) Or Val(Me!得意先CD) = 0 Then

この部分について、「Null」値だった時は検証されましたでしょうか?

【6158】Re:実行時エラー2108
お礼  ジュン  - 05/9/5(月) 9:26 -

引用なし
パスワード
   ▼たん さん:
>> 『”Gotocontrol”アクション ”GOTOCControlメソッド”またはSetFocusメソッド
>> を実行する前にフィールドを保存する必要があります』。
>> このエラーの意味と対処方法を教えてください。以下にコードを表示します。
>
>上記のコードの実行場所がBeforeUpdateであれば無理です。
>コード全体をAfterUpdateで行なうか、AfterUpdateでSetfocusを行なうように
>変更して下さい。
>
>(ちなみに全体のコードは見ていません。また、AfterUpdateに全体を写して良いか
> どうかについては、このイベントからだけでは、回答側は判断できません。)

たん さん、小僧さん ありがとう御座います。

ご指摘の通り BeforeUpdateで実行しました。AfterUpdateに変更できるか一度変更してみます。 ただ、何故、BeforeUpdateでは無理なのか教えて下さい。小生はACCESSの経験が浅くイベントの動きがもうひとつ理解できていません。お願いします。

【6159】Re:実行時エラー2108
回答  たん  - 05/9/5(月) 10:39 -

引用なし
パスワード
   >ご指摘の通り BeforeUpdateで実行しました。AfterUpdateに変更できるか一度変更してみます。 ただ、何故、BeforeUpdateでは無理なのか教えて下さい。

ヘルプに明記されていますが、

-----
BeforeUpdate コントロールまたはレコードで変更されたデータが更新される直前に発生します。
-----

データが更新されていない状態で、フォーカスを移動できないということです。
データが更新されていない状態でフォーカスを移動させようとすると、現在表示されて
いるデータは保存されていないにも関わらず、画面上には表示されているという不整合が
生じるからです。
で、その不整合をなくす為にメッセージを出し、注意喚起していると。

とはいえ、ヘルプに、注意書きで「BeforeUpdateでは、SetFocus等で他のコントロール
には移動できません。エラーになります。」とか一言書けばいいのに、とは思うけどね。

【6163】Re:実行時エラー2108
お礼  ジュン  - 05/9/5(月) 18:47 -

引用なし
パスワード
   ▼たん さん:
>>ご指摘の通り BeforeUpdateで実行しました。AfterUpdateに変更できるか一度変更してみます。 ただ、何故、BeforeUpdateでは無理なのか教えて下さい。
>
>ヘルプに明記されていますが、
>
>-----
>BeforeUpdate コントロールまたはレコードで変更されたデータが更新される直前に発生します。
>-----
>
>データが更新されていない状態で、フォーカスを移動できないということです。
>データが更新されていない状態でフォーカスを移動させようとすると、現在表示されて
>いるデータは保存されていないにも関わらず、画面上には表示されているという不整合が

たんさん

ありがとうございました。解決しました。本当にありがとう御座いました。

>生じるからです。
>で、その不整合をなくす為にメッセージを出し、注意喚起していると。
>
>とはいえ、ヘルプに、注意書きで「BeforeUpdateでは、SetFocus等で他のコントロール
>には移動できません。エラーになります。」とか一言書けばいいのに、とは思うけどね。

1638 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078242
(SS)C-BOARD v3.8 is Free