こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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件目が表示される。

投稿日時 - 2005-10-12 03:22:36

QNo.1708091

暇なときに回答ください

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.6

横レス失礼します。

・テキストボックス=Null(空白)の場合
  →テーブルの全レコードを表示
・テキストボックス≠Nullの場合
  →テキストボックスの値で曖昧検索

ということでよろしいんですよね?

でしたら、テキストボックスの「更新後(AfterUpdate)」イベントで、値がNullかどうかを判定して、フォームのレコードソース(RecordSource)を、
  テキストボックスがNullならテーブルに、
  テキストボックスがNullでないならクエリに、
それぞれ切り替えるマクロなりVBAなりを組んでやればよいのではないでしょうか?

自分で組んでるDBでは、この方法をよく使ってます。やり方にもよるんでしょうが、クエリで抽出条件を重ねると(特に曖昧検索)、表示が遅くなることが多いので。

投稿日時 - 2005-10-15 15:05:15

ANo.5

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

Nullも含めた全レコードということなのですね。

投稿日時 - 2005-10-14 14:55:12

補足

説明不足ですみません。

Nullも含めた全レコードではありません。

たとえば、、、
Like "*" & Forms![F_LIST抽出]![NAME] & "*" & "*") をクエリ抽出条件にセットします。(Sub_form)

テーブルには、

ID NAME
1 ゆうすけ
2 たくや
3 まき
4 (空白:NULL)
5 ゆき

とします。

テキストボックスに、"ゆ"といれると"ゆうすけ"と"ゆき"が抽出します。

しかし、テキストボックスに空白(NULL)にすると、5件抽出しないといけないのに、4件しか抽出しません。

ID / NAME
4 / (空白:NULL)

が抽出しません。

ご指導いただけましたら幸いです。

どうぞよろしくお願いいたします。

投稿日時 - 2005-10-14 18:48:04

ANo.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]の両方に入力されていればその値で抽出されどちらか片方に値が入力されていてもその値で抽出され両方とも入力がなければ全てのレコードが抽出されます。

投稿日時 - 2005-10-13 10:36:12

補足

テスト的に下記のようなテーブルを作成し、クエリを実行したところ、フォームのテキストボックスが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を操作するしかないかと考えております。

ご指導いただけましたら、幸いです。

宜しくお願いいたします。

投稿日時 - 2005-10-14 11:29:23

#1です
NULLを抽出したいのであれば

SELECT *
FROM LIST
WHERE (((LIST.KeyField) Is Null));

では? KeyField は適当に置き換えてください。

投稿日時 - 2005-10-13 06:24:11

ANo.2

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

投稿日時 - 2005-10-12 13:47:01

補足

>Nullの場合なにもフォームに表示しないということで
>すか?それともNullの場合は全レコード表示するとい
>うことですか?

後者の場合です。

フォームのテキストボックスに入力したものに対して、サブフォームにてあいまい検索を実行したいのです。

>LIKE "*" & [Forms]![フォーム名]![テキストボックス>名] & "*" & "*"

上記を抽出条件に設定してもやはり、テキストボックスがNULLの場合、NULLのデータは抽出できませんでした。

恐れ入りますが、宜しくお願いいたします。

投稿日時 - 2005-10-13 01:40:37

VBAは長いこといじっていないので大方忘れましたが(^^;

ざっとソースを見ると Loop で最終行まで移動させているので、最終行のみ表示されるのでしょう。

もっと簡単に、フォームとクエリーを関係づけるのでは拙いんでしょうか?

投稿日時 - 2005-10-12 06:08:22

補足

お返事いただきまして、ありがとうございます。

当初は、フォームの中にサブフォームを作り、サブフォームとクエリを関連つけておりました。

クエリの抽出条件にて、LIKE "*" フォームのテキストボックス "*" とした際に、フォームのテキストボックスがNULL場合、NULLのデータが抽出できないので、ADO接続でデータを操作しようと思い、切替えました。

フォームのテキストボックスがNULLの場合、クエリ抽出はしない。フォームのテキストボックスがNULL以外場合はクエリ抽出条件を適応すると考えておりましたが、その方法がわかりませんでした。

ご指導いただけると幸いでございます。

どうぞ宜しくお願い致します。

投稿日時 - 2005-10-12 09:33:50

あなたにオススメの質問