個人情報のフォームから複数条件でレコードを抽出したいと考えています。
オプションボタンとコンボボックスとトグルボタンなのですが、ANDを使って条件をつなごうと思っているのですが、なかなかうまくいきません。
この方法以外でもよい方法があれば教えて欲しいのですが。
また抽出したフォームに修正や追加や削除もしたいと思っています。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

こんにちは。


多分連結うんぬんは関係ないと思います。
とりあえず、このコードが書かれてあるプロシージャ([抽出]ボタンのクリックイベント?)の先頭にブレークポイントを設定して、1行実行してみて、どこでエラーが出るか確認して下さい。
また、会社名のところでエラーが出るようなら、その時のcbo会社名.Valueに入っている値を調べてみて下さい。
多分エラーになるとデバッグモードに入れるので、その時にイミディエントウィンドウに、
?Me!cbo会社名.Value
と入力してEnterを押すと、値が出力されます。

あと、文字列の比較は「'」で括らないといけませんが、cbo会社名.Valueの前後にちゃんとついてますか。
それと、フィールド名やコントロール名に空白やハイフンが入っている場合は、[]で括らなくてはいけません。
例)cboF 会社名.Value→[cboF 会社名].Value
とりあえず、気づいたのはこのくらいです。
では。
    • good
    • 0
この回答へのお礼

出来ました!!
maruru01さんのおっしゃった通り、1行ずつ実行して確認して見ました。
長い間、お付き合いして頂いてどうもありがとうございました。
これからもよろしくお願いします。

お礼日時:2002/03/08 00:37

再びmaruru01です。



抽出方法としては、
1.まず、全件でフォームを開いておいて、Filterプロパティに抽出条件を設定し、FilterOnプロパティをTrueにする。
2.予めサブフォームを作成しておき、DoCmd.OpenFormの第3引数に抽出条件を設定して実行する。
3.抽出結果で一時的なテーブルを作成し、それをサブフォームのソースに設定して開く。
などがあります。
いずれにしろ、抽出条件の文字列を作成することに変わりはありません。

それで、抽出条件の書き方ですが、個人情報テーブルの各フィールドのデータ型で書き方が異なります。
まず、在職/退職はYes/No型とします。(在職がTrue)
  condShoku = "[フィールド名] = " & chk在職.Value

次に、会社名はText型(またはMemo型)として、
  condKaisha = "[フィールド名] = '" & cbo会社名.Value & "'"

そして、ふりがなは、前に回答しましたが、
  condFurigana = "[フィールド名] LIKE '" & GetHiragana(ふりがなフレーム.Value) "*'"

で、これらをANDでつなぎます。
  WhereCond = condShoku & " AND " & condKaisha & " AND " & condFurigana

このWhereCondを上記の抽出条件として設定して、[抽出]ボタンのクリックイベントで実行すればいいです。
詳細はヘルプなどを参照して下さい。
では。

この回答への補足

アドバイスをありがとうございました。
早速、上記の方法で試してみたのですが、「文字列の構文エラー」というエラーになってしまいました。
一つ一つの条件で実行したところ、会社名のところでこのエラーが出てしまいます。
個人情報のフォームの会社名のフィールドを会社情報のテーブルと連結してコンボボックスで入力出来るようにしてあるのですが、連結列を1にしてあるからでしょうか?
いろいろ考えてみたのですがどうしても分かりません。

補足日時:2002/03/07 14:57
    • good
    • 0

こんにちは。

maruru01です。

まず、お使いのデータベースの種類とバージョンを明記しましょう。
文面からAccessと思いますが、それならバージョンを。さらにOSも併記した方がいいでしょう。

それから、どううまくいかないのか、具体的に書かないと答えようがありません。
問題のあると思われる部分のコードなどを載せると回答し易いですよ。
また、「レコードを抽出」と行ってもどういう動作をさせたいのかも書いた方がいいでしょう。
例えば、抽出条件用のフォームがあるかどうか、抽出結果をサブフォームに表示するかどうかとか。
では。

この回答への補足

説明不足ですみませんでした。
WINDOWS 98
ACCESS 2000です。
抽出条件用のフォームは作成しましたが、追加、削除、修正が出来るのであればサブフォームで表示するのでもどちらでもかまいません。
個人情報のフォームに
txt個人名、txtふりがな、cbo会社名(会社情報と連結)、chk在職の有無を作成したものから
オプションボタンで在職か退職か選択
コンボボックスで会社名を選択
あ~わのトグルボタンでふりがなを選択
の抽出条件で抽出ボタンをクリックして抽出したいと考えています。
これでよろしいでしょうか?
よろしくお願いします。

