- ベストアンサー
AccessVBA SQLのWHERE句について
こんにちは! テーブルAのBフィールドの中に以下のデータがあるとき(昇順です) 1,2,5,6,12.... 3という数値を得たいです。 3,4がフィールドに含まれる場合は、7です。 数字がバラバラなので、データを新規追加した時に穴埋めをしていきたいのです。 データの登録した順番は関係ないものとして、どのように実現できますでしょうか? ORDERでデータを取ってきて、ループするしかないのでしょうか・・・? 特殊な例ですみませんが、宜しくお願い致します。
- みんなの回答 (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の最大値までの値を持つ別テーブルをひとつ用意する。 で、不一致クエリを利用して「無い物ねだりリスト」を作成。
お礼
回答ありがとうございました。
お礼
回答ありがとうございました。