• 締切済み

ADO接続からのACCESSデータシートへの表示について

ADO接続して、ACCESSのデータシートへ表示できないので、困っております。下記の処理を実行すると、テーブルの最後データ行(1行)しかデータシートへ表示できません。 Debug.printにて、データは正しく抽出できることは確認しており、おそらくACCESSデータシートが新しく追加できないことが原因だと思います。 わかる方がいらっしゃいましたら、ご指導いただけないでしょうか。 ●以下にソース記述 -------------------------------------------------- Private Sub Form_Load() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim StrSQL As String Set cn = CurrentProject.Connection StrSQL = "SELECT * " _ & "FROM LIST; " Set rs = New ADODB.Recordset rs.Open StrSQL, cn, adOpenKeyset, adLockReadOnly Do Until rs.EOF Forms![F_LIST抽出]![ID] = rs!ID_LIST Forms![F_LIST抽出]![NAME] = rs!NAME_LIST rs.MoveNext Loop rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub ------------------------------------------------ フォーム(F_LIST抽出)を開くと、LIST(テーブル)のID_LISTとrs!NAME_LISTをデータシートを表示 ※フォームでは、ただデータシートを表示している ●わからないこと  たとえば、99件あるレコードをフォームから表示する と1行しか表示されず、そのデータは99件目が表示される。

みんなの回答

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.6

横レス失礼します。 ・テキストボックス=Null(空白)の場合   →テーブルの全レコードを表示 ・テキストボックス≠Nullの場合   →テキストボックスの値で曖昧検索 ということでよろしいんですよね? でしたら、テキストボックスの「更新後(AfterUpdate)」イベントで、値がNullかどうかを判定して、フォームのレコードソース(RecordSource)を、   テキストボックスがNullならテーブルに、   テキストボックスがNullでないならクエリに、 それぞれ切り替えるマクロなりVBAなりを組んでやればよいのではないでしょうか? 自分で組んでるDBでは、この方法をよく使ってます。やり方にもよるんでしょうが、クエリで抽出条件を重ねると(特に曖昧検索)、表示が遅くなることが多いので。

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

>クエリの抽出条件で、Like "*" & NULL & "*" & "*"では、NULLのデータは抽出できないように思います Nullのレコードを抽出したいのですか? ((テーブル1.Name) Like "*" & Forms![F_LIST抽出]![NAME] & "*" & "*") OR (テーブル名.Name) Is Null) の様にNullはIs Nullで指定しないと抽出できません。 NullはIs Null関数で指定してください。 Nullも含めた全レコードということなのですね。

RashMan
質問者

補足

説明不足ですみません。 Nullも含めた全レコードではありません。 たとえば、、、 Like "*" & Forms![F_LIST抽出]![NAME] & "*" & "*") をクエリ抽出条件にセットします。(Sub_form) テーブルには、 ID NAME 1 ゆうすけ 2 たくや 3 まき 4 (空白:NULL) 5 ゆき とします。 テキストボックスに、"ゆ"といれると"ゆうすけ"と"ゆき"が抽出します。 しかし、テキストボックスに空白(NULL)にすると、5件抽出しないといけないのに、4件しか抽出しません。 ID / NAME 4 / (空白:NULL) が抽出しません。 ご指導いただけましたら幸いです。 どうぞよろしくお願いいたします。

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

>上記を抽出条件に設定してもやはりテキストボックスがNULLの場合・・ 質問内にある記述を見たのですが抽出したいフィールドが[ID]と[NAME]の二つあるのですね。 LIKE "*" & [Forms]![フォーム名]![テキストボックス>名] & "*" & "*" は単一の抽出条件に有効です。 抽出条件が二つあり片方のみ入力されていてもう一つが空白の場合もあり、両方とも空白の場合もあるということなのでしょうか。 その場合下記のクエリではどうでしょうかクエリのSQLビューにコピーして試してください。 SELECT テーブル名.* FROM テーブル名 WHERE (((テーブル名.ID) Like "*" & Forms![F_LIST抽出]![ID] & "*" & "*") AND ((テーブル名.Name) Like "*" & Forms![F_LIST抽出]![NAME] & "*" & "*")); この抽出の記述で[F_LIST抽出]![ID]・[F_LIST抽出]![NAME]の両方に入力されていればその値で抽出されどちらか片方に値が入力されていてもその値で抽出され両方とも入力がなければ全てのレコードが抽出されます。

RashMan
質問者

補足

テスト的に下記のようなテーブルを作成し、クエリを実行したところ、フォームのテキストボックスがNULLのものでは、やはりNULLのデータは抽出できませんでした。 テーブル名:テーブル1 フィールド:ID(主キー)、name SELECT テーブル1.* FROM テーブル1 WHERE (((テーブル1.ID) Like "*" & Forms![F_LIST抽出]![ID] & "*" & "*") AND ((テーブル1.Name) Like "*" & Forms![F_LIST抽出]![NAME] & "*" & "*")); 説明不足で申し訳ございません。実際の作成するテーブルのフィールドは、約10あります。クエリの抽出条件で、Like "*" & NULL & "*" & "*"では、NULLのデータは抽出できないように思います。抽出条件でのIFはiff(条件),(値),(値)しかないので、やはり、ADO接続して、NULLを操作するしかないかと考えております。 ご指導いただけましたら、幸いです。 宜しくお願いいたします。

noname#182251
noname#182251
回答No.3

#1です NULLを抽出したいのであれば SELECT * FROM LIST WHERE (((LIST.KeyField) Is Null)); では? KeyField は適当に置き換えてください。

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

>フォームのテキストボックスがNULL場合NULLのデータが抽出できない >フォームのテキストボックスがNULLの場合クエリ抽出はしない Nullの場合なにもフォームに表示しないということですか?それともNullの場合は全レコード表示するということですか? 後者の場合: テキストボックスに入力されていればその値で抽出し何も入力されていなければ全レコードを表示するなら下記のように記述すれば出来ます。 LIKE "*" & [Forms]![フォーム名]![テキストボックス名] & "*" & "*"

RashMan
質問者

補足

>Nullの場合なにもフォームに表示しないということで >すか?それともNullの場合は全レコード表示するとい >うことですか? 後者の場合です。 フォームのテキストボックスに入力したものに対して、サブフォームにてあいまい検索を実行したいのです。 >LIKE "*" & [Forms]![フォーム名]![テキストボックス>名] & "*" & "*" 上記を抽出条件に設定してもやはり、テキストボックスがNULLの場合、NULLのデータは抽出できませんでした。 恐れ入りますが、宜しくお願いいたします。

noname#182251
noname#182251
回答No.1

VBAは長いこといじっていないので大方忘れましたが(^^; ざっとソースを見ると Loop で最終行まで移動させているので、最終行のみ表示されるのでしょう。 もっと簡単に、フォームとクエリーを関係づけるのでは拙いんでしょうか?

RashMan
質問者

補足

お返事いただきまして、ありがとうございます。 当初は、フォームの中にサブフォームを作り、サブフォームとクエリを関連つけておりました。 クエリの抽出条件にて、LIKE "*" フォームのテキストボックス "*" とした際に、フォームのテキストボックスがNULL場合、NULLのデータが抽出できないので、ADO接続でデータを操作しようと思い、切替えました。 フォームのテキストボックスがNULLの場合、クエリ抽出はしない。フォームのテキストボックスがNULL以外場合はクエリ抽出条件を適応すると考えておりましたが、その方法がわかりませんでした。 ご指導いただけると幸いでございます。 どうぞ宜しくお願い致します。

関連するQ&A