『ボヘミアン・ラプソディ』はなぜ人々を魅了したのか >>

Access2000

DLookup関数のcriteria部でクエリ指定行の値を求めたいのですが分かりません。
<参考>
DLookup("フィールド", "クエリ", "指定行=10")

クエリの10行目に有るフィールドの値を求める場合、criteria部の書き方を教えて下さい
検索で探したのですが見つける事が出来ませんでした・・。

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

A 回答 (1件)

アクセスについては書かれた順に取り出されているような気がしますが、RDB全般において、データの並び順は指定していない限り保証されませんので、クエリ部分で何らかの指定が入っているべきですが、、、



dlookupにそのような機能があるかわかりません。

ADOでそのようなファンクションを作ってみましたが、、、
エラー処理や、該当レコードがなかった場合などの処理方法は良くわからなかったのでテキトーです。
このようなものをモジュールに作っておけば、アクセス随所から呼び出して使うことができます。

Function DLookUPA(strSQL, strField, RowNum) As Variant
Dim Con As ADODB.Connection
Dim Rst As New ADODB.Recordset

Set Con = CurrentProject.Connection
Rst.Open strSQL, Con, adOpenKeyset, adLockOptimistic
If Rst.RecordCount = 0 Then
DLookUPA = "No Record"
Rst.Close
Con.Close
Exit Function
End If
If RowNum = 1 Then
DLookUPA = Rst.Fields(strField)
Rst.Close
Con.Close
Exit Function
End If
If Rst.RecordCount >= RowNum Then
For x = 2 To RowNum
Rst.MoveNext
Next x
DLookUPA = Rst.Fields(strField)
Rst.Close
Con.Close
Exit Function
End If

Rst.Close
Con.Close
DLookUPA = "error msg"


End Function



たとえば、フォーム上のボタンのイベントに

Private Sub コマンド0_Click()
MsgBox DLookUPA("select * from table1 order by mainkey", "data", 1)
End Sub

とすると、table1をmainkey順に並べて、2番目のレコードのdataというフィールドの値を取ってきてメッセージボックスにて表示します。


一応、ストリング値はとってくることができましたが、その他の変数、ヌル値、ブランクなどについては、未検証ですので、使うのでしたら検証しておいてください。
    • good
    • 0
この回答へのお礼

ファンクションの知識は無いので中身は分かりませんでしたが
実際モジュールに入れてID順で試してみたところ、出来ました。
>このようなものをモジュールに作っておけば、アクセス随所から呼び出して使うことができます。
これは助かります。他のAccessにも使わせていただきます。
分かりやすい回答有難うございました。

お礼日時:2013/10/28 16:01

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

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

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

QVBとアクセスでSQL文に変数を使いたいのですが

したいことはレコードの挿入をSQL文で変数を使用して処理したいのですがうまく動作してくれません

StrSQL_1 = _
"insert into 行先情報テーブル (社員ID, 行先, 帰社予定時刻, 備考)" & _
"values (7,'(変数1)','(変数2)','(変数3)')"

変数の部分が置き換わりません、いろいろ調べてみたのですがどうもわかりませんvaluesでは変数を使えないのでしょうか?

もしそうだとするとどのようにすればレコードを挿入するSQL文で変数を利用できるのかをおしえていただけないでしょうか

Aベストアンサー

文字列なんで、&で連結すればOKです。

StrSQL_1 = _
"insert into 行先情報テーブル (社員ID, 行先, 帰社予定時刻, 備考)" & _
"values (7,'" & 変数1 & "','" & 変数2 & "','" &(変数3)& "')"

Qテキストボックスにクエリ結果を表示させたい

フォームにテキストボックスAがあり、そこに入力した文字(下記テーブルのフィールド1の文字)をクエリーの「抽出条件」にし、同じフォーム上のテキストボックスBに表示しようと思っています。

クエリを開くとパラメータの入力を求めてきて、入力するとうまく抽出されます。

テーブルは
フィールド1|フィールド2
  A   |  10
  B   |  20
  C   |  30
  D   |  40
のような簡単なものです。

テキストボックスBのコントロールソースに
「=[○×クエリ]![フィールド2]とやっても「#Name?」と表示されてしまいます。

どのようにやればよいのでしょうか?

Aベストアンサー

クエリは必要ありません。

フォームのレコードソースに無いデータを表示させる
場合には DLookUp を使います。

テキストボックスBのコントロールソースに
=DLookUp("フィールド2","テーブル名","フィールド1='" & [テキストボックスA]) & "'"

上記は「フィールド1」が文字列型の場合です。

数値型の場合は次のようになります。
=DLookUp("フィールド2","テーブル名","フィールド1=" & [テキストボックスA])

