プロフィール

alphan

Author:alphan
FC2ブログへようこそ!

暗号ツール
最近の記事
カテゴリー
カレンダー

09 | 2017/10 | 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -

月別アーカイブ
最近のコメント
最近のトラックバック
FC2カウンター

天気予報


-天気予報コム- -FC2-

ブロとも申請フォーム
ブログ内検索

RSSフィード
リンク
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ADODCと連結したDataGridには通常はレコードの各フィールドの内容が表示されます。
この表示データがBooleanだったりするときにYes/NoでDataGridのカラムを表示したり、あるいはチェックボックス形式でDataGridのカラムを表示する方法は、色々とWeb上でも取り上げられていますよね。
いわゆる該当するカラムのDataFormatsでTypeとTrueValueとFalseValueなどを指定すれば容易にチェックボックス化が可能でした。
(もっとも.Net全盛の今では.Netでの方法ばかり目立っていますが。)

さて、まだVB6も使っている私は、かねてからAccessのようにユーザー定義関数をカラム表示時点で介入できないものかと思っていました。
AccessではSQL自体にユーザー定義関数を書けましたので、表示時点で色々な要求に応えることが出来ていました。
しかし、VB6+ADO+DB(Accessなど)の組みあわせではVB6上でADODCに連結させたDataGridとして表の表示を行っているため、このDataGridにはユーザー定義関数など介入できないものと半ば諦めていました。

でも、そんなに難しくなく可能だったのですね。 知らなかったぁ!
Web上でちょっと検索した程度では見つからなかったので、ここに記録しておきます。(検索方法が悪いって怒られそう)

1.表示対象のDBを用意する。
2.ADOのためにMicrosoft ActiveX Data Objects Library をVB6の参照設定に追加。
3.StdDataFormat オブジェクトを使うのでMicrosoft Data Formatting Object LibraryをVB6の参照設定に追加。
4.また、コンポーネントにはMicrosoft Data Grid Control とMicrosoft ADO Data Control を追加しましょう。
5.VB6のフォーム上にDataGridとADODCを貼り付けます。
6.ADODCにConnectionString プロパティ等を設定してTableからのSELECT文を指定します。
7.DataGridのDataSource プロパティにADODCを指定します。

さあ、ここまでならば単にテーブルの内容がグリッドに表示されるだけですね。
ここでの目的は、データ表示内容をそのままではなくてユーザー定義関数で1列目ぼ内容を変形して出力することにしましょう。

8.フォームのコードのグローバル部分に以下を追加しましょう。
  (WithEvents 属性を付加してOwnFormatとして呼ぶ StdDataFormat 変数を作ります。)

Private WithEvents OwnFormat As StdDataFormat

9.カスタムなTypeとして StdDataFormatオブジェクトのインスタンスを作成して、DataGridの1列目にバインドします。

Private Sub Form_Load()
Set OwnFormat = New StdDataFormat
OwnFormat.Type = fmtCustom
Set DataGrid.Columns(0).DataFormat = OwnFormat
End Sub

10.フォーマット時のイベントコードを書きます。(レコードからDataGridに表示時。)

Private Sub OwnFormat_Format(ByVal DataValue As StdFormat.StdDataValue)
DataValue.Value = ユーザー定義の変形関数(DataValue.Value)
End Sub

11.アンフォーマット時のイベントコードを書きます。(逆にレコードに格納時。)

Private Sub OwnFormat_UnFormat(ByVal DataValue As StdFormat.StdDataValue)
DataValue.Value = ユーザー定義の戻し関数(DataValue.Value)
End Sub

ほら、意外に簡単でしょ?

レコードからデータグリッドに表示時点であなたが作った「ユーザー定義の変形関数(DataValue.Value)」で変形されて表示さてます。
更新可能なDataGridでも、データグリッド上でTextを変更すると、レコードに戻すまえにあなたが作った「ユーザー定義の戻し関数(DataValue.Value)」で逆変換されて格納されます。

今まで中間Table作ったりしてもっと面倒なことをしていたのが悔やまれます。
ま、今後は.Net化すれば簡単なのでしょうが、移植がだるいとVB6のままにしている私のような人には少し便利かも・・・。
スポンサーサイト

 VBも昔のVB2とかVB4の頃と違って、VB6では結構多くのコントロールをフォームに貼ってもそれなりに動くようになりました。
 DB直結の画面もいい気になってバシバシ作っていてハマることがあります。
 DataFieldの数(対応するTextBoxの配列数)などはかなり多数に出来ますが、DC(Data Control)のReacordSourceプロパティにセットするSQL文字列の全体の長さは、およそ2800文字程度までにしないと、VB6がメモリ例外等で落ちることがあります。
 いわゆる、Tableのカラム名称を長くし過ぎると、接続するカラムの数が増えるに従って、SQL文字列自体が長くなってこういう現象に陥ってしまうようですね。

前後のページの案内

バンドメンバー募集のキング 新着コールマン通販
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。