• ベストアンサー

MS-ACCESSで、レコードセットを取得したい。

MS-ACCESS2000での質問です。 VBAのコードで、任意のテーブルから、レコードセットを取得して、ADO.Recordset変数に代入したいのですが、どのような記述をすれば、出来ますでしょうか? 最終的にはそのレコードセットの各レコードに操作をしたいのです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#79209
noname#79209
回答No.1

Dim rstTable as ADODB.Recordset Set rstTable = New ADODB.Recordset rsTable.open "テーブル名", CurrentProject.Connection ですが、以降の処理は多岐にわたりますので、 「技術評論社」の「Access2002 表現百科850」 http://www.amazon.co.jp/exec/obidos/ASIN/4774115681/qid=1127782111/sr=1-7/ref=sr_1_10_7/250-1523107-0995417 という本をお求めになって、学習することをお勧めします。

KAZUMI2003
質問者

お礼

ありがとうございます。ADOという技術でかなりの事ができるようで、ご紹介いただいた書籍も今度購入してみることにします。本当に助かりました。

その他の回答 (1)

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

>任意のテーブルから、レコードセットを取得して・・ 他のmdbファイルのテーブルから取得したい場合 他のmdbへの接続を確立させてテーブル名を指定すれば出来ます。 Dim cnn As New ADODB.Connection Dim rec As New ADODB.Recordset cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\フルパス\ファイル名.mdb;" rec.Open "テーブル名", cnn, adOpenKeyset, adLockOptimistic でレコードセットを取得できます。

KAZUMI2003
質問者

お礼

ありがとうございました。ADOという技術でいろいろな事が出来るとわかりました。更に勉強してDBを改良していこうと思っています。でも、HELPの表現ってわかりにくいですね。今回はありがとうございました。助かりました。

