• ベストアンサー

AccessVBA SQLのWHERE句について

こんにちは! テーブルAのBフィールドの中に以下のデータがあるとき(昇順です) 1,2,5,6,12.... 3という数値を得たいです。 3,4がフィールドに含まれる場合は、7です。 数字がバラバラなので、データを新規追加した時に穴埋めをしていきたいのです。 データの登録した順番は関係ないものとして、どのように実現できますでしょうか? ORDERでデータを取ってきて、ループするしかないのでしょうか・・・? 特殊な例ですみませんが、宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
noname#140971
noname#140971
回答No.2

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

jobvba
質問者

お礼

回答ありがとうございました。

その他の回答 (2)

noname#140971
noname#140971
回答No.3

クエリなしの複文化は試してください。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

1~フィールドBの最大値までの値を持つ別テーブルをひとつ用意する。 で、不一致クエリを利用して「無い物ねだりリスト」を作成。

jobvba
質問者

お礼

回答ありがとうございました。

関連するQ&A