none
Access VBA データシートビュー(フォーム)での表示 RRS feed

  • 質問

  • AccessのVBAでAzureに登録されたストアドプロシジャーの結果をデータシートビューで表示しようとしています。ストアドプロシジャー自体が動的に生成されるものなので、OpenRecordsetで得られた結果をそのまま、フォームのレコードソースにすることはできません。そこで、Loopを使用してレコードセットの結果をフォームの項目にForms![フォーム名]!テキスト項目名.Value = .Fields(0).Valueといった形で代入していますが、データシートの行の加算(?)方法がわからず、全ての結果が1行目に更新表示され、最終行が1行目に表示されてしまっています。Loop内で、データーシートビューのRow等を加算すれば対処できるのではと思っているのですが、如何でしょうか?
    2014年11月9日 17:05

すべての返信

  • フォームオブジェクトに対して操作を行っているということですね。

    ではDoCmd.GoToRecord,,acNewRecとして新規行に行ってみてはどうでしょうか


    2014年11月9日 21:53
  • フォームの「レコードソース」ではなく「set Me.Recordset = ○○」のように「レコードセット」に指定しては如何でしょうか?

    2014年11月10日 7:19
  • フォームオブジェクトに対して操作を行っているということですね。

    ではDoCmd.GoToRecord,,acNewRecとして新規行に行ってみてはどうでしょうか



    行ってみましたが、「2151/指定のレコードに移動できません」となってダメでした。
    2014年11月10日 16:58
  • フォームの「レコードソース」ではなく「set Me.Recordset = ○○」のように「レコードセット」に指定しては如何でしょうか?

    フォームのレコードセットにストアドのレコードセットをセットしてみました。データーシートの表の件数はストアドの結果と同じになりましたが、個別の行には表示がされません。

          Forms![フォーム名]!項目名.Value = .Fields(0).Value

    と言う形で歳入すると全ての行がストアドの結果の1行目の内容が表示されました。

    Do while rs.EOF

       Forms![フォーム名]!項目名.Value = .Fields(0).Value

       rs.movenext

    Loop

    とすると、なぜかEOFが検知できないので永久ループになってしまいました。

     
    2014年11月10日 17:08
  • DoCmd.GoToRecord,,acNewRecは非連結フォームに対しては有効ではありませんね、失礼しました

    papa_iwaseさんのやりかたで行に表示されなかったのは、各コントロールのコントロールソースを設定すればOKだと思います。
    2014年11月11日 0:44
  • Yamasaki1972様

    papa_iwase様

    ありがとうございました。

    ・フォームのレコードセットにストアドの結果をset

    ・フォームの各項目のコンとロールソースにフィールド.Nameを代入

    で、正常に出力することができました。「Nullが入ったいたら」という心配がありましたが、特に問題ないようです。

    助かりました。

    2014年11月11日 7:49