• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:RecordCount(ADO)が変わる?ADP+SQLServer)

ACCESS2000(ADP)+SQLServerにおいてRecordCountが変動する問題について

O_cyanの回答

  • ベストアンサー
  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.2

>結局、そのクライアントではSet rs = Me.RecordsetCloneをしている時点で、Cloneを取得しようとしているRecordset自体が全て読み込まれていない状態だったのではないかと思います。 通常は Forms!フォームB.RecordsetClone.MoveLast MsgBox "レコード数は、" _ & Forms!フォームB.RecordsetClone.RecordCount _ & "です。", vbInformation, "レコード数" でカウント出来ますからね。 :位置付けをサポートしていない場合すべてのレコードを取得して数えなければ正確なRecordCount値がわからない。 フォームのレコードソースじゃ全て読込済みでなければカウント出来ないですよね。 1回目のRecordCountは読込途中なのでその時によってランダムなカウント。2回目のRecordCountは最後まで読込んだカウントという事で解決して良かったです。

hideou
質問者

お礼

補足回答ありがとうございます。 また、私のやろうとしていたことは、単純にDocmd.Findrecordで実装可能でした。。 偏った知識や思い込みが非常に危険だということを改めて実感しました。 O_cyanさんお手数をおかけしました。ありがとうございます。

