- ベストアンサー
AccessVBA SQLのWHERE句について
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
tab1: ID 1 2 4 クエリ1: SELECT tab1.ID, DBLookup("ID","Tab1","ID>" & [ID],0) AS NextID FROM tab1; [イミディエイト] ? DBLookup("ID+1", "クエリ1", "(NextID-ID)>1") 3 簡単なのは[クエリ1]で、現行の値を次の値を発生させること。 で、その差が1以上の時の値+1が空番号。 Public Function DBLookup(ByVal strField As String, _ ByVal strTable As String, _ Optional ByVal strWhere As String = "", _ Optional ByVal ReturnValue = "") As Variant On Error GoTo Err_DBLookup Dim DataValue Dim strQuerySQL As String Dim rst As ADODB.Recordset Set rst = New ADODB.Recordset strQuerySQL = "SELECT " & strField & " FROM " & strTable If Len(strWhere) > 0 Then strQuerySQL = strQuerySQL & " WHERE " & strWhere End If 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
その他の回答 (2)
クエリなしの複文化は試してください。
- bin-chan
- ベストアンサー率33% (1403/4213)
1~フィールドBの最大値までの値を持つ別テーブルをひとつ用意する。 で、不一致クエリを利用して「無い物ねだりリスト」を作成。
お礼
回答ありがとうございました。
関連するQ&A
- AccessVBA SQL テキスト型は大小判定できない?
こんにちわ。 AccessVBA業務暦1ヶ月の新米です。 テーブルからテキスト型のフィールドを抽出するとき、抽出条件として「A~B」とか「Aより大きいもの」 という条件で抽出しているのですがうまくいきません。フィールド自体はテキスト型でとっているのですが、中身のデータは「00001、000023・・・」とか数字で入っています。フィールドを数値型にしたらうまくいくのに、テキスト型にするとうまく抽出できません。解決方法はあるでしょうか?他のシステムとの連携があるので、できればAccess側はテキスト型でとっておきたいです。説明不足かもしれませんが、よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- AccessVBAでの事です。
こんにちは。 よろしくお願いします。 Access2000/WindowsXP にて、VBAを使いデータベースを組んでいます初心者ですー。 あるベースとなるフォーム上に、サブフォームがあり、そのサブフォームは データシートビューで、あるテーブルを表示しています。 そのサブフォームのデータシートをどこかのフィールドをキーにして並べ替えをします。 (フィールド名の上で右クリックメニュー出して「並べ替え昇順」とかを実行) そうするとちゃんと並べ変わります。 さてその様な状態で、VBAにて、そのサブフォームのレコードソースとなっている テーブルをいじろうと思って、ADOのRecordSetでそのテーブルをオープンし、最初から MoveNextでレコードを手繰っていくと、さっきフォーム上で並べ替えた順番でなく、 最初にそのテーブルを作成した順番のままで取得されてしまいます。 これを、フォーム上で並べ替えた順番でレコードセットを取得する方法というのは ないのでしょうか? または 今現在サブフォームのデータシートがどのような条件で並び替えがされているか を知る方法はないでしょうか? ※どのフィールドで並び替えるかは、ユーザーのその時の操作によって不定ですので あらかじめ並び替えのクエリーを作っておいて Dim cnt As New ADODB.Connection Dim rst As New ADODB.RecordSet Set cnt = CurrentProject,Connection rst.Open "クエリQ1", cnt, adOpenKeyset, adLockOptimistic と、クエリーでオープンする事もできません。。 どうか、よろしくお願いいたします!!!
- ベストアンサー
- その他(データベース)
- SQLで、Join句で結合したテーブルにデータが無い場合について
SQLについての質問です。 Join句を使ってテーブルを結合しています。 Aテーブル(社員データ)に存在する勤務区分フィールドの値に対応して、 Bテーブル(勤務データ)から勤務区分(一意)に対応したデータを持って来るSQLを作成したところ、 Bテーブルに存在しない勤務区分を持つAテーブルのデータは結果に出ませんでした。 このように、結合したBテーブルに対応するデータが無い場合でも、Aテーブルに存在するデータを全て出したい場合、 何か方法はあるのでしょうか? 現在は一度Aテーブルから全てのデータをセレクトした後に、1件1件ループしてBテーブルからセレクトする方法をしていますがもっと簡潔にできるなら簡潔にしたいと思っています。 どなたかお答え頂けると幸いです。よろしくお願いします。
- ベストアンサー
- SQL Server
- order by について
質問させてください。 下記テーブルがあるとします。 [samle_tbl](フィールドa, b(integer)) ====== a|b ====== 2|* *|4 3|5 4|2 *|1 2|6 1|2 (※*はNULLデータ) 上記のテーブルでa, bフィールドにおいて数字の大きいレコード順に取得したいとかんがえています。 2|6 3|5 *|4 4|2 2|* 1|2 *|1 簡単にいうとa, bフィールドの値においてどちらかの数値がa, bフィールド内において降順にレコードをシュとくしたいです。 同じ順番に値する場合*(NULLデータ)を含むレコードと含まないレコードの順番は気にしません。 どのようなSQLを実行すれば取得できますでしょうか?
- ベストアンサー
- その他(データベース)
- SQLのbetweenについて
現在SQLを勉強しています。 C♯とSQLServerを使用しているのですが betweenを使って困った点があります。 自分で入力するAとB(どちらも数字)をbetweenの条件にしていしているのですが 例) select フィールド名 from テーブル where フィールド名 between A and B; → テーブルのフィールド名 の中のAからBのデータを選択する は問題ありません。 ですがAとBが未入力だとエラーが当然でてしまいます。 そこで未入力だとフィールド名の中を全件selectするようにしたいのですが、これはbetween で出来るのでしょうか? おそらくは条件であれこれ指定するのだと思いますが… 回答お願いします
- ベストアンサー
- SQL Server
- ACCESS2003クエリの結合した表示形式が
ACCESS2003でクエリを作成しました。各テーブルのフィールドを結合したのですが 表示形式が思ったようになりませんでした。 【Aテーブル】 フィールド:学部NO データ型:数値型 書式:00 【Bテーブル】 フィールド:学科NO データ型:数値型 書式:00 【ABクエリ】 フィールド:学籍NO:[Aテーブル]![学部NO]&[Bテーブル]![学科NO] 【ABクエリ】の結果が数字が4桁表示されません。 (例) 0101 と表示してほしいのですが、 11 と表示されます。 各テーブルでは、01と表示されるのですが・・・。 宜しくお願いします。
- ベストアンサー
- その他MS Office製品
- Access97でテーブルのデータを並べ替える方法
Access97で(OSは98)テーブルで入力したデータをクエリーで並べ替えをかけるのですが、 そのフィールドのデータを昇順、降順以外で自分の思うような順番で 並べ替えることができますか? 例) パソコン、デジタルカメラ、プリンタ、メディアのような順番で。。。 今後他のテーブルと結合するのでこれら以外にコード番号を入力する フィールドを作り、これらをこの順番で入力すればよいのかもしれませんが Excelのユーザー設定リストを並べ替えで使うような機能がAccessにあったかと思いまして。よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- SQLを教えてください
毎月月末に、当月分のtbl_orderのデータを tbl_order_oldに移す作業を手動で行っているのですが、 SQL一回もしくは、二回で出来ないしょうか tbl_order_oldテーブルはtbl_orderテーブルと全く同じ構造になっています。 tbl_order itemname orderday りんご 2015/11/1 みかん 2015/11/2 もも 2015/11/30 かき 2015/12/1 いちご 2015/12/2 (1)tbl_order_oldにorderdayが2015/11/1~2015/11/30までのデータを追加 (2)tbl_orderからorderdayが2015/11/1~2015/11/30までのデータを削除
- ベストアンサー
- MySQL
- MSアクセス SQLの書き方(UPDATE)
MSアクセス2010 テーブルA フィールドA=テキスト型(4文字) テーブルB フィールドA=テキスト型(2文字) フィールドB=Yes/No型 テーブルBの2文字が、テーブルAの4文字に含まれていたら、テーブルBの全てのレコードのYes/No型をTrueにしたい。 rs.MoveNextでループを使わず一括でする方法はないですか? DoCmd.RunSQL "UPDATE テーブルB SET フィールドB=True WHERE (テーブルAの文字にテーブルBの文字が含まれていたら) みたいな感じで。
- ベストアンサー
- その他(データベース)
お礼
回答ありがとうございました。