お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"DBGrid上の複数のコンボでデータ抽出"






Title: DBGrid上の複数のコンボボックスによる、データ抽出について

 nifty:FDelphi/MES/7/#10945 以降で謎の全知師さんに教えてもらいました。

[例] 2つのマスター(Dai,Syo)を使った家計簿(Kakei)入力
DaiNameの項目をComboBoxで選択し、SyoNameの項目の参照ボタンを開くと
SyoはDaiで選択された物だけを表示し、選択可能となる。
          (一つのDBGridで下記のような入力・修正画面を作成する場合)
---------------------------------------------
 |  Date   | DaiName | SyoName     | Tanka |
---------------------------------------------
1| 98/04/22 | Dai-1 ▼| Syo-11 [...]|  \200  |
---------------------------------------------
2| 98/04/21 | Dai2  | Syo-21      |  \100 |
---------------------------------------------
   (入力)     (選択)  (入力) (表示)   (入力)

[データ構造]
  テーブル:Kakei       テーブル : Dai        テーブル : Syo
    Date  : DateTime      Dai     : Integer     Dai     : Integer
    Dai   : Integer       DaiName : String      Syo     : Integer
    Syo   : Integer                             SyoName : String
    Tanka : Currency

[サンプルデータ]
   [テーブル : Dai ]            [テーブル : Syo]
    Dai DaiName                 Dai Syo SyoName
   -------------------         '-------------------
      1  Dai-1                   1   1  Syo-11
      2  Dai-2                   1   2  Syo-12
                                 2   1  Syo-21
                                 2   2  Syo-22
   [テーブル:kakei]
      Date     Dai  Syo  Tanka
   -----------------------------
    98/04/22    1    1     200
    98/04/21    2    1     100

[作成例]
1)DaiNameは、tblKakei(TTable)の項目設定ダイアログを表示して、
  参照項目として、KeyFieldsとLookupKeyFiewldsに Daiを設定する。

2)SyoNameは、tblKakei(TTable)の項目設定ダイアログを表示して、
  参照項目として、KeyFieldsと LookupKeyFiewldsにDai;Syoを設定する。

3)DBGridのカラムの設定ダイアログを表示して、すべての項目の追加を
  行った後、Syo_Nameを表示している項目を選択して、
  オブジェクトインスペクタで、ButtonStyleをcbsEllipsisに変更する。

4)Syoのテーブルの一覧を表示するフォーム(frmSyo)を別途作る。

5)DBGridのOnEditButtonClickイベントに、frmSyoで選択したSyoを
  Kakeiにセットするようなコードを記述する。

   frmSyo := TfrmSyo.Create( Application );
   try
     if frmSyo.ShowModal = mrOK then
     Begin
        If not (Kakei.State in [dsEdit, dsInsert]) Then
           Kakei.Edit;
        DBGrid1.Columns[3].Field.Assign(
                       frmSyo.DBGrid2.Columns[1].Field);
   finally
     frmSyo.free;
   end;

※ frmSyoを頻繁に呼び出す場合は、自動作成にしてMainFormのClose時に
  Free にした方がよい。
---  
秀之@呉,広島  tico.tanaka@nifty.ne.jp http://member.nifty.ne.jp/TICO/
        [Pan ML] [Delphi] [AutoCAD LT] [Access] [BackTo '60s]

Original document by 秀之            氏 ID:(PXL12416)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum