DBgridのTeditへの反映方法

解決


りな  2010-01-01 14:00:01  No: 36599  IP: 192.*.*.*

現在、delphi4のservice pack3のデータベースoracle 8iを使って、プログラムを組んでいるのですが、DBGridに表示されたデータの1つのcell(たとえば、ID)をクリックすることによって、選択されたその行の情報がそれぞれのTEditへ反映させる方法を、恐縮ですが、教えていただけないでしょうか?

流れとしては、まず検索画面で検索して、その内容をDBGridに表示、その中のIDセルをクリックすると、その内容がフォーム上のTEditのID,名前、住所等のスペースに反映。

edID := DBGrid1.SelectedRows.field[0];のように書くのではないかと考えているのですが、いまちにわかりません。

書き方の詳細に教えていただけると、幸いです。

編集 削除
初心者  2010-01-01 14:06:12  No: 36600  IP: 192.*.*.*

例えば、こんなこと?。

procedure TForm_TmSelect.DBGrid_Select;
var
   i : integer;
begin
   for i := 0 to DBGrid1.FieldCount - 1 do
      case i of
         0 : wk_code := DBGrid1.Fields[i].AsString;
         1 : wk_mei := DBGrid1.Fields[i].AsString;
         2 : wk_kana := DBGrid1.Fields[i].AsString;
      end;
end;

編集 削除
りな  2010-01-01 14:23:00  No: 36601  IP: 192.*.*.*

迅速な返答ありがとうございます。

書いていただいた内容に関して、何点かお伺いしたいのですが、

TForm_TmSelect.DBGrid_SelectはDBGridのプロパティの中にあるonclickと同じようなコマンドですか?

field[0]の場合は一番左の項目の値、field[1]の場合は左から2番目を指しているのでしょうか?

この作業に対して、for文を使わないといけないでしょうか?

お手数ですが、よろしくお願い致します。

編集 削除
HOta  2010-01-01 15:58:57  No: 36602  IP: 192.*.*.*

初心者の方のDBGrid1.Fields[i].AsString;は、DBGrid1のi番目の項目を表します。
ただ、TDBEditを使ってみたらどうでしょうか?

編集 削除
Null  2010-01-01 18:03:57  No: 36603  IP: 192.*.*.*

> TForm_TmSelect.DBGrid_SelectはDBGridのプロパティの中にあるonclickと同じようなコマンドですか?

onDbclick かな。
procedure TForm1.DBGrid1DblClick(Sender: TObject);
begin
.......
end;


>field[0]の場合は一番左の項目の値、field[1]の場合は左から2番目を指しているのでしょうか?

HOta氏のレスの通りです。


>この作業に対して、for文を使わないといけないでしょうか?

いいえ、特に必要は有りません。
[i]を明示的に指定されても良いと思います。...あくまでも一例です。


HOta氏の、「ただ、TDBEditを使ってみたらどうでしょうか?」が
簡単ではないでしょうか?。

編集 削除
Null  2010-01-01 18:12:25  No: 36604  IP: 192.*.*.*

> onDbclick かな。

ご免なさい。
OnCellClickでもいけるかな。

編集 削除
りな  2010-01-01 18:57:08  No: 36605  IP: 192.*.*.*

最初は、私もTDBEditをしようと思ったのですが、これを使うと直接データベース上のテーブルを操作しているようなイメージがあるのですが、クエリの項目をTDBEditで取得し、TEditと同じようなwith query do ..selectといった構文でupdate等を行うことができるのでしょうか?

また、DBGridで表記された1つの行のIDをクリックしたときに、そのIDが持つ情報(ここでは名前とする)をTEditへ反映させるときは、以下のような書き方でよろしいでしょうか?

TForm_TmSelect.DBGrid_Select;(←これは、自分で作成するんですか?
それとも、onclickのイベントプロシージャーのときのように、そのような項目があって、ダブルクリックすると自動で作成されるのですか?oncellclickを選んだときとは、表記の仕方が違ったのでお伺いしました)

begin
         Mainform.edit_NAME := DBGrid1.Fields[1].AsString;

end;

編集 削除
Null  2010-01-01 19:29:56  No: 36606  IP: 192.*.*.*

> TForm_TmSelect.DBGrid_Select;(←これは、自分で作成するんですか?
多分これは、自前の関数だと思います。


例...
procedure TForm2.DBGrid1CellClick(Column: TColumn);
begin
   Edit1.Text  := DBGrid1.Fields[0].AsString;
   Edit2.Text  := DBGrid1.Fields[1].AsString;
   Edit3.Text  := DBGrid1.Fields[2].AsString;
end;


procedure TForm2.DBGrid1DblClick(Sender: TObject);
begin
   Edit1.Text  := DBGrid1.Fields[0].AsString;
   Edit2.Text  := DBGrid1.Fields[1].AsString;
   Edit3.Text  := DBGrid1.Fields[2].AsString;
end;

DbGridのセルは、列・行とも'0'から始まります。

OnDblClickには、それなりの深い意味が有るような!!。

編集 削除
りな  2010-01-02 11:13:49  No: 36607  IP: 192.*.*.*

Nullさん、詳しく教えていただき、どうもありがとうございました。

編集 削除
りな  2010-01-02 11:15:07  No: 36608  IP: 192.*.*.*

また、HOtaさん・初心者さん、ご協力していただき、ありがとうございました。

編集 削除