2

このサイトや他のサイトを検索しましたが、レコードセットからアイテムを追加するときにリストボックスの正しいリストカウントが表示されない理由についての答えが見つかりませんでした. 他のほとんどのスレッドは、リストボックスの列ヘッダーまたは 65,534 の物理的制限のためにカウントが 1 つずれていることに注目しています。少し違うものを見ている

リンクされた SQL Server 2008 テーブルを使用して Access 2010 を実行しています。

コード:

lstSearchResults.RowSource = ""
lstSearchResults.AddItem ("Material Number;Description")
Set rsParts = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)

If rsParts.RecordCount > 0 Then
    rsParts.MoveLast
    rsParts.MoveFirst
    lngCount = 0
    Do While Not rsParts.EOF
        lngCount = lngCount + 1
        lstSearchResults.AddItem (rsParts.Fields("MaterialNumber") & ";" & rsParts.Fields("Description"))
        rsParts.MoveNext
    Loop
End If

ループの直後にブレークポイントを配置して、次の値を調べました。

lstSearchResults.ListCount - 1012
rsParts.RecordCount - 5255
lngCount - 5255
4

1 に答える 1

2

このメソッドを使用しているためAddItem、リスト ボックスの [Row Source Type] プロパティは "Value List" である必要があります。つまり、Record Source プロパティは、その値のリストを含む文字列です。また、値リストに含めることができる文字数には制限があります。その制限の数は覚えていませんが、値リストに期待するすべての値が含まれていないのはそのためだと思います。

しかし、リスト ボックスの値をロードする簡単な方法があります。レコードセットを開くstrSQLクエリがあり、レコードセットをウォークして、各行から 2 つのフィールド値を値リストに追加します。

SQL ステートメントを直接使用します ... レコードセットを介在させずに。

  1. リスト ボックスの [値集合ソースの種類] を "テーブル/クエリ" に変更します。
  2. リスト ボックスの行ソース プロパティとして SQL ステートメントを使用します。

このアプローチは手間がかからず、値リストの文字制限を回避します。次に、リスト ボックスに 1K 以上の行が本当に適切かどうかを判断するだけです。:-)

于 2013-09-17T18:52:43.160 に答える