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件目が表示される。
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
横レス失礼します。
・テキストボックス=Null(空白)の場合
→テーブルの全レコードを表示
・テキストボックス≠Nullの場合
→テキストボックスの値で曖昧検索
ということでよろしいんですよね?
でしたら、テキストボックスの「更新後(AfterUpdate)」イベントで、値がNullかどうかを判定して、フォームのレコードソース(RecordSource)を、
テキストボックスがNullならテーブルに、
テキストボックスがNullでないならクエリに、
それぞれ切り替えるマクロなりVBAなりを組んでやればよいのではないでしょうか?
自分で組んでるDBでは、この方法をよく使ってます。やり方にもよるんでしょうが、クエリで抽出条件を重ねると(特に曖昧検索)、表示が遅くなることが多いので。
No.5
- 回答日時:
>クエリの抽出条件で、Like "*" & NULL & "*" & "*"では、NULLのデータは抽出できないように思います
Nullのレコードを抽出したいのですか?
((テーブル1.Name) Like "*" & Forms![F_LIST抽出]![NAME] & "*" & "*") OR (テーブル名.Name) Is Null)
の様にNullはIs Nullで指定しないと抽出できません。
NullはIs Null関数で指定してください。
Nullも含めた全レコードということなのですね。
この回答への補足
説明不足ですみません。
Nullも含めた全レコードではありません。
たとえば、、、
Like "*" & Forms![F_LIST抽出]![NAME] & "*" & "*") をクエリ抽出条件にセットします。(Sub_form)
テーブルには、
ID NAME
1 ゆうすけ
2 たくや
3 まき
4 (空白:NULL)
5 ゆき
とします。
テキストボックスに、"ゆ"といれると"ゆうすけ"と"ゆき"が抽出します。
しかし、テキストボックスに空白(NULL)にすると、5件抽出しないといけないのに、4件しか抽出しません。
ID / NAME
4 / (空白:NULL)
が抽出しません。
ご指導いただけましたら幸いです。
どうぞよろしくお願いいたします。
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]の両方に入力されていればその値で抽出されどちらか片方に値が入力されていてもその値で抽出され両方とも入力がなければ全てのレコードが抽出されます。
この回答への補足
テスト的に下記のようなテーブルを作成し、クエリを実行したところ、フォームのテキストボックスが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を操作するしかないかと考えております。
ご指導いただけましたら、幸いです。
宜しくお願いいたします。
No.3
- 回答日時:
#1です
NULLを抽出したいのであれば
SELECT *
FROM LIST
WHERE (((LIST.KeyField) Is Null));
では? KeyField は適当に置き換えてください。
No.2
- 回答日時:
>フォームのテキストボックスがNULL場合NULLのデータが抽出できない
>フォームのテキストボックスがNULLの場合クエリ抽出はしない
Nullの場合なにもフォームに表示しないということですか?それともNullの場合は全レコード表示するということですか?
後者の場合:
テキストボックスに入力されていればその値で抽出し何も入力されていなければ全レコードを表示するなら下記のように記述すれば出来ます。
LIKE "*" & [Forms]![フォーム名]![テキストボックス名] & "*" & "*"
この回答への補足
>Nullの場合なにもフォームに表示しないということで
>すか?それともNullの場合は全レコード表示するとい
>うことですか?
後者の場合です。
フォームのテキストボックスに入力したものに対して、サブフォームにてあいまい検索を実行したいのです。
>LIKE "*" & [Forms]![フォーム名]![テキストボックス>名] & "*" & "*"
上記を抽出条件に設定してもやはり、テキストボックスがNULLの場合、NULLのデータは抽出できませんでした。
恐れ入りますが、宜しくお願いいたします。
No.1
- 回答日時:
VBAは長いこといじっていないので大方忘れましたが(^^;
ざっとソースを見ると Loop で最終行まで移動させているので、最終行のみ表示されるのでしょう。
もっと簡単に、フォームとクエリーを関係づけるのでは拙いんでしょうか?
この回答への補足
お返事いただきまして、ありがとうございます。
当初は、フォームの中にサブフォームを作り、サブフォームとクエリを関連つけておりました。
クエリの抽出条件にて、LIKE "*" フォームのテキストボックス "*" とした際に、フォームのテキストボックスがNULL場合、NULLのデータが抽出できないので、ADO接続でデータを操作しようと思い、切替えました。
フォームのテキストボックスがNULLの場合、クエリ抽出はしない。フォームのテキストボックスがNULL以外場合はクエリ抽出条件を適応すると考えておりましたが、その方法がわかりませんでした。
ご指導いただけると幸いでございます。
どうぞ宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Access(アクセス) DoCmd.SearchForRecord が動かない時の解決方法 3 2022/07/22 15:31
- Access(アクセス) 実行時エラー3131 FROM 句の構文エラーです について 7 2022/06/13 15:45
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) ユーザーフォームの表示を追加したい 2 2023/03/26 23:18
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- PowerPoint(パワーポイント) エクセルのマクロについて教えてください。 1 2022/03/25 17:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MS-DOSコマンドプロンプトを途...
-
抽出したデータを修正して元の...
-
ACCESSの集計クエリで3件ある...
-
エクスプローラーで「2つの条件...
-
SQLServerからエクセルにデータ...
-
ACCESSのクエリで同じSQL文だが...
-
VBAでEXCELファイルからデータ...
-
PS2のBGM抽出
-
空白文字とスペースの検索
-
Accessデータベースで抽出した...
-
アクセス クエリ-で空白以外の...
-
エクセルで特定データの抽出を...
-
Excel-フィルタオプション-<>が...
-
エクセル関数 文字(ハイフン...
-
Oracleでの文字列連結サイズの上限
-
GROUP BYを行った後に結合した...
-
SQL文で右から1文字だけ削除す...
-
GROUP BYを使ったSELECT文の総...
-
Accessで別テーブルの値をフォ...
-
SELECTで1件のみ取得するには?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
抽出したデータを修正して元の...
-
ACCESSの集計クエリで3件ある...
-
ACCESSのクエリで同じSQL文だが...
-
エクセル関数 文字(ハイフン...
-
アクセス クエリ-で空白以外の...
-
MS-DOSコマンドプロンプトを途...
-
<SQL>条件付きで最小値レコード...
-
空白文字とスペースの検索
-
SQLを駆使したデータ抽出ってど...
-
商品テーブルからカテゴリ別の...
-
LIKE *ABC* が ACCESSでは使え...
-
SQLServerからエクセルにデータ...
-
VBA CSVファイルを文字列に
-
Excel VBA:セルを新旧1つずつ...
-
エクスプローラーで「2つの条件...
-
エクセルデータの末尾の改行を...
-
さくらレンタルサーバのMysqlの...
-
アクセスのクエリの抽出条件に...
-
Excelの横軸の際の抽出について
-
SQLの数値の編集について
おすすめ情報