補足日時:2002/03/06 10:18
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Q抽出方法、抽出部位を英語で・・

こんにちは。質問です。
海外でエッセンシャルオイルを買おうかと考案中
なんですが、そのHPには抽出方法と抽出部位が
明記さていません。そこでメールで問い合わせようと
思うのですが、抽出方法と抽出部位を英語でなんと
表現すればよいのか迷っています。
どなたかアドバイスありましたらよろしくお願いいたします。

Aベストアンサー

ここで言われているエッセンシャルオイルがどういうものかいまいち理解していないのですが、

一般に動植物からある成分を抽出するのであれば、

方法:What's the method of extraction/ how do you extract the oil ?

部位:What is the organ or part of the plant(creature) the oil is extracted from ?/ Where exactly was the oil taken from ?

などが使えると思います。2番目はそれぞれの口語表現です。

QACCESS2000でクエリで抽出したレコードをフォームに表示するには

A顧客テーブルで作成したフォームからコマンドボタン(電話番号検索)押下時に
電話番号入力画面が出て入力した電話番号とマッチした顧客レコードをフォームに
表示させたいのですが上手く出来ません。
現在進めている方法では何がダメなんでしょうか(以下は考え方)

A顧客テーブルから作成したフォムに電話番号コマンドを作成してコマンドを
押すとクエリの実行をさせる。クエリはA顧客テーブルのフィールドを全て選択して抽出条件に[電話番号入力]としている。
(結果)
・フォームを開くと先に電話番号入力が出てくる、先にフォームが開かない。
・電話番号検索コマンドボタンを押すと抽出条件に合ったレコードはデーターシートビューに表示される。
よろしくお願いします

Aベストアンサー

>この入力させるダイアログをパラメータダイアログのような
>シンプルな物にすることは困難でしょうか?

そういう場合は、自分で検索ダイアログフォームを作ることになります。
それが面倒(または難しい)場合は、InputBox関数で代用しましょう。
また、検索の部分を自分でコーディングすることになります。
その一例です。(DAOのレコードセットによる方法)

まず、VBE画面のメニューの[ツール]→[参照]で、
「Microsoft DAO X.X Object Library」(X.Xはバージョン、多分3.6か3.5)
にチェックが入ってなければ、チェックしてOKします。
で、電話番号検索ボタンのクリックイベントに以下のように書きます。


Dim temp As String
Dim rs As DAO.Recordset

temp = InputBox("電話番号を入力して下さい。")
If Len(temp) = 0 Then
  Exit Sub
End If

Set rs = Me.Recordset.Clone
rs.FindFirst "電話番号 = '" & temp & "'"
If rs.NoMatch Then
  MsgBox "該当するレコードがありません。"
Else
  Me.Bookmark = rs.Bookmark
End If

rs.Close: Set rs = Nothing


なお、テーブルの電話番号フィールドは文字列型である必要があります。
また、コードの内容は各キーワードでヘルプで検索して下さい。

>この入力させるダイアログをパラメータダイアログのような
>シンプルな物にすることは困難でしょうか?

そういう場合は、自分で検索ダイアログフォームを作ることになります。
それが面倒(または難しい)場合は、InputBox関数で代用しましょう。
また、検索の部分を自分でコーディングすることになります。
その一例です。(DAOのレコードセットによる方法)

まず、VBE画面のメニューの[ツール]→[参照]で、
「Microsoft DAO X.X Object Library」(X.Xはバージョン、多分3.6か3.5)
にチェックが...続きを読む

Qエクセル(英語リスト)で大文字で始まるものを抽出したい

関数のことあまりわかっていない初心者です。
英単語(1単語以上)のリストから、大文字で始まるものだけを抽出する関数を教えてください。6万行以上もあり、困っています。以下のようなリストです。
<A列>
Cesfalko
setting
set-point
sedation
cutting off sedation
Setous
Cedlips
Senapanman
Cepadipin

↑このうち、
Cesfalko, Setous, Cedlips, Senapanman, Cepadipin がわかるようにB列に1とか*とか入れたいです。

#ご存じの方からすれば、こんなことぐらいわからないの?と思われるくらい、恥ずかしいレベルですみません。
#FIND、IFなどを使う?程度ぐらいしかわかっていません。

よろしくお願いします。

Aベストアンサー

別解です。
=IF(EXACT(A1,LOWER(A1)),0,1)

Qコンボボックスの抽出条件のLikeについて

フォーム内のコンボボックス処理について

現在ACCESS2002でDBを構築しております。
初心者です。

フォーム内でテキストボックスから値【a】をもらい、その【a】を抽出条件として抽出結果を
コンボボックスに表示したいと考えております。
※like関数を使用

Private Sub テキスト1_AfterUpdate()

DoCmd.Requery "コンボ1"

Me!テキスト1.Requery

End Sub

コンボボックスの値集合ソースの抽出条件で
((テーブル.カラム) like "'*" & Forms!フォーム!テキスト1 & "*'")
上記で指定したのですが、何も抽出されません。

イコールで下記を実行すると値は抽出されます。
((テーブル.カラム) = Forms!フォーム!テキスト1 )

LIKE関数の使い方が悪いのでしょうか。

お手数ですが、ご教授願います。

Aベストアンサー

【要旨】
値集合ソースやクエリのSQL文では、

 ((テーブル.カラム) like "'*" & Forms!フォーム!テキスト1 & "*'")

と、「'」は入れずに、

 ((テーブル.カラム) like "*" & Forms!フォーム!テキスト1 & "*")

としてください。


【詳細】

VBA上でSQL文を扱う場合や、DMaxなどの定義域集計関数の引数にする
場合は、確かに「*」と同時に「'」を使用しますが、クエリ(又は値集合ソースへの
直接入力)に使用する場合は「'」は使用せず「*」だけを指定します。


ちょっとわかりにくいかもしれませんが(汗)、完全一致の場合も、

 ((テーブル.カラム) = "'" & Forms!フォーム!テキスト1 & "'" )

ではなく

 ((テーブル.カラム) = Forms!フォーム!テキスト1 )

と、「'」を使用せずに指定しないと正しい結果が得られないのと同様と
考えて戴ければいいかと思います。


くどくなるのを承知で(汗)、さらに説明すると・・・

VBAでは、例えば「Me.氏名」に「鈴木」という値が入っていたとして、

 strSQL = "Select * From テーブル1 Where 氏名 Like *" & Me.氏名 & "*;"

という変数への記録を行った場合、実際のWhere句は

 氏名 Like *鈴木*

となって

 氏名 Like "*鈴木*"

とはなってくれません。 
(「*」がワイルドカード文字ではなく乗算の演算子として扱われてしまう、と)
これを防ぐため、VBA上でSQL文を扱う場合は、「'」を(又は「"」を重ねて)
使用する必要があります。

一方、クエリやSQL文を直接編集する場合は、

 氏名 Like "*鈴木*"

とか

 氏名 Like "*" & Forms!フォーム!テキスト1 & "*"

といったように、予め「*」を「"」で括って文字列(ワイルドカード文字)として
明示していることになります。

なので、逆にここに「'」を追加すると、その「'」まで「検索文字列」として
指定したことになってしまうので、意図した抽出結果が得られなくなる、
ということです。


・・・以上、長くなりましたが、参考まで。

なお、余談になりますが、この「Like」は「関数」ではなく「演算子」になります。

【要旨】
値集合ソースやクエリのSQL文では、

 ((テーブル.カラム) like "'*" & Forms!フォーム!テキスト1 & "*'")

と、「'」は入れずに、

 ((テーブル.カラム) like "*" & Forms!フォーム!テキスト1 & "*")

としてください。


【詳細】

VBA上でSQL文を扱う場合や、DMaxなどの定義域集計関数の引数にする
場合は、確かに「*」と同時に「'」を使用しますが、クエリ(又は値集合ソースへの
直接入力)に使用する場合は「'」は使用せず「*」だけを指定します。


ちょっとわかりにくいかもしれませんが(汗)、...続きを読む

Q英語音声・字幕あり にする方法

 最近PSPで洋画DVD鑑賞にはまっており
DVDshrinkというフリーソフトで抽出し、携帯動画変換君でMP4に変換して楽しんでます。
 いつもは「日本語音声・字幕なし」なので特別な設定はいらずに簡単に抽出できるのですが次からは「英語音声・字幕あり」にしたいです。
 ですが何度やっても英語音声だけしか抽出できません。
どなたか英語音声と字幕を同時に一つのデータに出力できる
フリーソフト又は方法をお知りの方教えてくださりませんか?

Aベストアンサー

DVDのリッピングは著作権法的にグレーであり、またリッピングの質問自体がここの禁止事項です。
削除依頼出しておきますね。

Q条件付きで最小値レコードを抽出する方法