関連するQ&A

  • AD0を使ってレコード総数を取得する方法は?

    22歳男性です。 VBAでADOを用いてデータベース(SQL Server)に接続してレコードを取得するプログラムを作りました。 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ dim recordset as new ADODB.Recordset dim a as integer recordset.open , , adOpenStatic a = recordset.recordcount ←← レコード総数代入 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ (少しソースを省いています。) このようにして、レコードの総数を代入するようなプログラムを作ったんですけど、このレコードの総数を取得する方法は、「recordcount」を使うしかないのでしょうか? もし上記以外の方法で、レコードの総数を取得できる方法を知っていたら教えてください。

  • 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 これだとダメなようです。 あああ いいい が表示されるようにしたいのですが、どうすればいいか教えてください。

  • 異なるフォームに属する関数間でACCESSのレコードセットを受け渡しする。

    msAccess2000のVBAコードの質問です。 元々、全てを理解しているわけではないのにVBAコードを書いているのが無茶なんですが、無茶を承知でプログラミングしています。 あるクエリの結果を、あるフォームで帳票表示しています。この帳票の一レコードにボタンをつけて、クリックイベントで、そのレコードを取得しようとしています。フォームはこの後、閉じられた後、呼び出された親にその、レコードを渡したいのです。 フォームは、親フォームのボタンクリックイベントから、DoCmd.Openformメソッドによって呼び出されるので、戻り値は使えません。 しょうがないので、広域変数rst(DAO.Recordset型)で、受け渡そうと思ったのですが、recordset型は、どうやら参照のようで、フォーム(クエリ?)を閉じると、レコードが壊れてしまうようなのです。 Module1で、 public rst as DAO.recordset として、 Private Sub コマンド34_Click() set Module1.rst=me.recordset ' この中では、rst.fields(*)で、フィールドの値を使えるのですが・・・ END Sub 呼び出した親フォームでは、module1.rst.fields(*)を使用できません。 質問は二つあります。 1)広域変数rstは、上記のような宣言・使用法で問題ないですか? 2)sub またはfunction間にわたって、レコードを渡す、いい方法はないですか?

  • レコードセットに新規追加する

    Access2013 VBAで ■テーブルa ・id ・名前 ・id2 とあり このテーブルのレコードセットを以下のように作ります。 dim Rec = dao.Recordset Set Db = CurrentDB set Rec = Db.OpenRecordset("Select * from [テーブルa] where id2 = " & 2, dbOpenDynaset) この時、このテーブルにid2=2のレコードが何もない場合、この生成したRecで、 Rec.AddNew Rec.Fields("名前").value = "名前" Rec.Update と出来ますでしょうか? よろしくお願いします。

  • Access2000/2002フォームのレコードセットについて

    Access97で作成されたプログラムを Access2002で作り直す必要に迫られています。 プロジェクト形式ではなく、MDB形式のままで進めているのですが VBAのコーディングは、すべてADOに変更するように指示されています。 基本的な知識が不足している状況なので、おかしな質問だと思いますが どうかご容赦ください。 フォームで利用するレコードセットについて、壁にぶつかっています。 Access97のフォームで普通に利用していた Set rs=Me.RecordsetClone これは、ADOでは、どのように置き換えを考えていけばよいのでしょうか? フォーム内のモジュールで、そのフォームに結びついている Recordsetの取り扱い方法について、一般的なルールのようなものを 教えていただけますと、ありがたいのですが・・・ 半日ほど、色々なサイトを検索してみたのですが どうにも答えが見つかりません。 そもそも、Access2000/2002フォームのRecordSetがDAOなのかADOなのかも 分かりません。 アドバイスや、参考になる書籍の情報などをいただけないでしょうか。 なにとぞ、よろしくお願いいたします。

  • ADOのレコードセットをローカルにキャッシュする方法

    ご質問させて頂きます。 MS SQL 2000 と VB 6.0 の環境で、ADO接続しています。 SQLサーバに接続し、データをレコードセットに取得したのですが、Connectionをクローズするとレコードセットも参照できなくなってしまいます。 Connectionをクローズ後もレコードセットを使えるようにする方法はありませんでしょうか? どうぞ宜しくお願いします。

  • VBAでレコードセットの総レコード数を取得する方法

    Dim con As ADODB.Connection Dim rsData As ADODB.Recordset Dim DNSname$,USERname$,PASSw$,cnt&  Set con = CreateObject("ADODB.Connection")  con.Open "DSN=" & DNSname & "; UID= " USERname & "; PWD=" & PASSw  Set rsData = New ADODB.Recordset  rsData.Open SQL, con  Do While Not rsData.EOF   rsData.MoveLast   cnt=rsData.RecordCount   rsData.First  LOOP といいコードで総レコード数が取得できるかなとやってみたところ、rsData.MoveLastのところで、「行セットは逆フェッチをサポートしていません」というエラーが出ました。 なにかほかの方法で総レコード数を取得する方法があるのでしょうか? 自分で他に試したことは、rsData.EOFまでrsData.MoveNextでもっていきrsData.EOF-1レコードの.RecordCountを取得すしようと試みましたが、最後のレコードまできても.RecordCountは「-1」のまま変化しませんでした。レコードセットの呼び込み方が不味いのでしょうか?

  • DAOレコードセットから更に絞込みしたい

    VBAで質問です。あるレコードセットXをsqlで取得しました。さらにこのレコードセットにSQLを投げて絞り込みたいと思っています。例えばSQLでA,B,C列を取得しました。このA、B、C列があるレコードセットにwhereで絞り込みたいと思ってます。レコードセットXに向けて、select * from X where...というコードは投げれるのでしょうか?

  • フィルタ後のテーブルのレコード数を取得したい

    アクセスvbaです。 フィルタ後のテーブルのレコード数を取得したいのですが Debug.Print DCount("[フィールド1]", "テーブル1") だと、フィルタ前の数が取得されてしまいます。 フォーム1にテーブル1を紐付けて、 更にフィルタをしているのですが、 元のテーブル1のレコード数が10として、 フィルタ後が3なら、3を取得するVBAコードを教えてください。

  • ADOレコードセット操作(Forループ用の変数)

    CSVファイルからADO接続でレコードセットを取得し、 順次出力していきたいと考えています。 CSVファイルにはフィールド名が含まれていないので schema.iniで  Col1=F1 char  Col2=F2 char  Col3=F3 char  Col4=F4 char  Col5=F5 char  Col6=F6 char・・・ という要領で名前を付けています。 現在、 myData(1)=recordset![F1] myData(2)=recordset![F2] myData(3)=recordset![F3]・・・ という形でフィールド数と同じ行数、レコードを取り出すコードを記述していますが、これを  For i = 1 to 6   myData(i)=recordset!F[i]  Next i ・・・のような形でForループにできないかと試行錯誤しています。 うまい具合にフィールド名の連番数字を使うには、どのようにしたら よいものでしょうか?