選択項目を複数選択フィールドから取得します
私のプログラムは下のコード行にクラッシュし続けます.
選択した項目を複数選択フィールドから取得できる方法についてはございますか?
DAO.Database
としてのDIM DBSDAO.RecordSet
としてのDIM RSTRECORDSETDBS= CurrentDB
を設定しますset rstrecordset= dbs.openrecordset( "mytable")
DIMカウント整数
count= 0からrstrecordset!MultiSelectField.ListCount-1
RSTRECORDSET!MULTISELECTFIELS.SELECTED(COUNT)
==>何かをしなさい
の場合は終わります次の
返信リスト(回答:11)
MVF内のアイテムをフィルタリングしたい場合は、それはあなたが尋ねたものとは異なります.クエリで、フィールドリストから.value(mvf.value)を必ず追加してください.そこから、基準でフィルタする値を含めることができます.倍数をフィルタしたい場合は、in()句(Itemlist)を使用できます.
MVFSはkludgeです.多くの人が多いときにデータを入力することがより簡単になるように設計されていましたが、入力されたデータに対処するのが難しくなりました.素敵な簡単なインターフェースのために作ります.しかし、MVFのデータに対処するのを難しくなります.これが、ほとんどのプロの開発者がそれらを使用していない理由です.
私の対応があなたの特定の質問を解決しなかったことを認識しています.しかし、それはあなたにあなたの問題に対する解決策を与えました.
それからあなたはMVFを使ってはいけません.選択したアイテムのカテゴリがMVF内の選択に依存している場合は、本当に構造を変更する必要があります.
MVFは多くの関係の多くのマッシュアップです.多くの人を扱う伝統的な方法は、ジャンクションtableを使用することです.これを説明するために、学生/クラスの関係の古典的な例を使います.学生は複数のクラスに参加することができ、クラスに複数の生徒がいることができます.これをさらに延長するために、クラスはカテゴリに属することができます.そのため、次のような構造があります.
tblestudent:studentid
(PK)、FirstName、LastNameなど
TBLClass:ClassID(PK)、ClasStitle、CategoryID(FK)
TJXStudentClass:StudentClassid(PK)、StudentID(FK)、ClassID(FK)
クラスが複数のカテゴリに属している場合は、クラスとカテゴリの間で多数の多数をモデル化するために別のJunction(TJX)tableが必要です.
だから、MVFは複数の項目を選択するための素晴らしいインターフェースを提示します、それはデータを利用するための明確な挑戦を提示します.
MVF内の値を分離することを考えることができる唯一の方法は、カンマ区切りリストを配列に書き込むことであり、次にアレイを循環させることです.
応答6# ->にスキップ5 #Oまだ解決されていません. (((((((((((((((((((((((((((((((((((((((((((((((((
なぜマイクロソフトはこの部分をSoooooooooが困難にするのですか?
ユーザーが特定のレコードの複数の項目を選択できるように、同じマルチセレクト機能を持つ3つのフィールドを持っています.それはとても柔軟性を大いに提供し、この瞬間まですべてが完璧であってきました.各項目を絞り込むレポートを作成しようとしています
このマルチセレクトコンボボックス.
こんにちはobina、私は独立したアドバイザーNDが助けようとします.
ほとんどのアクセス開発者は、マルチバリューフィールド(MVFS)から離れています.彼らは素敵なインターフェースを作りながら、彼らは扱うのが難しいです.
使用しているコードは、MVFではなくリストボックス用です.フィールドには実際にはアイテムのリストが含まれています.
あなたがここで達成しようとしていることを説明した場合、私たちはさらに助けることができるかもしれません.
応答10# ->にスキップ9 #KenSherスコットが指摘したように、ほとんどの経験豊富なアクセス開発者は多値フィールドの使用を避け、関係の種類を2つの1対多の関係に解決するtableによって多対多関係タイプをモデル化する時間を好む.
タイプ.ただし、コードをわずかに修正することで、同じ方法論をMVFに使用できます.
以下は、My SearchDemo.zipファイルからのコードです. https://onedrive.live.com/?cid=44cc60d7fea42912&id=44cc60d7fea42912年169.
この小さなデモファイルでは、マルチ選択リストボックス内の全部またはいずれかの選択項目に多対多の関係型をモデル化するtable内の一致を使用して、レポートがオープンされます. プライベートサブcmdopenreport_click()
const reportcancelled= 2501 const messageText= "報告するマッチング項目はありません"
VARIATT AS VARIATT
Dim StrStockIdListとして文字列として
薄暗いストリテリア文字列として
コントロールとしてDIM CTRL
Ctrl= Me.LstStockを設定する
Ctrl.ItemSSelected.count>0から
Ctrl.ItemSSelectedの各varitemについて
strstockIDList= strstockIdList&"、"&Ctrl.ItemData(varitem)
次のvaritem
「リーディングカンマを削除」 strstockIdlist= MID(StrStockIdList、2)
OptAnyOrall= 1の場合、その項目は
strcrateria= "StoreID IN(StoreID"&_
"Storestockから"&_
"("&strstockidlist&"))"のStockIDのどこで) "
それ以外の項目はすべて在庫がある
strcrateria= "StoreID IN(StoreID"&_
"Storestockから"&_
"("&strstockidlist&")"&_
"StoreIDによるグループ"&_
「カウント(*)= "&ctrl.itemsSelected.count&") ""
の場合は終了 次の
docmd.openreport "RPTStoreStocks"、_
表示:= acviewpreview、_
WHERCODITION:= Strcrateria
ケースerr.number
ケース0
'エラーなし
ケースレポートカンセル
「予想されるエラー」
MSGBox MessageText、VB情報、「警告」
ケース
'不明なエラー
MsgBox Err.Description、VBexClamation、 "エラー"
終了
MSGBOX「選択された項目なし」、VB情報、「警告」
の場合は終了
このコードをMVFで使用するには、それらがMVFの値プロパティを参照するように、サブクエリのどこの句を修正する必要がある.
"StockId.value("&strstockidlist&")"&_
応答9# ->にスキップ8 #OPooooooy!....それはどんなより簡単になることができますか?
だから私はそれを少し修正しました. MVFをレコードセットとして扱う
DAO.Database
としてのDIM DBSDAO.RecordSet
としてのDIM RSTRECORDSETDAO.RecordSet
として薄暗いRSTMVFDBS= CurrentDB
を設定しますset rstrecordset= dbs.openrecordset( "mytable")
SET RSTMVF= RSTRECORDSET!fieldName.value
rstmvf.eof
ではありませんが....MVFに保存されているアイテムがチェックされているかどうかを確認したいです.
私は何をしますか?
応答8# ->にスキップ7 #KenSherそれはできるだけ単純であり得る、はそれ以上ではありません.
まず、MVFの視覚的表現を1つ以上の値、または選択されているか、および実際には実際に表されているもの、つまりtable内の各行について、関連するサブセットのサブセットを区別する必要があります.の行
選択された値のみ.このサブセットのそれぞれは、MVFのValueプロパティによって参照されます.これは、1つ以上の値のコレクションです.
それからあなたはマルチバリューリストボックスで表されるものを考慮する必要があります.これもこれは値の集まりであり、それぞれはリストボックス内の選択を表します.
したがって、リレーショナル用語で持っているものは2セットで、表内の各行に関連する値の1つ、リストボックスで選択された値のもう一方の値です.MVF内のいずれかの値がリスト内のいずれかの値と一致する表の行を戻す
したがって、箱は関係部門の問題です.これは、データベースリレーショナルモデルの元の8つの代数的な操作の1つであり、もう1つのセットの分割です.
関連するオペレータは、MVFの値がリストボックスで選択された任意の値と一致するかどうかを判断するために、IN演算子です.これは一連の値で動作します.そのため、tableから行を戻すクエリの構文は次のようになります.
<列リスト>を選択しますから
.Value in(リストボックス内で選択されている項目の値リスト>).
一致する行のレコードセットを返すには、最初に、IN演算子を適用できるようにするための値リストを構築する必要があります.このコードを実行するには、リストボックスのItemsSelected Collectionを実行し、各項目を区切る値リストを段階的に構築します.
カンマで.その後、上記の構文を持つSQLステートメントをコードで構築し、フォームまたはレポートのRecordSourceプロパティとして使用することも、コードセットを確立するか、コードをループすることができます.
MVFを含むtableからtable参照から行を戻す必要がある場合、このメソッドは、副問合せによって返された行を再びUN演算子を使用して、副問合せによって返される行を制限することです. 選択*
<参照table>
<主キー>
(<外部キーを選択してください>
<参照table>.Value in(リストボックス内で選択された項目のvalue list);
このクエリは、リレーショナル分割を単一のセット操作としてエフェクトします.最初の演算子が動作する値リストは、リテラル文字列式でなければならないことに注意することが重要です.パラメータにはできません.応答7# ->にスキップ4 #O大丈夫!
チェックされたアイテムをレコードセットに格納するという点までコードを取り扱うことができます.
レコードセットから文字列として保存されているデータを抽出しようとしています.
任意のアイデア?
応答4# ->にスキップ1 #KenSherADO RecordSetオブジェクトのGetStringメソッドをチェックしてください.まさにそれはそうです.[Public Databases]フォルダのCONCAT.ZIPでの使用例は、
https://onedrive.live.com/?cid=44cc60d7fea42912&id=44cc60d7fea42912年169.
この小さなデモファイルでは、関連tableから'concateenate値'へのオプションがあります. getList関数が呼び出されるレポートを開きます.この関数はGetStringメソッドを呼び出して、連結された値の文字列を返します.応答4# ->にスキップ3 #OEurekaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaA!
RSTMVF( "value")を追加し、元の表の項目番号に返された番号を比較することで解決しました.
解決しました!解決しました!解決しました! MEEEEEEEEEEEEEEEEEEEEEEEE :)))))))))))))))))))
DAO.Database
としてのDIM DBSDAO.RecordSet
としてのDIM RSTRECORDSETDAO.RecordSet
として薄暗いRSTMVFDBS= CurrentDB
を設定しますset rstrecordset= dbs.openrecordset( "mytable")
SET RSTMVF= RSTRECORDSET!fieldName.value
rstmvf.eof
ではありませんが次に、RSTMVF( "value")
によって返される各値をグループ化するには、選択ケースを選択します.一緒に渡してください!....シェア!シェア!共有!