SQLite3.7.5を使っています。
以下<抽出前>の様なテーブルから、col2の値が"FALSE"で(col1=3,4,5の3つ)かつ、col3が最小値(col3=3)であるレコードを<抽出後>のように抽出するSQL文をご教示ください。

<抽出前>
col1 | col2 | col3
1 | true | 3
2 | true | 0
3 |false | 3
4 |false | 5
5 |false | 3

<抽出後>
col1 | col2 | col3
3 |false | 3
5 |false | 3

自分で考えたSQL文は以下です。
抽出結果は問題ないのですが、同じSELECT文を2回書いていてだいぶ効率悪いことをしているのではないかと思い質問しました。
よろしくお願い致します。

SELECT * FROM (SELECT * FROM test WHERE (col2 = false)) WHERE col3 = (SELECT min(col3) FROM (SELECT * FROM test WHERE (col2 = false)))

SQLite3.7.5を使っています。
以下<抽出前>の様なテーブルから、col2の値が"FALSE"で(col1=3,4,5の3つ)かつ、col3が最小値(col3=3)であるレコードを<抽出後>のように抽出するSQL文をご教示ください。

<抽出前>
col1 | col2 | col3
1 | true | 3
2 | true | 0
3 |false | 3
4 |false | 5
5 |false | 3

<抽出後>
col1 | col2 | col3
3 |false | 3
5 |false | 3

自分で考えたSQL文は以下です。
抽出結果は問題ないのですが、同じSELECT文を2回書いていて...続きを読む

Aベストアンサー

SELECT *
FROM test
WHERE col2 = false
AND col3 = (select min(col3) from test where col2 = false)

でどうでしょう?

Q超臨界抽出法

私は、海外で化粧品の買い付けと日本への輸出の仕事をしています。今回、日本の輸出先会社から、扱っている化粧品の成分の抽出法について問い合わせがありまして、「これは、超臨界抽出法か?」という旨の質問が来ました。こちらのメーカーに問い合わせしたいのですが、どのように英語に訳すかわかりません。また、「抽出」は、extractionでよろしいのでしょうか?あと、ついでにもうひとつ教えていただきたいのですが、「膿む」傷などが、膿む、と言いますよね?これは、普通英語ではなんといいますか?お教え下さい。宜しくお願いいたします。

Aベストアンサー

supercritical fluid extraction 超臨界抽出法

suppurate (傷が)膿む

ネット辞書・英辞郎に載っていました。英辞郎使ってみてください。

QSQLで○○の値以外を持っているレコードを抽出しないという条件を作りた

SQLで○○の値以外を持っているレコードを抽出しないという条件を作りたいのですが・・・
例えばこんな感じのテーブルがあったとします。

A1 A2 A3
-- -- --
AAA AA 111
AAA AB 111
AAA BB 222
BBB BB 111
CCC AA 111
CCC AC 555
DDD BB 222
EEE AA 111
EEE AC 333
EEE BB 777


A2の列に「BB」の値"しか"持っていないレコードを抽出したいのです

このテーブルで言えば返りは
BBB BB 111
DDD BB 222
と期待しています。

値BBのみしか持ってない条件の作り方を御教示願えませんでしょうか。
また、A2の値も文字数以外は規則性があるわけではないので無限パターンです。
詳しい方よろしくお願いします。

Aベストアンサー

> A1 A2 A3
> -- -- --
> AAA BB 222
> EEE BB 777

> が、どうして排除されるのか?

A2がBBでないレコードは

A1 A2 A3
-- -- --
AAA AA 111
AAA AB 111
CCC AA 111
CCC AC 555
EEE AA 111
EEE AC 333

ですよね。このレコードのA1のデータ(AAA,CCC,EEE)は排除したいという条件ですから、A1がAAAとEEEである

A1 A2 A3
-- -- --
AAA BB 222
EEE BB 777

は排除されます。

サブクエリでは、

select A1 from テーブル名 where A2<>'BB'

として、A2がBBでないレコードのA1のデータを取得しています。
条件がA1 not inなので、一方の条件がA2='BB'でもう一方がA2<>'BB'であっても問題はないですよね。

テーブル名を変えないとだめかもしれなかったので、「間違ってるかも」と書いたのですが、

select * from テーブル名 tablea where tablea.A2='BB' and tablea.A1 not in (select tableb.A1 from テーブル名 tableb where tableb.A2<>'BB')

ならわかりますか。(すいません。今回も実行はしていません。)

