投稿日 | : 2003/04/07(Mon) 12:05 |
投稿者 | : 魔界の仮面弁士 |
Eメール | : |
URL | : |
タイトル | : Re^3: レコードセットをグリッドに表示 |
> レコードセット取得後、MsgBoxにてadoRs.Fields(0).Valueは一番若い日付が表示されますので、
2件目以降の順番はあっているでしょうか。
>> Clipプロパティに、RecordsetのGetStringメソッドの戻り値を渡すようにすれば、
>> 複数のセルに、値を一括して代入できるかと思います。
> すいません。やり方がわかりませんでした。
MSHFlexGridのClipプロパティは、現在選択されている範囲のセルの内容を、
各列をタブ(vbTab)文字で区切り、各行をキャリッジリターン(vbCr)で区切った文字列として返します。
(セル範囲の指定は、Row/Col/RowSel/ColSelプロパティで行います)
このClipプロパティに、vbTabとvbCrで区切られた文字列を送れば、
複数のセルの内容を、一度に設定できるわけです。
そして、このvbTab/vbCr区切りの文字列を作成するために、Recordsetオブジェクトの内容を
文字列として返してくれる「GetStringメソッド」が役に立つはずです。
GetStringの第3引数(ColumnDelimiter)にvbTabを指定し、第4引数(RowDelimiter)にvbCrを
指定すれば、vbTab/vbCr区切りの文字列を簡単に作成することができます。
>> まず、サーバー側カーソルを利用している場合は、それをadUseClientに変更してみてください。
> すいません。やり方がわかりませんでした。
「CursorLocationプロパティ」を設定してください、という事です。
つまり、
adoRs.CursorLocation = adUseClient
adoRs.Open strSQL, adoCn, adOpenStatic, adLockReadOnly, adCmdText
という感じです。
adoRs.CursorLocationを特に指定しなかった場合は、adoCn.CursorLocationの値が
引き継がれる事になります。なお、CursorLocationの規定値はadUseServerです。
>> それで駄目なら、さらにSortプロパティを使って、ローカルソートをかけてみてください。
なお、先の投稿で私が書いた、上記の「Sortプロパティ」というのは、
RecordsetオブジェクトのSortプロパティの事を指しています。
> Sortをしたのですが、他のフィールド年齢などはソートがかかって昇順・降順ともできるのですが
この場合のSortというのは、SQL中のORDER BYの事でしょうか?(※1)
それとも、RecordsetのSortプロパティの事でしょうか?(※2)
あるいは、MSHFlexGridの事でしょうか?(※3)
(※1) 通常は、SQLのORDER BY指定だけで、問題ないと思います。
手元にMSDE 1.0は無いのですが、SQL Server 2000の環境
(SQL Server 2000/SP3 + MDAC 2.7SP1 + VB6/SP5)で試してみた限りでは、
提示されたコードそのままで、"ORDER BY 日付 ASC"順に表示されました。
(※2) Recordset.Sortを利用するためには、RecordsetのCursorLocationが
クライアント側カーソル(adUseClient)に設定されている必要があります。
(※3) MSHFlexGrid.Sortを用いる場合は、ソートモードを確認してください。
DB側のフィールドのデータ型によっては、数値ソート(flexSortNumericAscending)や
文字列ソート(flexSortStringNoCaseAsending/flexSortStringAscending)では
対応できず、カスタムソート(flexSortCustom)を使う必要があるかも知れません。