DLookUp 関数は コントロールソースに限らず
VBA でも使用し、Access では、非常に使用頻度の高いものです。

ヘルプで調べて、ぜひマスターしてください。

もし Access でなかったら、このレスは無視して下さい。

Qアクセスで#エラーを表示させない方法は?

アクセス2000を使用しています。フォームにテキストボックスを貼り付けて、計算式を入れています。計算できない数値になると、#エラーと表示されます。目障りなので、#エラー という表示を消したいのですが、どうしたらよろしいでしょうか?宜しくお願い申し上げ候。

Aベストアンサー

はじめは「IIF関数とIsError関数を使用して」と考えたものの、IIF関数は引数がエラーになった時点で
エラーが返されてしまう(=元の木阿弥)ので、どうしたものかと思ったのですが・・・
とりあえず、「見た感じ、何も表示されていないように見える」ということで、『条件付書式』での対応と
いうのはいかがでしょうか。

1)当該フォームをデザインビューで開く
2)当該テキストボックスを選択
3)メニューで「書式(O)→条件付き書式(D)」を選択
4)『条件付き書式設定』ダイアログが開くので、『条件1(1)』枠の左端にあるコンボボックスで「式」を選択
5)上記コンボボックスの隣が1つのテキストボックスになるので、そこに以下のような式を入力
 IsError([テキスト0])
 ※上記の式は当該テキストボックスの名前が「テキスト0」の場合です。
6)上記テキストボックスの下、右から2番目に「A」と表示された、文字色を指定するボタンがあるので、
 その左の小さな「▼」をクリックし、当該テキストボックスの背景と同じ色(既定では白のはず)を選択
7)『OK』ボタンをクリックしてダイアログを閉じる

・・・以上です。
これで、『テキスト0』の計算式がエラーになった場合は、文字色が背景と同じ色になるので、「#エラー」と
いう表示はされていないように見える、という状態にすることができると思います。

はじめは「IIF関数とIsError関数を使用して」と考えたものの、IIF関数は引数がエラーになった時点で
エラーが返されてしまう(=元の木阿弥)ので、どうしたものかと思ったのですが・・・
とりあえず、「見た感じ、何も表示されていないように見える」ということで、『条件付書式』での対応と
いうのはいかがでしょうか。

1)当該フォームをデザインビューで開く
2)当該テキストボックスを選択
3)メニューで「書式(O)→条件付き書式(D)」を選択
4)『条件付き書式設定』ダイアログが開くので、『条件1(1)』枠の...続きを読む

QAccess 別テーブルにある値を抽出条件にしたい

OS:WindowsXP SP3
使用ソフト: Microsoft Access2003


選択クエリにて、別テーブルのフィールドにある値すべてを抽出条件にできますか?


ホームページに来て頂いた方の検索キーワードを集計しております。
テーブル1には『検索キーワード履歴』フィールドがあり、お客様が使用した検索キーワードが入力されています。(約2万件)
テーブル2には『除外キーワード候補』フィールドがあり、不要なキーワードが入力されています。(約10件)


クエリにて、『検索キーワード履歴』から『除外キーワード候補』の値を全て除いた結果を出力させたいのですが、
抽出条件をどのように指定したらいいのか分かりません。

そもそも、別テーブルのフィールドにある値すべてを除外させる抽出条件って指定できるのでしょうか。
SQLを用いる方法でも構いませんので教えてください。

Aベストアンサー

SELECT * FROM テーブル1
WHERE NOT EXISTS
(SELECT * FROM テーブル2 WHERE テーブル1.検索キーワード履歴 = テーブル2.除外キーワード候補)
OR 検索キーワード履歴 IS NOT NULL
とか
SELECT * FROM テーブル1
WHERE 検索キーワード履歴 NOT IN (SELECT 除外キーワード候補 FROM テーブル2 )
ということ?
1フィールドに1キーワードの場合です。

Qクエリーの結果をフォームに表示させたい(Access2000)

access初心者で、初歩的なことだと思うのですが教えていただけますでしょうか。

顧客情報テーブルを全件表示・入力・変更するフォームAがあります。
日付期間内検索、名前検索などいくつか条件絞込みのためのフォームBがあります。

やりたいこと
フォームBで指定した期間などで、検索結果をフォームAに表示させたいです。

←→現在はフォームBの検索クエリーごとに、実際は検索条件ごとにフォームAをコピーし、フォームのプロパティのレコードソースにて制御しています。

よろしくおねがいします。

Aベストアンサー

でしたらフォームB(条件設定画面かな?)にコマンドボタンでも作成し
クリック時イベントなどに
if currentproject.allforms("フォームA").isloaded = false then
docmd.openform "フォームA" '開いてなかったら開く
end if
Forms!フォームA.recordsource = "SELECT 顧客情報TBL.* FROM 顧客情報TBL WHERE [顧客情報TBL].[利用予定日] Between " & [Forms]![条件設定画面]![コンボ12] & " And " & [Forms]![条件設定画面]![コンボ14] & " ORDER BY [顧客情報TBL].[利用予定日] DESC;"
のようにレコードソースを変更するか、

フォームA自体には抽出条件を設定しないひな形フォームとして作成しておきます。
dim sFilter as string
if currentproject.allforms("フォームA").isloaded = false then
docmd.openform "フォームA" '開いてなかったら開く
end if
sFilter = ・・・・sFilterに条件を書き込むのですが具体例が挙げられません
sFilter の作り方は前回回答のVBAコードを参照してください。
debug.print sFilter 'イミディエイトウィンドウで正しくできているか確認
Forms!フォームA.filter = sFilter
Forms!フォームA.filteron = true
のような流れになります。べた打ちなので間違っているかも。

でしたらフォームB(条件設定画面かな?)にコマンドボタンでも作成し
クリック時イベントなどに
if currentproject.allforms("フォームA").isloaded = false then
docmd.openform "フォームA" '開いてなかったら開く
end if
Forms!フォームA.recordsource = "SELECT 顧客情報TBL.* FROM 顧客情報TBL WHERE [顧客情報TBL].[利用予定日] Between " & [Forms]![条件設定画面]![コンボ12] & " And " & [Forms]![条件設定画面]![コンボ14] & " ORDER BY [顧客情報TBL].[利用予定日] DESC;"
のようにレコード...続きを読む

QAccessで別テーブルの値をフォームに表示したい

初めてのAccessで分からない事があり質問させてください。

<会社テーブル>
会社ID
会社名
住所

<社員テーブル>
会社ID
社員名
ソート番号

*1社に対し複数の社員レコードが存在

以上のようなテーブルがあるとします

現在「会社テーブル」を表形式で一覧表示しています
会社ID,会社名、住所とフィールドが並んでいるのですが、その後ろに「社員テーブル」のソート番号が一番若い社員名を表示したいと考えています(現状は番号関係なく表示させる方法すら分かりません)

色々いじくりまわしたのですが、初めてAccessをさわる事もあってよくわかりません

リレーション等でひっぱってくる事ができるのでしょうか?

どなたか教えて頂けませんでしょうか

何卒よろしくお願い致します

PS.Access2013で作成中です

Aベストアンサー

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FROM 社員
ORDER BY 社員.ソート番号;

2、コントロールソースに次のように書きます。

=DLookUp("社員名","社員ソートクエリ","会社ID=" & [会社ID])

http://office.microsoft.com/ja-jp/access-help/HA001228825.aspx

DLookup()については、マイクロソフトの解説を参照されてください。

【DLookup()の限界を破るにはVBAで同じ関数を作るしかない】

マイクロソフトの解説を読めば判りますが、ORDER BY 節を指定する引数が用意されていません。ですから、どうしても、"社員ソートクエリ"を作成するという手間が必要となります。そこで、SQL文を引数とするDBLookup()をVBAで書けば、その手間を省けるという算段になります。この辺りは、好みと趣味の問題。どっちでも良いと思います。そういうお断りをした上で DBLookup()を紹介しておきます。なお、ADOは、つぎのように参照設定しないと利用できません。

http://www.happy2-island.com/access/gogo03/capter00307.shtml

Public Function DBLookup(ByVal strQuerySQL As String, _
             Optional ByVal ReturnValue = Null) As Variant
On Error GoTo Err_DBLookup
  Dim DataValue
  Dim rst     As ADODB.Recordset

  Set rst = New ADODB.Recordset
  With rst
    .Open strQuerySQL, _
       CurrentProject.Connection, _
       adOpenStatic, _
       adLockReadOnly
    If Not .BOF Then
      .MoveFirst
      DataValue = .Fields(0)
    End If
  End With
Exit_DBLookup:
On Error Resume Next
  rst.Close
  Set rst = Nothing
  DBLookup = IIf(Len(DataValue & ""), DataValue, ReturnValue)
  Exit Function
Err_DBLookup:
  MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _
      "・Err.Description=" & Err.Description & Chr$(13) & _
      "・SQL Text=" & strQuerySQL, _
      vbExclamation, " 関数エラーメッセージ"
  Resume Exit_DBLookup
End Function

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FR...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

価格.com 格安SIM 料金比較