Microsoft Access Club Access超初心者対象Forum Access初級者対象Forum Access初・中級者対象Forum Access VBA Tips Forum DAO、ADO、SQL Forum

     

リストへもどる

投稿記事の一括表示

タイトル条件に合ったレコードの特定フィールドに1を加算する方法
記事No10825
投稿日: 2011/06/14(Tue) 15:43
投稿者shin
解決済: ON
OS:
Access Version:
再度お世話になります。
[10797] 重複の可能性があるリストを直接編集 で質問させていただきました。
10797でご指摘を受け、キーワードリストテーブルにKeyword_Countというフィールドを追加し
数値型(Long)としています。
前回は一覧画面で、キーワードを編集し、リストのカウントが2以上の場合は削除せず
1の場合はカウントが0となり削除される方法を教えていただきました。
この機能を維持するために、データ登録時からキーワード入力された際に
すでに登録のあるもののKeyword_Countに+1し、ないものは新しくキーワードリストにフィールドを
追加して、1を初期値にしたいと思っています。
登録用画面で、キーワードは1つのテキストボックスにスペース区切りで複数入力することが
できるようになっています。

今回は、すでに登録のあるもののKeyword_Countに+1するというところがうまくいきません。
以下のようにしています。「カレントレコードがありません」とエラーがでます。
間違っている場所をご指摘願えないでしょうか?

よろしくお願い致します。

Private Sub Keyword_AfterUpdate()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim Dic As Object
Dim Count As Integer

Set db = CurrentDb
Set rs = db.OpenRecordset("キーワードリスト用テーブル", dbOpenDynaset)
Set Dic = CreateObject("Scripting.Dictionary")
Do Until rs.EOF
Dic.Add rs!Keyword_txt.Value, Null
rs.MoveNext
Loop

For Each Var In Split(Me!Keyword, " ")
If Dic.Exists(Var) Then
Count = rs!Keyword_Count + 1
rs.Update "Keyword_Count", Count
Else
rs.AddNew
rs!Keyword_txt = Var
rs.Update
End If
Next Var
rs.Close: db.Close
End Sub

タイトルRe: 条件に合ったレコードの特定フィールドに1を加算する方法
記事No10826
投稿日: 2011/06/14(Tue) 17:53
投稿者APR
解決済: ON
> Set db = CurrentDb
> Set rs = db.OpenRecordset("キーワードリスト用テーブル", dbOpenDynaset)
> Set Dic = CreateObject("Scripting.Dictionary")
> Do Until rs.EOF
> Dic.Add rs!Keyword_txt.Value, Null
> rs.MoveNext
> Loop
レコードセットの最後までループして終わっている

> For Each Var In Split(Me!Keyword, " ")
> If Dic.Exists(Var) Then
> Count = rs!Keyword_Count + 1
> rs.Update "Keyword_Count", Count
レコードセットはもう終わってる

> Else
> rs.AddNew
> rs!Keyword_txt = Var
> rs.Update
> End If
> Next Var
> rs.Close: db.Close
> End Sub

タイトルRe: 条件に合ったレコードの特定フィールドに1を加算する方法
記事No10830
投稿日: 2011/06/15(Wed) 08:50
投稿者Hank
解決済: ON
> 間違っている場所をご指摘願えないでしょうか?
 
> Private Sub Keyword_AfterUpdate()
>  Dim db  As DAO.Database
>  Dim rs  As DAO.Recordset
>  Dim Dic As Object
> 
>  Set db = CurrentDb
>  Set rs = db.OpenRecordset("キーワードリスト用テーブル", dbOpenDynaset)
>  Set Dic = CreateObject("Scripting.Dictionary")
>  Do Until rs.EOF
>     Dic.Add rs!Keyword_txt.Value, Null
>     rs.MoveNext
>  Loop

>  For Each Var In Split(Me!Keyword, " ")
       If Dic.Exists(Var) Then
          rs.FindFirst "Keyword_txt = '" & Var & "'"
          rs.Edit
          rs!Keyword_Count = rs!KeyWord_Count + 1
     rs.Update 

        Else
>         rs.AddNew
>         rs!Keyword_txt = Var
     rs!Keyword_Count = 1 
         rs.Update
>       End If
>   Next Var
>   rs.Close: db.Close
    Set Dic = Nothing
> End Sub

それから、ヘルプは読んだ方が良いですよ。
DAO.Recordset に
  rs.Update "Keyword_Count", Count 
こんな構文は有りません。
また、Updateメソッドは、AddNewメソッドまたはEditメソッドと一対です。
Editメソッドを使わないでUpdateメソッドを実行するとエラーになります。
確か、実行時エラー:xxx「Updateメソッドには、対応する AddNew または Edit メソッドが必要です。」

タイトルRe^2: 条件に合ったレコードの特定フィールドに1を加算する方法
記事No10831
投稿日: 2011/06/16(Thu) 11:13
投稿者shin
解決済: ON
APR様 Hank様

お返事ありがとうございます。
ご指摘いただいたおかげで解決することができました。

今回はこのAccessClubのADO,DAOの部分を随分読んで
対応してみたのですが、VBA自体のヘルプを読んでいませんでした。

> それから、ヘルプは読んだ方が良いですよ。
そうしたいと思います。ありがとうございます。

> DAO.Recordset に
> rs.Update "Keyword_Count", Count
> こんな構文は有りません。
> また、Updateメソッドは、AddNewメソッドまたはEditメソッドと一対です。
> Editメソッドを使わないでUpdateメソッドを実行するとエラーになります。
> 確か、実行時エラー:xxx「Updateメソッドには、対応する AddNew または Edit メソッドが必要です。」
勉強しなおします(+_+)

問題は解決しましたが、基本的なことがわかっていないように思います。
精進します。

今度は質問投稿する前に、Net上とHelpを調べたいと思います。

ありがとうございましたm(_ _)m

- 以下のフォームから自分の投稿記事を修正・削除することができます -
処理 記事No パスワード

ページの先頭へ 前ページへ戻る