> A1 A2 A3
> -- -- --
> AAA BB 222
> EEE BB 777

> が、どうして排除されるのか?

A2がBBでないレコードは

A1 A2 A3
-- -- --
AAA AA 111
AAA AB 111
CCC AA 111
CCC AC 555
EEE AA 111
EEE AC 333

ですよね。このレコードのA1のデータ(AAA,CCC,EEE)は排除したいという条件ですから、A1がAAAとEEEである

A1 A2 A3
-- -- --
AAA BB 222
EEE BB 777

は排除されます。

サブクエリでは、

select A1 from テーブル名 where A2<>'BB'

として、A2がBBでないレコードのA1のデータを取得しています。
条...続きを読む

Qあるフィールドの最大値を条件にデータを抽出する方法

Access97のVBAで開発を行っています。SQLでデータの抽出で、あるフィールドの最大値を条件に指定して抽出する方法を教えてください。最大値という曖昧な条件なため、悩んでいます。

(例)ある学校の成績テーブル(左から、学籍番号,組,氏名,性別,科目,点数)

0103,鈴木,男,国語,95
0103,鈴木,男,数学,40
0103,鈴木,男,英語,80
0104,高橋,男,国語,45
0104,高橋,男,数学,85
0104,高橋,男,英語,55

|(SQLで各人の最高点のデータのみ抽出したい)

(抽出結果)
0103,鈴木,男,国語,95
0104,高橋,男,数学,85

知っている方、是非教えてください。
お願いします。

Aベストアンサー

クエリーを使えば比較的楽に出来るでしょうがひとつのSQLでやるのは少々難しいように思います。 そこで、SQLを二回に分けて結果を出してはどうでしょうか。

最初に学籍番号と点数だけで「SELECT 学籍番号, Max(点数) AS 最高点 FROM 成績テーブル GROUP BY 学籍;」とし、個人別の最高点を抽出します。 そして、それをもとに「SELECT * FROM 成績テーブル WHERE 学籍番号 = 最高点のSQLの学籍番号 AND 点数 = 最高点のSQLの最高点;」とし、必要なほかの情報(氏名、性別、科目)を持ってきます。

【例】
Dim db As database
Dim rs1 As recordset
Dim rs2 As recordset

Set db=CurrentDb
Set rs1=db.OpenRecordset("SELECT 学籍番号, Max(点数) AS 最高点 FROM 成績テーブル GROUP BY 学籍;",dbOpenDynaset)

rs1.MoveFirst

Set rs2=db.OpenRecordset("SELECT * FROM 成績テーブル WHERE 学籍番号 = '" & rs1("学籍番号") & "' AND 点数 = " & rs1("最高点") & ";",dbOpenDynaset)

rs2.MoveFirst

後はrs2("学籍番号")、rs2("氏名")等の必要な情報を必要に応じて操作すれば
よろしいのではないでしょうか。

クエリーを使えば比較的楽に出来るでしょうがひとつのSQLでやるのは少々難しいように思います。 そこで、SQLを二回に分けて結果を出してはどうでしょうか。

最初に学籍番号と点数だけで「SELECT 学籍番号, Max(点数) AS 最高点 FROM 成績テーブル GROUP BY 学籍;」とし、個人別の最高点を抽出します。 そして、それをもとに「SELECT * FROM 成績テーブル WHERE 学籍番号 = 最高点のSQLの学籍番号 AND 点数 = 最高点のSQLの最高点;」とし、必要なほかの情報(氏名、性別、科目)を持ってきます。

【例】
D...続きを読む

Q抽出条件でサブフォームを変えたい

ACCESS2000でVBAを使ってフォームを作成しています。

オプションボックス、リストボックスなどで担当者別、顧客別を選択した結果によって表示するサブフォームを変える事は可能でしょうか?

Aベストアンサー

ちょっとイメージしていたものと異なっていたようですね。

>まったく違うサブフォームの場合は、
>それぞれメインとリンクさせたクエリフォームを作成して、
>条件によってレコードソースを変えるというものでいいのでしょうか?

これはメインフォームにあるオプションボックスで
「担当者別」をクリックすると 「担当者別」のサブフォームが表示され
「顧客別」 をクリックすると 「顧客別」のサブフォームが表示され
レイアウトやレコードソースが異なっているような感じでしょうか。

それならば作成したサブフォームを両方ともメインに挿入し、
オプションボタンをクリックした時に、
サブフォームの表示を切り替える(visible = true or false)
っていうのが簡単な気がします


人気Q&Aランキング

おすすめ情報