VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 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)を使う必要があるかも知れません。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -