プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/10/31 12:57

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

    • good
    • 0

1~フィールドBの最大値までの値を持つ別テーブルをひとつ用意する。


で、不一致クエリを利用して「無い物ねだりリスト」を作成。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/10/31 12:57

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