Dim strFileName As String
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim strSQL As String
strFileName = "データ.accdb" 'データベースのファイル名
Set cn = New ADODB.Connection
Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\tasukaru\Desktop\通販\出品データ\" & strFileName & ";" '
Set rs = New ADODB.Recordset
strSQL = "SELECT 1 * FROM マスター where JAN = '1000000151749'"
rs.Open strSQL , cn
If rs.EOF Then
MsgBox "該当データ無し"
Else
MsgBox "該当データ有り"
End If
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
次へ
DoCmd.SearchForRecord,,acNext,"社員番号 Like '*" & Me!検索 & "*' or せい Like '*" & Me!検索 & "*' or 姓 Like '*" & Me!検索 & "*'"
前へ
DoCmd.SearchForRecord,,acPrevious,"社員番号 Like '*" & Me!検索 & "*' or せい Like '*" & Me!検索 & "*' or 姓 Like '*" & Me!検索 & "*'"
表題と質問の最初と最後でどれが本当の質問なのかよくわからないですが
または
クエリに抽出用にフィールドを増やして
あたりがやりたいことですかね?
ちょっと眺めただけですが
strfilter = strfilter & " AND 参加有無 Like '*" & Me.参加 & "*'"
参加有無がYes/No型ならばLikeで比較するべきではありませんし、右辺が文字列型になっているので抽出できることはまずないでしょう。(これを見た時点でほかの条件生成文は見ていません)
strfilter
をMe.FilterOn = True
の直前でウォッチウィンドウで確認するとかDebug.print
でイミディエイトウィンドウで確認してみるとおかしなところがわかると思います。回答いただきありがとうございます。
1の方法で試しまして解決しました!
Access使い始めて間もないので、一つの目的に対していくつものクエリを重ねてよいものか、プロパティなどをいじれば少ない工数でできるのではないか、といろいろ考えて手詰まっておりましたが…。もっとシンプルに、単純なクエリで一つ一つ進めればいいのだなと思いました。
2の方法は私には難しいと思うので、もう少しAccessとVBAに慣れてから勉強することにします。
ありがとうございます。
グループヘッダーとなるとリンク先の方法では無理ですね。
方法としては2つ考えられます。
1.集計クエリでグループ件数を計算して、それをレポートのレコードソースのクエリと結合して、それをレコードソースとする。
2.VBAでレポートのフォーマット時でグループ件数を取得して連想配列に格納して、印刷時にグループヘッダーで出力する。
1.の方法で回答します。
まず、現状の集計クエリからクエリを作成して、フィールドAとフィールドBを表示させて、
クエリプロパティの「固有の値」を「はい」にします。
これで、フィールドBの重複が排除された出力が得られます。
フィールドA グループ化
フィールドB カウント
これで、重複を排除した件数が取得できます。
このクエリをレポートのレコードソースのクエリと結合させてレポートのレコードソースにすれば、
ご希望の件数をグループヘッダーに表示できます。
お騒がせしましたが、自己解決しました。
更新パッチがいくつかあたっていなかったことが原因だったようです。初歩的なミスで大変お恥ずかしい限りです。
失礼いたしました。
ありがとうございました。
まず、テーブルで新規レコード(新規行)は最後に表示されるというのは仕様ですので変更できません。
また、空のレコードを追加したとして、それをabc順に並ぶように設定してあるテーブルで空のレコードを途中にすることはできません。abc順ではなくなるからです。
並び順を決定するフィールドが必要になります。その上でフォームでなら、下記で紹介している方法で途中に行を挿入することは可能です。
2019と2013の環境はあるのですが、残念ながら2016の環境は持っていませんので、私からはアドバイスは難しいですね。
ほかの方の回答をお待ちいただくか、別の掲示板で質問してください。
名前なしさんの式は、使い方が分かりませんでしたが、テーブルを作る方法が上手く行きました。大変助かりました。有難う御座いました。
データの重複数をcountして最大数nまで重複数i以上で抽出したレコードをunionする
とか
nまでの連番をデータにしたテーブルを用意してクロス結合から連番がcount以下のレコードを抽出する
とか、やってできないことはないと思うけど連番をつけるのに適さないデータでなぜ連番を付けたいのか疑問です。
本当にただ表示だけでいいのであればレポートを使えば楽だとは思います。
office2000 ですか。こちらには環境がないので動作確認は難しいですね。
8番目のコメントの名前なしさんの式も試してみてください。
ご返答有難うございます。自作関数を試したのですが家のパソコンでは上手くいくのですが、会社のwin7 office 2000では○○を含む文字列を除外しようとしても表示されてしまいます。エラーは、表示されません。自宅環境は、win10 office 2003です。宜しくお願い致します。
リンクテーブルだとうまくいかないのですか。
どのようにうまくいかないのですか。
エラーがでるならエラーメッセージをご提示ください。
再投稿します。やはり必要に迫られてODBC経由のリンクテーブルである場合の上記の対応策は、ありませんでしょうか?ご教授お願い致します。
どうもありがとうございました。
ひとまずは現状の方法で対応さるようにいたします。
テーブル名、フィールド名に間違いはないか、もう一度確認してください。
原因はそれ以外は思いつきません。
あと、下記を参考にクエリで表示できるか確認してみてください。
表示出来たら、それをフォームのレコードソースにすればいいでしょう。
うまくいきませんでした。
テーブル「データA」の主キーのフィールド名はIDとデータ型はオートナンバー型です。
「コメント」フィールドのデータ型は長いテキストです。
名前なしさんの回答てうまくいけばいいですが、
上手くいかない場合は、下記の情報を提示してください。
テーブル「データA」の主キーのフィールド名とデータ型、
「コメント」フィールドのデータ型、
メインフォームの方にチェックを入れたいのですよね。
まあ、サブフォームでもメインフォームでも実装は可能ですが、
現状の方法で十分だと思います。
お返事遅くなって申し訳ございません。
サブフォームコントロールを使っておりますので、アドバイスいただいた方法は実装が困難です。
こういう手が使えないのだとしたら、これまで私がやっていたような方法がリーズナブルでしょうか?
コントロールソースを以下に修正でいかがでしょうか?
下記で紹介している方法を使えば、更新できないクエリでも、チェックボックスにチェックを入れることはできます。
ただし、フォーム上のテキストボックスに選択データを格納しているので、フォームを閉じれば消えてしまいます。
また、エクセルにエクスボートする場合は、SQLをVBAで生成する必要があります。
最初のご質問への回答は、メインフォームです。
二つ目のご質問への回答は、その通りです。できたらいいなと思ってご質問させていただきました。
メインフォームののことですか。サブフォームのことですか。
これをせずに、グループ化したクエリをメインフォームのソースにしたいということでしょうか。
返答ありがとうございます。
そんな、便利機能があったのですね・・・
小難しく考えすぎていたようで恥ずかしい限りです。
If rs.EOF Thenでしたか
ありがとうございました
外部データベースのテーブルが対象ですね。
ADODBに参照設定をしておいて、
文字表示を変えるだけならば、合計値のテキストボックスを条件付き書式で条件分岐したほうが良いかと
(社員番号、せい、姓)すべて前方一致でいいのであればLikeの条件を区切り文字+検索文字とすると良いです。
ざっくり解説すると「Me!検索=たけ」のとき
検索文字だけで検索(Likeの条件は「'*たけ*'」)
(社員番号);おおたけ;大竹 ←一致する
(社員番号);たけだ;武田 ←一致する
区切り文字+検索文字で検索(Likeの条件は「'*;たけ*'」)
;(社員番号);おおたけ;大竹 ←一致しない
;(社員番号);たけだ;武田 ←一致する
このように前方一致を満たせます。
ただし、この形にすると社員番号で検索したいときもLikeの条件には「;」がついてくるので比較元の文字列も区切り文字から始まるようにします。
ありがとうございます。上記のコードで、全ての検索が可能になりました。
現状、「たけ」で検索すると、「おおたけ」がヒットするのですが、
前方一致にする方法はありますでしょうか。
下記を試してみてください。
あっ、そうか、
*
はMarkdownの斜体なので見えなくなるんでした。忘れてた('◇')ゞ連投、申し訳ありません。
新田(にった)など、小さい文字もヒットしません・・・。
・・・濁点の含まれた検索だけ、解決していませんでした。汗
「いそがい」は、「いそ」で検索すれば出てくる状態ですm(_ _)m
回答ありがとうございます!!
せいの検索のコードを、
ElseIf Not Me.検索.Value Like "[!あ-ん]" Then
DoCmd.SearchForRecord , , Rec, "せい Like '" & Me!検索 & "*'"
にしてみたところ、解決しました。
いつも本当にありがとうございます。また困ったら質問させてくださいm(_ _)m
ありがとうございます。
検索ボックスの値も、検索したいデータも、完全一致を想定した「せい」のみです。
と、回答の途中で、謎が解けました!せいのどこかに、濁点が含まれるとヒットしていませんでした。
解決方法がありますでしょうか。
自分も最初そう思ってたんですけどMarkdownのアレかなーってやつですね。
ソース表示したら・・・
ありがとうございます。
当初部分一致のつもりで、*も入れていたのですが、
「お」で検索すると、頭に「お」が付く人だけでなく、「あさおか」などもヒットしてしまっていたので、
完全一致に変更したつもりでいました。
回答ありがとうございます。
質問のコードには、* が付いてないので、完全一致での検索かと思います。
部分一致なら、どうせインデックスは無効になるので、下記でもOKですね。
ひょっとすると、質問者さんは部分一致での検索を想定していて、うまくいかないといっているのかも、と思ってきますか。
社員番号がテキスト型のとのことですが、数字のみでしょうか。それとも数字以外も含まれてますか。
数字のみなら、下記のように修正すればいいかと思います。
出来ないときの、検索ボックスの値と、検索したいデータの値の例をいつくか提示してもらえますか。
行儀悪いのは承知で
なんかどうですかね