関連するQ&A

  • ADOのRecordCountプロパティについて

    ADOを介してOracleにアクセスしています。 以前にAccessで行っていた時は、 Set rst.Open "Table_Main", cnn, adOpenStatic With rst lCount = .RecordCount End With とすればレコード数が返ってきたのですが、 Oracleの場合は-1のままなのです。 レコードセットの開き方に問題があるのでしょうか。

  • アクセスADO 複数のレコードがあるのに-1が返る

    アクセスのADOを作っています。 テーブルにレコードは複数あるのですが、Filterをすると必ず-1が返ります。 どうしてでしょうか? エラーになってるのでしょうか? ---------------------------------------------------- Set cn = CurrentProject.Connection myStr = "test" rs.Open "Tテーブル", cn, adOpenForwardOnly, adLockReadOnly rs.Filter = ("フィールド1=" & "'" & myStr & "'") MsgBox rs.RecordCount ’マイナス-1になる rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing ---------------------------------------------------- rs.Open の下に、MsgBox rs.RecordCountを置いても、-1になることから、Filter のせいではないと思うのですが 原因がわかりません。 ご教授よろしくお願いします。

  • ADOでループすると1レコードずつ飛ばしてしまう

    アクセスなのですが Sub test() Set cn = CurrentProject.Connection rs.Open "テーブル", cn, adOpenKeyset, adLockOptimistic rs.Filter = "(店名 = '" & str店名 & "') And (URL = '未')" For j = 1 To rs.RecordCount rs("URL") = "http" rs.Update rs.MoveNext Next rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub このようにして、既存のレコードにフィルタをかけて該当のレコードの値を更新しているのですが rs.MoveNext をいれると、 1レコード目、3レコード目、5レコード目・・・と言う順番になってしまい、 最終的にrs.RecordCountの数を越したレコードを指定してしまい 実行時エラー 3021 「BOFとEOFのいずれかTRUEになっていか、または現のレコードが要求された操作には、現在のレコードが必要です。」 となってしまいます。 だからって rs.MoveNextをいれないと、rs.RecordCountに達するまで、 いつまでも同じレコードをループしてしまいます。 1レコードずつ順番にデータを掴む方法を教えてください。

  • Access レコードの移動

    ADP形式(Access2003)で社内システムを作っています。 質問なのですが・・・ 帳票形式のフォーム(商品マスタ)があります。フォームヘッダーにテキストボックス(名前:検索コード)あり、ここに商品コードを入力すると、該当するレコードへブックマークが移動します。 MDBのときは・・・   Dim ds As Recordset Set ds = RecordsetClone ds.FindFirst "[商品コード]='" & Me![検索コード] & "'" Bookmark = ds.Bookmark 以下省略 これで動作したのですが、ADPではエラーになります。 ADOになっているからでしょうか?

  • サブフォームのレコードセットをメインフォームで処理したい

    [Access2003] サブフォームのレコードソースをメインフォームでレコードセットとして取得し、処理したいと思い、 Private Sub cmd選択_Click() Dim RS As New ADODB.Recordset Set RS = Me!F_Sub.Form.RecordsetClone End Sub とやってみたのですが、型が一致しません。"とエラーになります。 WEB上でのサンプルも上のコードでいけるような感じで説明がありましたが何が問題なのでしょうか?

  • 参照設定にチェックを入れないでADOを使いたい

    アクセス2003です。 テーブル1にテキスト型のフィールド1を作り、数レコードをサンプルで入れました。 そしてVBE画面で Sub test() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & CurrentProject.FullName rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic MsgBox rs.RecordCount rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub としたらレコード件数が取得できました。 質問は ツール→参照設定の Microsoft ActiveX Data Objects 2.8 Library にチェックをいれなくても VBAコードだけで参照設定できたような気がするので そのコードを教えてくいただけませんか? アドバイスよろしくお願いします。

  • レコード移動について

    単票フォームで何件かレコードがあります。 それを DoCmd.GoToRecord , , acNext で1つずつ移動させ、今何番目のデータなのか?をメッセージで出し、 最後のレコードになったら「最後のレーコード」というメッセージの後に Exit Sub させたいのですが... F8 で1つ1つコンパイルさせるとできるのですが、 データベース画面から直接フォームをDBCLして開こうとすると いきなり「最後のレコード」になってしまいます。 記述のが悪いのでしょうか?それともフォーム自体が悪いのでしょうか? 教えてください Private Sub Form_Current() If Me.CurrentRecord >= Me.RecordsetClone.RecordCount Then MsgBox "最後のレコード" Exit Sub Else MsgBox "途中のレコード" DoCmd.GoToRecord , , acNext   End If End Sub

  • ADOで現在のレコードの次のレコードの値も取得

    ADOで現在のレコードの次のレコードの値も取得するには? アクセスに対してADOでデータを取得しているのですが 例えばテーブルに フィールド1 あああ いいい ううう と入ってる時に、1レコード目のあああの値を取得しているときに、同時に次のレコードのいいいの値も取得することは可能ですか? Sub Sample() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Set cn = CurrentProject.Connection rs.Open "SELECT * FROM テーブル1", cn, adOpenStatic, adLockPessimistic For i = 1 To rs.RecordCount MsgBox rs("フィールド1") '現在のレコード MsgBox rs("フィールド1") + 1 '次のレコード rs.MoveNext Next rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub これだとダメなようです。 あああ いいい が表示されるようにしたいのですが、どうすればいいか教えてください。

  • ADO フィルタ 変数

    Sub test() Dim 月 As Long cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & CurrentProject.FullName rs.Open "Tテーブル", cn, adOpenStatic, adLockPessimistic 月 = 5 rs.Filter = " 処理日 = '" & #"& 月 &"/29/2009# & "'" MsgBox rs.RecordCount Set rs = Nothing Set cn = Nothing End Sub のように月に変数を入れ、フィルタをかけたいのですが 上記のコードでエラーになってしまいます。 アドバイスよろしくお願いします。

  • ADOでテーブルのフィールド「A」の「0000」の数を数えたい。

    エクセルVBAからアクセスへ Set con = New ADOdb.Connection con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ACCESSファイル名 Set Rs = New ADOdb.Recordset Rs.Open テーブル名, con, adOpenKeyset, adLockOptimistic Debug.Print Rs.RecordCount Set Rs = Nothing Set con = Nothing とエクセルVBAにコードを記述していますが思いどおりにいきません。 Debug.Print Rs.RecordCount しかわからなく これだとレコードの数しか数えられませんでした。 テーブルのフィールド「A」には「0000」が複数あります。 これを数えるにはどうすればいいのでしょうか? もっといいやり方があれば教えてくださいませ。 よろしくお願いします。